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
…u64
bool
,char
f32
,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
String
Option<T: Parcel>
Box<T: Parcel>
std::ops::Range<T: Parcel>
- Smart pointers
std::rc::Rc
std::sync::Arc
std::collections
Vec<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", so this trait is not object safe.