chia_sdk_driver/primitives/option/
option_metadata.rs1use chia_protocol::Bytes32;
2use clvm_traits::{FromClvm, ToClvm};
3
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, ToClvm, FromClvm)]
5#[clvm(list)]
6pub struct OptionMetadata {
7 pub expiration_seconds: u64,
8 pub strike_type: OptionType,
9}
10
11impl OptionMetadata {
12 pub fn new(expiration_seconds: u64, strike_type: OptionType) -> Self {
13 Self {
14 expiration_seconds,
15 strike_type,
16 }
17 }
18}
19
20#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, ToClvm, FromClvm)]
21#[clvm(list)]
22#[repr(u8)]
23pub enum OptionType {
24 Xch {
25 amount: u64,
26 },
27 Cat {
28 asset_id: Bytes32,
29 amount: u64,
30 },
31 RevocableCat {
32 asset_id: Bytes32,
33 hidden_puzzle_hash: Bytes32,
34 amount: u64,
35 },
36 Nft {
37 launcher_id: Bytes32,
38 settlement_puzzle_hash: Bytes32,
39 amount: u64,
40 },
41}
42
43impl OptionType {
44 pub fn amount(&self) -> u64 {
45 match self {
46 OptionType::Xch { amount }
47 | OptionType::Cat { amount, .. }
48 | OptionType::RevocableCat { amount, .. }
49 | OptionType::Nft { amount, .. } => *amount,
50 }
51 }
52
53 pub fn is_hinted(&self) -> bool {
54 matches!(
55 self,
56 OptionType::Cat { .. } | OptionType::RevocableCat { .. } | OptionType::Nft { .. }
57 )
58 }
59}