miden-objects 0.17.0-rc.4

Canonical Protobuf representations for Miden protocol objects
Documentation
use miden_protocol::Word;
use miden_protocol::protocol_config::{
    KernelConfig,
    ProofSecurityPolicy,
    ProofVerificationConfig,
    ProtocolConfig,
};

use crate::proto;

#[cfg(test)]
mod tests;

impl From<&KernelConfig> for proto::protocol_config::KernelConfig {
    fn from(config: &KernelConfig) -> Self {
        Self {
            main_proc: Some(config.main_proc().into()),
            kernel_procs: config.kernel_procs().iter().copied().map(Into::into).collect(),
        }
    }
}

impl From<KernelConfig> for proto::protocol_config::KernelConfig {
    fn from(config: KernelConfig) -> Self {
        (&config).into()
    }
}

impl From<&ProofSecurityPolicy> for proto::protocol_config::ProofSecurityPolicy {
    fn from(policy: &ProofSecurityPolicy) -> Self {
        Self {
            security_estimator_root: Some(policy.security_estimator_root().into()),
            minimum_bits: u32::from(policy.minimum_bits()),
        }
    }
}

impl From<ProofSecurityPolicy> for proto::protocol_config::ProofSecurityPolicy {
    fn from(policy: ProofSecurityPolicy) -> Self {
        (&policy).into()
    }
}

impl From<&ProofVerificationConfig> for proto::protocol_config::ProofVerificationConfig {
    fn from(config: &ProofVerificationConfig) -> Self {
        Self {
            vm_verifier_root: Some(config.vm_verifier_root().into()),
            precompile_verifier_root: Some(config.precompile_verifier_root().into()),
            security_policy: Some(config.security_policy().into()),
        }
    }
}

impl From<ProofVerificationConfig> for proto::protocol_config::ProofVerificationConfig {
    fn from(config: ProofVerificationConfig) -> Self {
        (&config).into()
    }
}

impl From<&ProtocolConfig> for proto::protocol_config::ProtocolConfig {
    fn from(config: &ProtocolConfig) -> Self {
        Self {
            fee_asset_id: Some(Word::from(config.fee_asset_id()).into()),
            tx_kernel: Some(config.tx_kernel().into()),
            batch_kernel: Some(config.batch_kernel().into()),
            block_kernel: Some(config.block_kernel().into()),
            proof_verification: Some(config.proof_verification().into()),
        }
    }
}

impl From<ProtocolConfig> for proto::protocol_config::ProtocolConfig {
    fn from(config: ProtocolConfig) -> Self {
        (&config).into()
    }
}