pub trait Deserializable: Sized {
// Required method
fn read_from<R>(source: &mut R) -> Result<Self, DeserializationError>
where R: ByteReader;
// Provided methods
fn min_serialized_size() -> usize { ... }
fn read_from_bytes(bytes: &[u8]) -> Result<Self, DeserializationError> { ... }
fn read_from_bytes_with_budget(
bytes: &[u8],
budget: usize,
) -> Result<Self, DeserializationError> { ... }
}Expand description
Defines how to deserialize Self from bytes.
Required Methods§
Sourcefn read_from<R>(source: &mut R) -> Result<Self, DeserializationError>where
R: ByteReader,
fn read_from<R>(source: &mut R) -> Result<Self, DeserializationError>where
R: ByteReader,
Reads a sequence of bytes from the provided source, attempts to deserialize these bytes
into Self, and returns the result.
§Errors
Returns an error if:
- The
sourcedoes not contain enough bytes to deserializeSelf. - Bytes read from the
sourcedo not represent a valid value forSelf.
Provided Methods§
Sourcefn min_serialized_size() -> usize
fn min_serialized_size() -> usize
Returns the minimum serialized size for one instance of this type.
This is used by ByteReader::max_alloc to estimate how many elements can be
deserialized from the remaining budget, preventing denial-of-service attacks from
malicious length prefixes.
The default implementation returns size_of::<Self>(), which is conservative: it may
reject valid input for types where the serialized size is smaller than the in-memory
size (e.g., structs with computed/cached fields that aren’t serialized).
Override this method for types where the serialized representation is smaller than the in-memory representation to allow more elements to be deserialized.
Sourcefn read_from_bytes(bytes: &[u8]) -> Result<Self, DeserializationError>
fn read_from_bytes(bytes: &[u8]) -> Result<Self, DeserializationError>
Attempts to deserialize the provided bytes into Self and returns the result.
§Errors
Returns an error if:
- The
bytesdo not contain enough information to deserializeSelf. - The
bytesdo not represent a valid value forSelf.
Note: if bytes contains more data than needed to deserialize self, no error is
returned.
Sourcefn read_from_bytes_with_budget(
bytes: &[u8],
budget: usize,
) -> Result<Self, DeserializationError>
fn read_from_bytes_with_budget( bytes: &[u8], budget: usize, ) -> Result<Self, DeserializationError>
Deserializes Self from bytes with a byte budget limit.
This is the recommended method for deserializing untrusted input. The budget limits how many bytes can be consumed during deserialization, preventing denial-of-service attacks that exploit length fields to cause huge allocations.
§Errors
Returns an error if:
- The budget is exhausted before deserialization completes.
- The
bytesdo not contain enough information to deserializeSelf. - The
bytesdo not represent a valid value forSelf.
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.
Implementations on Foreign Types§
Source§impl Deserializable for HashFunction
impl Deserializable for HashFunction
fn read_from<R>(source: &mut R) -> Result<HashFunction, DeserializationError>where
R: ByteReader,
Source§impl Deserializable for SealingKey
impl Deserializable for SealingKey
fn read_from<R>(source: &mut R) -> Result<SealingKey, DeserializationError>where
R: ByteReader,
Source§impl Deserializable for UnsealingKey
impl Deserializable for UnsealingKey
fn read_from<R>(source: &mut R) -> Result<UnsealingKey, DeserializationError>where
R: ByteReader,
Source§impl Deserializable for NodeMutation
impl Deserializable for NodeMutation
fn read_from<R>(source: &mut R) -> Result<NodeMutation, DeserializationError>where
R: ByteReader,
Source§impl Deserializable for SmtLeaf
impl Deserializable for SmtLeaf
fn read_from<R>(source: &mut R) -> Result<SmtLeaf, DeserializationError>where
R: ByteReader,
Source§impl Deserializable for u8
impl Deserializable for u8
fn read_from<R>(source: &mut R) -> Result<u8, DeserializationError>where
R: ByteReader,
Source§impl Deserializable for u16
impl Deserializable for u16
fn read_from<R>(source: &mut R) -> Result<u16, DeserializationError>where
R: ByteReader,
Source§impl Deserializable for u32
impl Deserializable for u32
fn read_from<R>(source: &mut R) -> Result<u32, DeserializationError>where
R: ByteReader,
Source§impl Deserializable for u64
impl Deserializable for u64
fn read_from<R>(source: &mut R) -> Result<u64, DeserializationError>where
R: ByteReader,
Source§impl Deserializable for u128
impl Deserializable for u128
fn read_from<R>(source: &mut R) -> Result<u128, DeserializationError>where
R: ByteReader,
Source§impl Deserializable for ()
impl Deserializable for ()
fn read_from<R>(_source: &mut R) -> Result<(), DeserializationError>where
R: ByteReader,
Source§impl Deserializable for usize
impl Deserializable for usize
fn read_from<R>(source: &mut R) -> Result<usize, DeserializationError>where
R: ByteReader,
fn min_serialized_size() -> usize
Source§impl Deserializable for String
impl Deserializable for String
fn read_from<R>(source: &mut R) -> Result<String, DeserializationError>where
R: ByteReader,
fn min_serialized_size() -> usize
Source§impl Deserializable for PublicInputs
impl Deserializable for PublicInputs
fn read_from<R>(source: &mut R) -> Result<PublicInputs, DeserializationError>where
R: ByteReader,
Source§impl Deserializable for ExecutionProof
impl Deserializable for ExecutionProof
fn read_from<R>(source: &mut R) -> Result<ExecutionProof, DeserializationError>where
R: ByteReader,
Source§impl Deserializable for EncryptedData
impl Deserializable for EncryptedData
fn read_from<R>(source: &mut R) -> Result<EncryptedData, DeserializationError>where
R: ByteReader,
Source§impl Deserializable for Nonce
impl Deserializable for Nonce
fn read_from<R>(source: &mut R) -> Result<Nonce, DeserializationError>where
R: ByteReader,
Source§impl Deserializable for SecretKey
impl Deserializable for SecretKey
fn read_from<R>(source: &mut R) -> Result<SecretKey, DeserializationError>where
R: ByteReader,
Source§impl Deserializable for EncryptedData
impl Deserializable for EncryptedData
fn read_from<R>(source: &mut R) -> Result<EncryptedData, DeserializationError>where
R: ByteReader,
Source§impl Deserializable for Nonce
impl Deserializable for Nonce
fn read_from<R>(source: &mut R) -> Result<Nonce, DeserializationError>where
R: ByteReader,
Source§impl Deserializable for SecretKey
impl Deserializable for SecretKey
fn read_from<R>(source: &mut R) -> Result<SecretKey, DeserializationError>where
R: ByteReader,
Source§impl Deserializable for EphemeralPublicKey
impl Deserializable for EphemeralPublicKey
fn read_from<R>(
source: &mut R,
) -> Result<EphemeralPublicKey, DeserializationError>where
R: ByteReader,
Source§impl Deserializable for EphemeralPublicKey
impl Deserializable for EphemeralPublicKey
fn read_from<R>(
source: &mut R,
) -> Result<EphemeralPublicKey, DeserializationError>where
R: ByteReader,
Source§impl Deserializable for SealedMessage
impl Deserializable for SealedMessage
fn read_from<R>(source: &mut R) -> Result<SealedMessage, DeserializationError>where
R: ByteReader,
Source§impl Deserializable for Forest
impl Deserializable for Forest
fn read_from<R>(source: &mut R) -> Result<Forest, DeserializationError>where
R: ByteReader,
Source§impl Deserializable for InOrderIndex
impl Deserializable for InOrderIndex
fn read_from<R>(source: &mut R) -> Result<InOrderIndex, DeserializationError>where
R: ByteReader,
Source§impl Deserializable for PartialMmr
impl Deserializable for PartialMmr
fn read_from<R>(source: &mut R) -> Result<PartialMmr, DeserializationError>where
R: ByteReader,
Source§impl Deserializable for MerkleProof
impl Deserializable for MerkleProof
fn read_from<R>(source: &mut R) -> Result<MerkleProof, DeserializationError>where
R: ByteReader,
Source§impl Deserializable for RootPath
impl Deserializable for RootPath
fn read_from<R>(source: &mut R) -> Result<RootPath, DeserializationError>where
R: ByteReader,
Source§impl Deserializable for PartialSmt
impl Deserializable for PartialSmt
fn read_from<R>(source: &mut R) -> Result<PartialSmt, DeserializationError>where
R: ByteReader,
Source§impl Deserializable for SparseMerklePath
impl Deserializable for SparseMerklePath
fn read_from<R>(
source: &mut R,
) -> Result<SparseMerklePath, DeserializationError>where
R: ByteReader,
Source§impl Deserializable for SourceSpan
impl Deserializable for SourceSpan
fn read_from<R>(source: &mut R) -> Result<SourceSpan, DeserializationError>where
R: ByteReader,
Source§impl<K, V> Deserializable for BTreeMap<K, V>
impl<K, V> Deserializable for BTreeMap<K, V>
fn read_from<R>(source: &mut R) -> Result<BTreeMap<K, V>, DeserializationError>where
R: ByteReader,
fn min_serialized_size() -> usize
Source§impl<T1> Deserializable for (T1,)where
T1: Deserializable,
impl<T1> Deserializable for (T1,)where
T1: Deserializable,
fn read_from<R>(source: &mut R) -> Result<(T1,), DeserializationError>where
R: ByteReader,
Source§impl<T1, T2> Deserializable for (T1, T2)where
T1: Deserializable,
T2: Deserializable,
impl<T1, T2> Deserializable for (T1, T2)where
T1: Deserializable,
T2: Deserializable,
fn read_from<R>(source: &mut R) -> Result<(T1, T2), DeserializationError>where
R: ByteReader,
Source§impl<T1, T2, T3> Deserializable for (T1, T2, T3)
impl<T1, T2, T3> Deserializable for (T1, T2, T3)
fn read_from<R>(source: &mut R) -> Result<(T1, T2, T3), DeserializationError>where
R: ByteReader,
Source§impl<T1, T2, T3, T4> Deserializable for (T1, T2, T3, T4)
impl<T1, T2, T3, T4> Deserializable for (T1, T2, T3, T4)
fn read_from<R>(
source: &mut R,
) -> Result<(T1, T2, T3, T4), DeserializationError>where
R: ByteReader,
Source§impl<T1, T2, T3, T4, T5> Deserializable for (T1, T2, T3, T4, T5)where
T1: Deserializable,
T2: Deserializable,
T3: Deserializable,
T4: Deserializable,
T5: Deserializable,
impl<T1, T2, T3, T4, T5> Deserializable for (T1, T2, T3, T4, T5)where
T1: Deserializable,
T2: Deserializable,
T3: Deserializable,
T4: Deserializable,
T5: Deserializable,
fn read_from<R>(
source: &mut R,
) -> Result<(T1, T2, T3, T4, T5), DeserializationError>where
R: ByteReader,
Source§impl<T1, T2, T3, T4, T5, T6> Deserializable for (T1, T2, T3, T4, T5, T6)where
T1: Deserializable,
T2: Deserializable,
T3: Deserializable,
T4: Deserializable,
T5: Deserializable,
T6: Deserializable,
impl<T1, T2, T3, T4, T5, T6> Deserializable for (T1, T2, T3, T4, T5, T6)where
T1: Deserializable,
T2: Deserializable,
T3: Deserializable,
T4: Deserializable,
T5: Deserializable,
T6: Deserializable,
fn read_from<R>(
source: &mut R,
) -> Result<(T1, T2, T3, T4, T5, T6), DeserializationError>where
R: ByteReader,
Source§impl<T> Deserializable for Option<T>where
T: Deserializable,
impl<T> Deserializable for Option<T>where
T: Deserializable,
Source§fn min_serialized_size() -> usize
fn min_serialized_size() -> usize
Returns 1 (just the bool discriminator).
The Some variant would be 1 + T::min_serialized_size(), but we use the minimum
to allow more elements through the early check.
fn read_from<R>(source: &mut R) -> Result<Option<T>, DeserializationError>where
R: ByteReader,
Source§impl<T> Deserializable for BTreeSet<T>where
T: Deserializable + Ord,
impl<T> Deserializable for BTreeSet<T>where
T: Deserializable + Ord,
fn read_from<R>(source: &mut R) -> Result<BTreeSet<T>, DeserializationError>where
R: ByteReader,
fn min_serialized_size() -> usize
Source§impl<T> Deserializable for Vec<T>where
T: Deserializable,
impl<T> Deserializable for Vec<T>where
T: Deserializable,
Source§fn min_serialized_size() -> usize
fn min_serialized_size() -> usize
Returns 1 (the minimum vint length prefix size).
The actual serialized size depends on the number of elements, which we don’t know at the point this is called. Using the minimum allows more elements through the early check; budget enforcement during actual reads provides the real protection.