Encode

Trait Encode 

Source
pub trait Encode {
    // Required method
    fn encode(&self, w: impl Write) -> Result<()>;

    // Provided method
    fn encode_slice(slice: &[Self], w: impl Write) -> Result<()>
       where Self: Sized { ... }
}
Expand description

The Encode trait allows objects to be written to the Minecraft protocol. It is the inverse of Decode.

§Deriving

This trait can be implemented automatically for structs and enums by using the Encode derive macro. All components of the type must implement Encode. Components are encoded in the order they appear in the type definition.

For enums, the variant to encode is marked by a leading VarInt discriminant (tag). The discriminant value can be changed using the #[packet(tag = ...)] attribute on the variant in question. Discriminant values are assigned to variants using rules similar to regular enum discriminants.

use chunkedge_binary::Encode;

#[derive(Encode)]
struct MyStruct<'a> {
    first: i32,
    second: &'a str,
    third: [f64; 3],
}

#[derive(Encode)]
enum MyEnum {
    First,  // tag = 0
    Second, // tag = 1
    #[packet(tag = 25)]
    Third, // tag = 25
    Fourth, // tag = 26
}

let value = MyStruct {
    first: 10,
    second: "hello",
    third: [1.5, 3.14, 2.718],
};

let mut buf = vec![];
value.encode(&mut buf).unwrap();

println!("{buf:?}");

Required Methods§

Source

fn encode(&self, w: impl Write) -> Result<()>

Writes this object to the provided writer.

If this type also implements Decode then successful calls to this function returning Ok(()) must always successfully decode using the data that was written to the writer. The exact number of bytes that were originally written must be consumed during the decoding.

Provided Methods§

Source

fn encode_slice(slice: &[Self], w: impl Write) -> Result<()>
where Self: Sized,

Like Encode::encode, except that a whole slice of values is encoded.

This method must be semantically equivalent to encoding every element of the slice in sequence with no leading length prefix (which is exactly what the default implementation does), but a more efficient implementation may be used.

This method is important for some types like u8 where the entire slice can be encoded in a single call to write_all. Because impl specialization is unavailable in stable Rust at the time of writing, we must make the slice specialization part of this trait.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl Encode for EntityAttribute

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl Encode for EntityAttributeOperation

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl Encode for BlockEntityKind

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl Encode for BlockKind

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl Encode for ItemKind

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl Encode for bool

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

fn encode_slice(slice: &[bool], w: impl Write) -> Result<()>

Source§

impl Encode for f32

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl Encode for f64

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl Encode for i8

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

fn encode_slice(slice: &[i8], w: impl Write) -> Result<()>

Source§

impl Encode for i16

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl Encode for i32

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl Encode for i64

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl Encode for i128

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl Encode for str

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl Encode for u8

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

fn encode_slice(slice: &[u8], w: impl Write) -> Result<()>

Source§

impl Encode for u16

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl Encode for u32

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl Encode for u64

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl Encode for u128

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl Encode for ()

Source§

fn encode(&self, _w: impl Write) -> Result<()>

Source§

impl Encode for BlockState

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl Encode for RegistryId

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl Encode for Compound

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl Encode for NetworkCompound

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl Encode for RgbColor

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl Encode for JsonText

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl Encode for Text

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl Encode for String

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl Encode for Quat

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl Encode for Vec3A

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl Encode for Vec4

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl Encode for Vec2

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl Encode for Vec3

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl Encode for DQuat

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl Encode for DVec2

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl Encode for DVec3

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl Encode for IVec3

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl Encode for Uuid

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl<A: Encode> Encode for (A,)

Source§

fn encode(&self, _w: impl Write) -> Result<()>

Source§

impl<A: Encode, B: Encode> Encode for (A, B)

Source§

fn encode(&self, _w: impl Write) -> Result<()>

Source§

impl<A: Encode, B: Encode, C: Encode> Encode for (A, B, C)

Source§

fn encode(&self, _w: impl Write) -> Result<()>

Source§

impl<A: Encode, B: Encode, C: Encode, D: Encode> Encode for (A, B, C, D)

Source§

fn encode(&self, _w: impl Write) -> Result<()>

