include!(concat!(env!("OUT_DIR"), "/scan.rs"));
use crate::{
sdk::commit::CommitProof, Error, EventLogType, ProtoBinding, Result,
};
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ScanRequest {
pub log_type: EventLogType,
pub limit: u16,
pub offset: u64,
}
impl ProtoBinding for ScanRequest {
type Inner = WireScanRequest;
}
impl TryFrom<WireScanRequest> for ScanRequest {
type Error = Error;
fn try_from(value: WireScanRequest) -> Result<Self> {
Ok(Self {
log_type: value.log_type.unwrap().try_into()?,
limit: value.limit.unwrap() as u16,
offset: value.offset,
})
}
}
impl From<ScanRequest> for WireScanRequest {
fn from(value: ScanRequest) -> WireScanRequest {
Self {
log_type: Some(value.log_type.into()),
limit: Some(value.limit as u32),
offset: value.offset,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ScanResponse {
pub first_proof: Option<CommitProof>,
pub proofs: Vec<CommitProof>,
pub offset: u64,
}
impl ProtoBinding for ScanResponse {
type Inner = WireScanResponse;
}
impl TryFrom<WireScanResponse> for ScanResponse {
type Error = Error;
fn try_from(value: WireScanResponse) -> Result<Self> {
let first_proof = if let Some(first_proof) = value.first_proof {
Some(first_proof.try_into()?)
} else {
None
};
let mut proofs = Vec::with_capacity(value.proofs.len());
for proof in value.proofs {
proofs.push(proof.try_into()?);
}
Ok(Self {
first_proof,
proofs,
offset: value.offset,
})
}
}
impl From<ScanResponse> for WireScanResponse {
fn from(value: ScanResponse) -> WireScanResponse {
Self {
first_proof: value.first_proof.map(|p| p.into()),
proofs: value.proofs.into_iter().map(|p| p.into()).collect(),
offset: value.offset,
}
}
}