miden-node-persistence 0.17.3

Protobuf persistence codecs for Miden node
Documentation
use miden_protobuf::{BuildUnchecked, ConversionError, DecodeMessage, Verify};
use miden_protocol::block::BlockSignatures;
use miden_protocol::note::{NoteAssets, NoteHeader};
use miden_protocol::transaction::InputNoteCommitment;

use crate::{PersistenceError, ProtobufValue, generated};

impl ProtobufValue for BlockSignatures {
    type Message = generated::BlockSignatures;
    fn to_proto(&self) -> Self::Message {
        Self::Message {
            signatures: self.as_signatures().iter().map(Into::into).collect(),
        }
    }
    fn from_proto(message: Self::Message) -> Result<Self, PersistenceError> {
        let signatures = message.decode_fields()?.signatures.verify_infallible();
        Self::new(signatures).map_err(|err| ConversionError::new(err).into())
    }
}
impl ProtobufValue for NoteAssets {
    type Message = generated::NoteAssets;
    fn to_proto(&self) -> Self::Message {
        Self::Message {
            assets: self.iter().map(Into::into).collect(),
        }
    }
    fn from_proto(message: Self::Message) -> Result<Self, PersistenceError> {
        let assets = message.decode_fields()?.assets.verify()?;
        Self::new(assets).map_err(|err| ConversionError::new(err).into())
    }
}
impl ProtobufValue for Vec<InputNoteCommitment> {
    type Message = generated::InputNoteCommitments;
    fn to_proto(&self) -> Self::Message {
        Self::Message {
            notes: self.iter().map(Into::into).collect(),
        }
    }
    fn from_proto(message: Self::Message) -> Result<Self, PersistenceError> {
        Ok(message.decode_fields()?.notes.build_unchecked()?)
    }
}
impl ProtobufValue for Vec<NoteHeader> {
    type Message = generated::NoteHeaders;
    fn to_proto(&self) -> Self::Message {
        Self::Message {
            notes: self.iter().copied().map(Into::into).collect(),
        }
    }
    fn from_proto(message: Self::Message) -> Result<Self, PersistenceError> {
        Ok(message.decode_fields()?.notes.verify()?)
    }
}