Source§

impl<A: Encode, B: Encode, C: Encode, D: Encode, E: Encode> Encode for (A, B, C, D, E)

Source§

fn encode(&self, _w: impl Write) -> Result<()>

Source§

impl<A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode> Encode for (A, B, C, D, E, F)

Source§

fn encode(&self, _w: impl Write) -> Result<()>

Source§

impl<A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode> Encode for (A, B, C, D, E, F, G)

Source§

fn encode(&self, _w: impl Write) -> Result<()>

Source§

impl<A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode, H: Encode> Encode for (A, B, C, D, E, F, G, H)

Source§

fn encode(&self, _w: impl Write) -> Result<()>

Source§

impl<A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode, H: Encode, I: Encode> Encode for (A, B, C, D, E, F, G, H, I)

Source§

fn encode(&self, _w: impl Write) -> Result<()>

Source§

impl<A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode, H: Encode, I: Encode, J: Encode> Encode for (A, B, C, D, E, F, G, H, I, J)

Source§

fn encode(&self, _w: impl Write) -> Result<()>

Source§

impl<A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode, H: Encode, I: Encode, J: Encode, K: Encode> Encode for (A, B, C, D, E, F, G, H, I, J, K)

Source§

fn encode(&self, _w: impl Write) -> Result<()>

Source§

impl<A: Encode, B: Encode, C: Encode, D: Encode, E: Encode, F: Encode, G: Encode, H: Encode, I: Encode, J: Encode, K: Encode, L: Encode> Encode for (A, B, C, D, E, F, G, H, I, J, K, L)

Source§

fn encode(&self, _w: impl Write) -> Result<()>

Source§

impl<B> Encode for Cow<'_, B>
where B: ToOwned + Encode + ?Sized,

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl<K, V> Encode for BTreeMap<K, V>
where K: Encode, V: Encode,

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl<K, V, S> Encode for HashMap<K, V, S>
where K: Encode, V: Encode,

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl<K: Encode, V: Encode> Encode for IndexMap<K, V>

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl<S: Encode> Encode for Ident<S>

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl<T> Encode for BTreeSet<T>
where T: Encode,

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl<T, S> Encode for HashSet<T, S>
where T: Encode,

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl<T: Encode + ?Sized> Encode for &T

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl<T: Encode + ?Sized> Encode for &mut T

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl<T: Encode + ?Sized> Encode for Box<T>

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl<T: Encode + ?Sized> Encode for Rc<T>

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl<T: Encode + ?Sized> Encode for Arc<T>

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl<T: Encode> Encode for Option<T>

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl<T: Encode> Encode for [T]

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl<T: Encode> Encode for Vec<T>

Source§

fn encode(&self, w: impl Write) -> Result<()>

Source§

impl<T: Encode, const N: usize> Encode for [T; N]

Like tuples, fixed-length arrays are encoded and decoded without a VarInt length prefix.

Source§

fn encode(&self, w: impl Write) -> Result<()>

Implementors§

Source§

impl Encode for IDSet

Source§

impl Encode for VariableBitSet

Source§

impl Encode for ByteAngle

Source§

impl Encode for RawBytes<'_>

Source§

impl Encode for TextComponent

Source§

impl Encode for VarInt

Source§

impl Encode for VarLong

Source§

impl<T: Encode + Clone + Debug + PartialEq> Encode for IdOr<T>

Source§

impl<T: Encode, const MAX_LEN: usize> Encode for Bounded<&[T], MAX_LEN>

Source§

impl<T: Encode, const N: usize> Encode for FixedArray<T, N>

Source§

impl<const BIT_COUNT: usize, const BYTE_COUNT: usize> Encode for FixedBitSet<BIT_COUNT, BYTE_COUNT>

Source§

impl<const MAX_BYTES: usize> Encode for Bounded<RawBytes<'_>, MAX_BYTES>

Raises an encoding error if the inner slice is longer than MAX_BYTES.

Source§

impl<const MAX_CHARS: usize> Encode for Bounded<&str, MAX_CHARS>

Source§

impl<const MAX_CHARS: usize> Encode for Bounded<String, MAX_CHARS>