Skip to main content

ByteArray

Struct ByteArray 

Source
#[repr(transparent)]
pub struct ByteArray(pub Vec<u8>);
Expand description

A raw sequence of bytes whose length is supplied by context.

A ByteArray has no wire length prefix. Its meaning and number of bytes are determined by the enclosing packet or data structure, which supplies the length through Context::for_array_length or Context::with_array_length. It is encoded as exactly that many bytes:

byte[0] + byte[1] + ... + byte[length - 1]

This differs from PrefixedArray, which stores its own VarInt length, and from Array, which supports arbitrary contextual element codecs. ByteArray writes and reads its byte buffer in one operation and does not use array element contexts.

§Examples

use mcproto_types::ContextualCodec;
use mcproto_types::contextual::{ByteArray, Context};

let value = ByteArray(vec![0xde, 0xad, 0xbe, 0xef]);
let context = Context::for_array_length(4);
let mut encoded = Vec::new();
value.encode_with_context(&mut encoded, &context)?;
assert_eq!(encoded, [0xde, 0xad, 0xbe, 0xef]);

let mut input = encoded.as_slice();
assert_eq!(ByteArray::decode_with_context(&mut input, &context)?, value);
assert!(input.is_empty());

Tuple Fields§

§0: Vec<u8>

The raw bytes.

Implementations§

Source§

impl ByteArray

Source

pub const fn new(bytes: Vec<u8>) -> Self

Creates a byte array from raw bytes.

Source

pub const fn len(&self) -> usize

Returns the number of bytes.

Source

pub const fn is_empty(&self) -> bool

Returns whether this byte array is empty.

Source

pub const fn as_slice(&self) -> &[u8]

Returns the bytes as a slice.

Source

pub fn into_vec(self) -> Vec<u8>

Extracts the underlying byte vector.

Trait Implementations§

Source§

impl Clone for ByteArray

Source§

fn clone(&self) -> ByteArray

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl ContextualCodec for ByteArray

Source§

fn encode_with_context( &self, writer: &mut impl Write, context: &Context, ) -> Result<(), CodecError>

Encodes this value using context supplied by its enclosing structure.
Source§

fn decode_with_context( reader: &mut impl Read, context: &Context, ) -> Result<Self, CodecError>

Decodes this value using context supplied by its enclosing structure.
Source§

impl Debug for ByteArray

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for ByteArray

Source§

fn default() -> ByteArray

Returns the “default value” for a type. Read more
Source§

impl Eq for ByteArray

Source§

impl From<ByteArray> for Vec<u8>

Source§

fn from(bytes: ByteArray) -> Self

Converts to this type from the input type.
Source§

impl From<Vec<u8>> for ByteArray

Source§

fn from(bytes: Vec<u8>) -> Self

Converts to this type from the input type.
Source§

impl Hash for ByteArray

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for ByteArray

Source§

fn eq(&self, other: &ByteArray) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for ByteArray

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.