use std::marker::PhantomData;
use anyhow::Error;
use borsh::{BorshDeserialize, BorshSerialize};
use serde::{Deserialize, Serialize};
use sha2::Digest;
use crate::zk::{ValidityCondition, ValidityConditionChecker};
#[derive(
Debug,
BorshDeserialize,
BorshSerialize,
Serialize,
Deserialize,
PartialEq,
Clone,
Copy,
Default,
Eq,
)]
pub struct MockValidityCond {
pub is_valid: bool,
}
impl ValidityCondition for MockValidityCond {
type Error = Error;
fn combine<H: Digest>(&self, rhs: Self) -> Result<Self, Self::Error> {
Ok(MockValidityCond {
is_valid: self.is_valid & rhs.is_valid,
})
}
}
#[derive(BorshDeserialize, BorshSerialize, Debug)]
pub struct MockValidityCondChecker<Cond: ValidityCondition> {
phantom: PhantomData<Cond>,
}
impl ValidityConditionChecker<MockValidityCond> for MockValidityCondChecker<MockValidityCond> {
type Error = Error;
fn check(&mut self, condition: &MockValidityCond) -> Result<(), Self::Error> {
if condition.is_valid {
Ok(())
} else {
Err(anyhow::format_err!("Invalid mock validity condition"))
}
}
}
impl<Cond: ValidityCondition> MockValidityCondChecker<Cond> {
pub fn new() -> Self {
Self {
phantom: Default::default(),
}
}
}
impl<Cond: ValidityCondition> Default for MockValidityCondChecker<Cond> {
fn default() -> Self {
Self::new()
}
}