use neptune_consensus::transaction::TransactionProof;
use serde::Deserialize;
use serde::Serialize;
use strum::EnumIter;
#[derive(Clone, Copy, EnumIter, Debug, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord)]
pub enum TransactionProofQuality {
ProofCollection,
SingleProof,
}
pub trait TransactionProofQualityExt {
fn proof_quality(&self) -> anyhow::Result<TransactionProofQuality>;
}
impl TransactionProofQualityExt for TransactionProof {
fn proof_quality(&self) -> anyhow::Result<TransactionProofQuality> {
match self {
TransactionProof::Witness(_) => {
anyhow::bail!("Primitive witness does not have a proof")
}
TransactionProof::ProofCollection(_) => Ok(TransactionProofQuality::ProofCollection),
TransactionProof::SingleProof(_) => Ok(TransactionProofQuality::SingleProof),
}
}
}
#[cfg(test)]
#[cfg_attr(coverage_nightly, coverage(off))]
mod tests {
use super::*;
#[test]
fn transaction_proof_quality_ordering() {
assert!(TransactionProofQuality::ProofCollection < TransactionProofQuality::SingleProof);
assert!(
TransactionProofQuality::ProofCollection >= TransactionProofQuality::ProofCollection
);
assert!(TransactionProofQuality::SingleProof >= TransactionProofQuality::SingleProof);
}
}