pub struct SerializerConfig { /* private fields */ }Expand description
Configures how values are serialized to CBOR.
The output uses the preferred serialization of RFC 8949: integers, lengths and floats use their shortest (lossless) form and all maps and arrays have a definite length.
If set_canonical is enabled, the output is
additionally deterministically encoded (RFC 8949 §4.2.1): the entries of
maps are sorted by the bytewise lexicographic order of their encoded keys
and duplicate keys are rejected.
use std::collections::HashMap;
use deser_cbor::SerializerConfig;
const CANONICAL: SerializerConfig =
SerializerConfig::builder().canonical(true).build();
let map = HashMap::from([("b", 1), ("a", 2)]);
assert_eq!(CANONICAL.to_vec(&map).unwrap(), b"\xa2\x61a\x02\x61b\x01");Implementations§
Source§impl SerializerConfig
impl SerializerConfig
Sourcepub const fn new() -> SerializerConfig
pub const fn new() -> SerializerConfig
Creates the default configuration.
Sourcepub const fn builder() -> SerializerConfigBuilder
pub const fn builder() -> SerializerConfigBuilder
Returns a builder for the configuration (see SerializerConfigBuilder).
Sourcepub const fn into_builder(self) -> SerializerConfigBuilder
pub const fn into_builder(self) -> SerializerConfigBuilder
Returns a builder that starts with this configuration.
Sourcepub fn set_context(&mut self, context: Context)
pub fn set_context(&mut self, context: Context)
Sets the context the values are serialized in.
The values of the context are the defaults of the extension values
of the state (see Context), for instance
the BytesFormat. The serializers and
writers created with the configuration use this context. A context set on
the driver takes precedence.
Sourcepub const fn set_canonical(&mut self, yes: bool)
pub const fn set_canonical(&mut self, yes: bool)
Enables or disables the deterministic encoding.
When enabled, the entries of maps are sorted by their encoded keys
(bytewise lexicographic order, RFC 8949 §4.2.1) and duplicate keys
are an error. This makes the output independent of the iteration
order of maps such as HashMap.
Sourcepub fn to_vec<T: Serialize + ?Sized>(&self, value: &T) -> Result<Vec<u8>, Error>
pub fn to_vec<T: Serialize + ?Sized>(&self, value: &T) -> Result<Vec<u8>, Error>
Serializes the given value.
Sourcepub fn to_vec_with<F, T: Serialize + ?Sized>(
&self,
value: &T,
setup: F,
) -> Result<Vec<u8>, Error>where
F: FnOnce(&mut SerializeDriver<'_>),
pub fn to_vec_with<F, T: Serialize + ?Sized>(
&self,
value: &T,
setup: F,
) -> Result<Vec<u8>, Error>where
F: FnOnce(&mut SerializeDriver<'_>),
Serializes the given value with a configured driver.
The callback is invoked with the driver before the serialization
starts, for instance to add Layers.
Source§impl SerializerConfig
impl SerializerConfig
Sourcepub fn writer<W: Write>(&self, writer: W) -> Writer<W, Serializer>
pub fn writer<W: Write>(&self, writer: W) -> Writer<W, Serializer>
Creates a writer of CBOR data items to a stream
(see deser::io::Writer).
The items follow each other which makes the stream a CBOR sequence.
use deser_cbor::SerializerConfig;
let mut writer = SerializerConfig::new().writer(Vec::new());
writer.write(&1u32).unwrap();
writer.write(&"hi").unwrap();
assert_eq!(writer.into_inner(), [0x01, 0x62, b'h', b'i']);