neptune-rpc-api 0.14.0

Neptune JSON-RPC API contract: the RpcApi trait and its data-transfer model types
use neptune_consensus::block::block_appendix::BlockAppendix;
use serde::Deserialize;
use serde::Serialize;
use tasm_lib::prelude::Digest;
use tasm_lib::triton_vm::proof::Claim;

use crate::model::common::RpcBFieldElements;

#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct RpcClaim {
    pub program_digest: Digest,
    pub version: u32,
    pub input: RpcBFieldElements,
    pub output: RpcBFieldElements,
}

impl From<Claim> for RpcClaim {
    fn from(claim: Claim) -> Self {
        RpcClaim {
            program_digest: claim.program_digest,
            version: claim.version,
            input: claim.input.into(),
            output: claim.output.into(),
        }
    }
}

impl From<RpcClaim> for Claim {
    fn from(claim: RpcClaim) -> Self {
        Claim {
            program_digest: claim.program_digest,
            version: claim.version,
            input: claim.input.into(),
            output: claim.output.into(),
        }
    }
}

#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct RpcBlockAppendix(Vec<RpcClaim>);

impl From<&BlockAppendix> for RpcBlockAppendix {
    fn from(appendix: &BlockAppendix) -> Self {
        RpcBlockAppendix(
            appendix
                ._claims()
                .clone()
                .into_iter()
                .map(Into::into)
                .collect(),
        )
    }
}

impl From<RpcBlockAppendix> for BlockAppendix {
    fn from(appendix: RpcBlockAppendix) -> Self {
        BlockAppendix::new(appendix.0.into_iter().map(Into::into).collect())
    }
}