use chia_wallet_sdk::driver::Spend;
use chia_wallet_sdk::prelude::PublicKey;
use crate::metadata::DigDataStoreMetadata;
pub use chia_protocol::{Bytes32, Coin, CoinSpend};
pub use chia_puzzle_types::{LineageProof, Proof};
pub use chia_wallet_sdk::driver::{DataStore, DataStoreInfo, DataStoreMetadata, DelegatedPuzzle};
#[derive(Debug, Clone)]
#[must_use]
pub struct MerkleCoinSpend {
pub coin_spends: Vec<CoinSpend>,
pub child: Option<DataStore<DigDataStoreMetadata>>,
}
impl MerkleCoinSpend {
pub fn new(
coin_spends: Vec<CoinSpend>,
child: Option<DataStore<DigDataStoreMetadata>>,
) -> Self {
Self { coin_spends, child }
}
}
#[derive(Debug, Clone, Copy)]
pub enum Owner {
Standard(PublicKey),
Custom(Spend),
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn merkle_coin_spend_carries_its_coin_spends_and_child() {
let spend = MerkleCoinSpend::new(Vec::new(), None);
assert!(spend.coin_spends.is_empty());
assert!(spend.child.is_none());
}
#[test]
fn owner_standard_holds_the_given_key() {
let key = PublicKey::default();
let owner = Owner::Standard(key);
match owner {
Owner::Standard(k) => assert_eq!(k, key),
Owner::Custom(_) => panic!("expected a standard owner"),
}
}
}