pub trait Parcel: Sized {
const TYPE_NAME: &'static str;
// Required methods
fn read_field(
read: &mut dyn Read,
settings: &Settings,
hints: &mut Hints,
) -> Result<Self, Error>;
fn write_field(
&self,
write: &mut dyn Write,
settings: &Settings,
hints: &mut Hints,
) -> Result<(), Error>;
// Provided methods
fn read(read: &mut dyn Read, settings: &Settings) -> Result<Self, Error> { ... }
fn write(
&self,
write: &mut dyn Write,
settings: &Settings,
) -> Result<(), Error> { ... }
fn into_stream(self, settings: &Settings) -> Result<Cursor<Vec<u8>>, Error> { ... }
fn from_raw_bytes(bytes: &[u8], settings: &Settings) -> Result<Self, Error> { ... }
fn field_from_raw_bytes(
bytes: &[u8],
settings: &Settings,
hints: &mut Hints,
) -> Result<Self, Error> { ... }
fn raw_bytes(&self, settings: &Settings) -> Result<Vec<u8>, Error> { ... }
fn raw_bytes_field(
&self,
settings: &Settings,
hints: &mut Hints,
) -> Result<Vec<u8>, Error> { ... }
fn type_name(&self) -> &'static str { ... }
}Expand description
A value which can be read and written.
All of the expected standard Rust types implement this.
Types that implement Parcel include (not exhaustive):
- The Rust primitive types
u8,i8,u16,i16…u64bool,charf32,f64- Tuples
(T1) where T1: Parcel(T1, T2) where T1: Parcel, T2: Parcel(T1, T2, ... Tn) where T1: Parcel, T2: Parcel, ... Tn: Parcel
- Arrays
[T; 0] where T: Parcel[T; 1] where T: Parcel[T; 2] where T: Parcel[T; 32] where T: Parcel[T; 40] where T: Parcel[T; 42] where T: Parcel- …
[T; 64] where T: Parcel- …
[T; 1024] where T: Parcel
StringOption<T: Parcel>Box<T: Parcel>- Smart pointers
std::rc::Rcstd::sync::Arc
std::collectionsVec<T: Parcel>VecDeque<T: Parcel>HashMap<T: Parcel>BTreeMap<T: Parcel>
Required Associated Constants§
Required Methods§
Provided Methods§
Sourcefn read(read: &mut dyn Read, settings: &Settings) -> Result<Self, Error>
fn read(read: &mut dyn Read, settings: &Settings) -> Result<Self, Error>
Reads a new item with a fresh set of hints.
Blocks until a value is received.
Sourcefn write(&self, write: &mut dyn Write, settings: &Settings) -> Result<(), Error>
fn write(&self, write: &mut dyn Write, settings: &Settings) -> Result<(), Error>
Writes a value to a stream.
Sourcefn into_stream(self, settings: &Settings) -> Result<Cursor<Vec<u8>>, Error>
fn into_stream(self, settings: &Settings) -> Result<Cursor<Vec<u8>>, Error>
Convers the value into a byte stream that implements std::io::Read.
Sourcefn from_raw_bytes(bytes: &[u8], settings: &Settings) -> Result<Self, Error>
fn from_raw_bytes(bytes: &[u8], settings: &Settings) -> Result<Self, Error>
Parses a new value from its raw byte representation.
Returns Err if the bytes represent an invalid value.
Sourcefn field_from_raw_bytes(
bytes: &[u8],
settings: &Settings,
hints: &mut Hints,
) -> Result<Self, Error>
fn field_from_raw_bytes( bytes: &[u8], settings: &Settings, hints: &mut Hints, ) -> Result<Self, Error>
Parses a new value from its raw byte representation.
Returns Err if the bytes represent an invalid value.
Sourcefn raw_bytes(&self, settings: &Settings) -> Result<Vec<u8>, Error>
fn raw_bytes(&self, settings: &Settings) -> Result<Vec<u8>, Error>
Gets the raw byte representation of the value.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".