Skip to main content

miden_node_persistence/
lib.rs

1//! Protobuf codecs for structured database values and binary files.
2
3mod collections;
4mod error;
5pub mod generated;
6mod protocol;
7
8pub use error::PersistenceError;
9pub use miden_protobuf;
10pub use prost;
11
12/// Defines the stored representation and domain validation for one type.
13pub trait ProtobufValue: Sized {
14    /// The protobuf message stored for this type.
15    type Message: prost::Message + Default;
16    /// Builds the stored protobuf message.
17    fn to_proto(&self) -> Self::Message;
18    /// Builds the domain value and checks its construction constraints.
19    fn from_proto(message: Self::Message) -> Result<Self, PersistenceError>;
20}
21
22/// Encodes a structured value as its protobuf message.
23pub fn encode<T: ProtobufValue>(value: &T) -> Vec<u8> {
24    prost::Message::encode_to_vec(&value.to_proto())
25}
26
27/// Decodes a stored message and applies its domain construction checks.
28pub fn decode<T: ProtobufValue>(bytes: &[u8]) -> Result<T, PersistenceError> {
29    let message = <T::Message as prost::Message>::decode(bytes)?;
30    T::from_proto(message)
31}
32
33#[cfg(test)]
34mod tests;