spl_binary_oracle_pair/
state.rs1use borsh::{BorshDeserialize, BorshSerialize};
4use solana_program::pubkey::Pubkey;
5
6pub const UNINITIALIZED_VERSION: u8 = 0;
8pub const POOL_VERSION: u8 = 1;
10
11#[repr(C)]
13#[derive(BorshSerialize, BorshDeserialize, PartialEq, Debug, Clone)]
14pub struct Pool {
15 pub version: u8,
17
18 pub bump_seed: u8,
20
21 pub token_program_id: Pubkey,
23
24 pub deposit_account: Pubkey,
26
27 pub token_pass_mint: Pubkey,
29
30 pub token_fail_mint: Pubkey,
32
33 pub decider: Pubkey,
35
36 pub mint_end_slot: u64,
38
39 pub decide_end_slot: u64,
41
42 pub decision: Decision,
44}
45
46#[derive(BorshSerialize, BorshDeserialize, PartialEq, Debug, Clone)]
48pub enum Decision {
49 Undecided,
51 Pass,
53 Fail,
55}
56
57impl Pool {
58 pub const LEN: usize = 179;
60
61 pub fn is_initialized(&self) -> bool {
63 self.version != UNINITIALIZED_VERSION
64 }
65}
66
67mod test {
68 #[cfg(test)]
69 use super::*;
70
71 #[test]
72 pub fn test_pool_pack_unpack() {
73 let p = Pool {
74 version: 1,
75 bump_seed: 2,
76 token_program_id: Pubkey::new_unique(),
77 deposit_account: Pubkey::new_unique(),
78 token_pass_mint: Pubkey::new_unique(),
79 token_fail_mint: Pubkey::new_unique(),
80 decider: Pubkey::new_unique(),
81 mint_end_slot: 433,
82 decide_end_slot: 5546,
83 decision: Decision::Fail,
84 };
85
86 let packed = p.try_to_vec().unwrap();
87
88 let unpacked = Pool::try_from_slice(packed.as_slice()).unwrap();
89
90 assert_eq!(p, unpacked);
91 }
92}