miden-node-persistence 0.17.3

Protobuf persistence codecs for Miden node
Documentation
use protox::file::{ChainFileResolver, DescriptorSetFileResolver, IncludeFileResolver};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    println!("cargo:rerun-if-changed=proto/persistence.proto");
    let mut resolver = ChainFileResolver::new();
    resolver.add(IncludeFileResolver::new("proto".into()));
    resolver.add(DescriptorSetFileResolver::decode(miden_objects::FILE_DESCRIPTOR_SET)?);
    let mut compiler = protox::Compiler::with_file_resolver(resolver);
    compiler.include_imports(true).open_file("proto/persistence.proto")?;
    let descriptors = compiler.file_descriptor_set();
    let mut config = prost_build::Config::new();
    for &(proto, rust) in miden_objects::EXTERN_PATHS {
        config.extern_path(proto, rust);
    }
    let names: Vec<_> = descriptors
        .file
        .iter()
        .filter(|file| file.package() == "persistence")
        .flat_map(|file| {
            file.message_type
                .iter()
                .map(|message| format!("persistence.{}", message.name()))
        })
        .collect();
    miden_protobuf::build::configure_proto_decode_fields(
        &mut config,
        &descriptors,
        names.iter().map(String::as_str),
    )?;
    config.compile_fds(descriptors)?;
    Ok(())
}