pub trait BufferValue: Sized {
const FIXED_WIDTH: Option<FixedWidth> = None;
// Required methods
fn write_value(&self, w: &mut BufferWriter);
unsafe fn read_value(
r: &mut BufferReader<'_>,
) -> Result<Self, BufferDecodeError>;
// Provided method
fn encoded_len(&self) -> usize { ... }
}Expand description
A value that can serialize itself into (and decode itself from) the WeaveFFI buffer format.
The #[weaveffi::record], #[weaveffi::enumeration], and
#[weaveffi::error] expansions implement this for annotated types, and
blanket implementations below cover primitives, String, Option<T>,
Vec<T> (bytes are Vec<u8>), the map types, and Arc<T> (an interface
object token), so nested composites compose automatically.
Provided Associated Constants§
Sourceconst FIXED_WIDTH: Option<FixedWidth> = None
const FIXED_WIDTH: Option<FixedWidth> = None
Some when this type’s encoding is its little-endian memory layout
(see FixedWidth). Leave the default.
Required Methods§
Sourcefn write_value(&self, w: &mut BufferWriter)
fn write_value(&self, w: &mut BufferWriter)
Append this value’s encoding to w.
Sourceunsafe fn read_value(
r: &mut BufferReader<'_>,
) -> Result<Self, BufferDecodeError>
unsafe fn read_value( r: &mut BufferReader<'_>, ) -> Result<Self, BufferDecodeError>
Decode one value of this type from r.
§Errors
Returns an error when the buffer is exhausted or holds invalid data for this type.
§Safety
Unless r was built with BufferReader::token_free, every object
token the value contains must carry one strong reference to a live
object of the token’s type that hasn’t been adopted yet; reading
adopts it. Generated thunks satisfy this because the ABI requires
every token a consumer writes to come from a fresh _clone, and they
decode each buffer exactly once.
Provided Methods§
Sourcefn encoded_len(&self) -> usize
fn encoded_len(&self) -> usize
The exact number of bytes write_value appends,
used to size encodings up front. The default of 0 is a valid (if
slower) hint; every built-in and generated implementation is exact.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".
Implementations on Foreign Types§
Source§impl BufferValue for String
impl BufferValue for String
fn encoded_len(&self) -> usize
fn write_value(&self, w: &mut BufferWriter)
unsafe fn read_value( r: &mut BufferReader<'_>, ) -> Result<Self, BufferDecodeError>
Source§impl BufferValue for bool
impl BufferValue for bool
fn encoded_len(&self) -> usize
fn write_value(&self, w: &mut BufferWriter)
unsafe fn read_value( r: &mut BufferReader<'_>, ) -> Result<Self, BufferDecodeError>
Source§impl BufferValue for f32
impl BufferValue for f32
const FIXED_WIDTH: Option<FixedWidth>
fn encoded_len(&self) -> usize
fn write_value(&self, w: &mut BufferWriter)
unsafe fn read_value( r: &mut BufferReader<'_>, ) -> Result<Self, BufferDecodeError>
Source§impl BufferValue for f64
impl BufferValue for f64
const FIXED_WIDTH: Option<FixedWidth>
fn encoded_len(&self) -> usize
fn write_value(&self, w: &mut BufferWriter)
unsafe fn read_value( r: &mut BufferReader<'_>, ) -> Result<Self, BufferDecodeError>
Source§impl BufferValue for i8
impl BufferValue for i8
const FIXED_WIDTH: Option<FixedWidth>
fn encoded_len(&self) -> usize
fn write_value(&self, w: &mut BufferWriter)
unsafe fn read_value( r: &mut BufferReader<'_>, ) -> Result<Self, BufferDecodeError>
Source§impl BufferValue for i16
impl BufferValue for i16
const FIXED_WIDTH: Option<FixedWidth>
fn encoded_len(&self) -> usize
fn write_value(&self, w: &mut BufferWriter)
unsafe fn read_value( r: &mut BufferReader<'_>, ) -> Result<Self, BufferDecodeError>
Source§impl BufferValue for i32
impl BufferValue for i32
const FIXED_WIDTH: Option<FixedWidth>
fn encoded_len(&self) -> usize
fn write_value(&self, w: &mut BufferWriter)
unsafe fn read_value( r: &mut BufferReader<'_>, ) -> Result<Self, BufferDecodeError>
Source§impl BufferValue for i64
impl BufferValue for i64
const FIXED_WIDTH: Option<FixedWidth>
fn encoded_len(&self) -> usize
fn write_value(&self, w: &mut BufferWriter)
unsafe fn read_value( r: &mut BufferReader<'_>, ) -> Result<Self, BufferDecodeError>
Source§impl BufferValue for u8
impl BufferValue for u8
const FIXED_WIDTH: Option<FixedWidth>
fn encoded_len(&self) -> usize
fn write_value(&self, w: &mut BufferWriter)
unsafe fn read_value( r: &mut BufferReader<'_>, ) -> Result<Self, BufferDecodeError>
Source§impl BufferValue for u16
impl BufferValue for u16
const FIXED_WIDTH: Option<FixedWidth>
fn encoded_len(&self) -> usize
fn write_value(&self, w: &mut BufferWriter)
unsafe fn read_value( r: &mut BufferReader<'_>, ) -> Result<Self, BufferDecodeError>
Source§impl BufferValue for u32
impl BufferValue for u32
const FIXED_WIDTH: Option<FixedWidth>
fn encoded_len(&self) -> usize
fn write_value(&self, w: &mut BufferWriter)
unsafe fn read_value( r: &mut BufferReader<'_>, ) -> Result<Self, BufferDecodeError>
Source§impl BufferValue for u64
impl BufferValue for u64
const FIXED_WIDTH: Option<FixedWidth>
fn encoded_len(&self) -> usize
fn write_value(&self, w: &mut BufferWriter)
unsafe fn read_value( r: &mut BufferReader<'_>, ) -> Result<Self, BufferDecodeError>
Source§impl<K: BufferValue + Hash + Eq, V: BufferValue> BufferValue for HashMap<K, V>
impl<K: BufferValue + Hash + Eq, V: BufferValue> BufferValue for HashMap<K, V>
fn encoded_len(&self) -> usize
fn write_value(&self, w: &mut BufferWriter)
unsafe fn read_value( r: &mut BufferReader<'_>, ) -> Result<Self, BufferDecodeError>
Source§impl<K: BufferValue + Ord, V: BufferValue> BufferValue for BTreeMap<K, V>
impl<K: BufferValue + Ord, V: BufferValue> BufferValue for BTreeMap<K, V>
fn encoded_len(&self) -> usize
fn write_value(&self, w: &mut BufferWriter)
unsafe fn read_value( r: &mut BufferReader<'_>, ) -> Result<Self, BufferDecodeError>
Source§impl<T: BufferValue> BufferValue for Option<T>
impl<T: BufferValue> BufferValue for Option<T>
fn encoded_len(&self) -> usize
fn write_value(&self, w: &mut BufferWriter)
unsafe fn read_value( r: &mut BufferReader<'_>, ) -> Result<Self, BufferDecodeError>
Source§impl<T: BufferValue> BufferValue for Vec<T>
impl<T: BufferValue> BufferValue for Vec<T>
fn encoded_len(&self) -> usize
fn write_value(&self, w: &mut BufferWriter)
unsafe fn read_value( r: &mut BufferReader<'_>, ) -> Result<Self, BufferDecodeError>
Source§impl<T> BufferValue for Arc<T>
An interface object inside a buffer: a u64 token carrying one strong
reference. Writing clones the Arc; reading adopts the reference, so a
buffer holding tokens must be decoded exactly once (the generated thunks
guarantee this). A zero token is a contract violation and decodes as an
error, and so does any token read through a
token_free reader.
impl<T> BufferValue for Arc<T>
An interface object inside a buffer: a u64 token carrying one strong
reference. Writing clones the Arc; reading adopts the reference, so a
buffer holding tokens must be decoded exactly once (the generated thunks
guarantee this). A zero token is a contract violation and decodes as an
error, and so does any token read through a
token_free reader.