use std::{cmp::min, collections::HashSet};
use chia_protocol::Bytes32;
#[derive(Debug, Default, Clone)]
pub struct Facts {
actual_expiration_time: Option<u64>,
required_expiration_time: Option<u64>,
reserved_fees: u128,
asserted_puzzle_announcements: HashSet<Bytes32>,
asserted_spends: HashSet<Bytes32>,
}
impl Facts {
pub fn update_actual_expiration_time(&mut self, expiration_time: u64) {
if let Some(old_time) = self.actual_expiration_time {
self.actual_expiration_time = Some(min(old_time, expiration_time));
} else {
self.actual_expiration_time = Some(expiration_time);
}
}
pub fn update_required_expiration_time(&mut self, required_expiration_time: u64) {
if let Some(old_time) = self.required_expiration_time {
self.required_expiration_time = Some(min(old_time, required_expiration_time));
} else {
self.required_expiration_time = Some(required_expiration_time);
}
}
pub fn add_reserved_fees(&mut self, amount: u64) {
self.reserved_fees += u128::from(amount);
}
pub fn assert_puzzle_announcement(&mut self, announcement_id: Bytes32) {
self.asserted_puzzle_announcements.insert(announcement_id);
}
pub fn assert_spend(&mut self, coin_id: Bytes32) {
self.asserted_spends.insert(coin_id);
}
pub fn actual_expiration_time(&self) -> Option<u64> {
self.actual_expiration_time
}
pub fn required_expiration_time(&self) -> Option<u64> {
self.required_expiration_time
}
pub fn reserved_fees(&self) -> u128 {
self.reserved_fees
}
pub fn is_puzzle_announcement_asserted(&self, announcement_id: Bytes32) -> bool {
self.asserted_puzzle_announcements
.contains(&announcement_id)
}
pub fn is_spend_asserted(&self, coin_id: Bytes32) -> bool {
self.asserted_spends.contains(&coin_id)
}
}