buffett_budget/
condition.rs

1use chrono::prelude::*;
2use crate::seal::{Seal};
3use buffett_interface::pubkey::Pubkey;
4
5
6
7#[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Clone)]
8pub enum Condition {
9    
10    Timestamp(DateTime<Utc>, Pubkey),
11
12    
13    Signature(Pubkey),
14}
15
16impl Condition {
17    
18    pub fn is_satisfied(&self, witness: &Seal, from: &Pubkey) -> bool {
19        match (self, witness) {
20            (Condition::Signature(pubkey), Seal::Signature) => pubkey == from,
21            (Condition::Timestamp(dt, pubkey), Seal::Timestamp(last_time)) => {
22                pubkey == from && dt <= last_time
23            }
24            _ => false,
25        }
26    }
27}