Skip to main content

gmsol_decode/
gmsol.rs

1/// Implement [`Decode`](crate::Decode) for types defined in [`gmsol-programs`].
2#[cfg(feature = "gmsol-programs")]
3pub mod programs {
4    use crate::{impl_decode_for_cpi_event, impl_decode_for_zero_copy};
5    use crate::{untagged, value::UnknownOwnedData};
6    use gmsol_programs::gmsol_store::{
7        accounts::{
8            Deposit, Glv, GlvDeposit, GlvShift, GlvWithdrawal, Market, Order, Position, Shift,
9            Store, UserHeader, VirtualInventory, Withdrawal,
10        },
11        events::{
12            BorrowingFeesUpdated, DepositExecuted, DepositRemoved, GlvDepositRemoved, GlvPricing,
13            GlvTokenValue, GlvWithdrawalRemoved, GtBuyback, GtUpdated,
14            InsufficientFundingFeePayment, MarketFeesUpdated, MarketStateUpdated, MarketTokenValue,
15            OrderRemoved, OrderUpdated, PositionDecreased, PositionIncreased, ShiftRemoved,
16            SwapExecuted, TradeEvent, WithdrawalExecuted, WithdrawalRemoved,
17        },
18    };
19
20    impl_decode_for_zero_copy!(Store);
21    impl_decode_for_zero_copy!(Position);
22    impl_decode_for_zero_copy!(Market);
23    impl_decode_for_zero_copy!(VirtualInventory);
24    impl_decode_for_zero_copy!(Deposit);
25    impl_decode_for_zero_copy!(Withdrawal);
26    impl_decode_for_zero_copy!(Shift);
27    impl_decode_for_zero_copy!(Order);
28    impl_decode_for_zero_copy!(GlvDeposit);
29    impl_decode_for_zero_copy!(GlvWithdrawal);
30    impl_decode_for_zero_copy!(GlvShift);
31    impl_decode_for_zero_copy!(Glv);
32    impl_decode_for_zero_copy!(UserHeader);
33
34    impl_decode_for_cpi_event!(DepositRemoved);
35    impl_decode_for_cpi_event!(DepositExecuted);
36    impl_decode_for_cpi_event!(WithdrawalRemoved);
37    impl_decode_for_cpi_event!(WithdrawalExecuted);
38    impl_decode_for_cpi_event!(ShiftRemoved);
39    impl_decode_for_cpi_event!(GlvDepositRemoved);
40    impl_decode_for_cpi_event!(GlvWithdrawalRemoved);
41    impl_decode_for_cpi_event!(GlvPricing);
42    impl_decode_for_cpi_event!(OrderUpdated);
43    impl_decode_for_cpi_event!(PositionIncreased);
44    impl_decode_for_cpi_event!(PositionDecreased);
45    impl_decode_for_cpi_event!(InsufficientFundingFeePayment);
46    impl_decode_for_cpi_event!(OrderRemoved);
47    impl_decode_for_cpi_event!(TradeEvent);
48    impl_decode_for_cpi_event!(MarketFeesUpdated);
49    impl_decode_for_cpi_event!(BorrowingFeesUpdated);
50    impl_decode_for_cpi_event!(MarketStateUpdated);
51    impl_decode_for_cpi_event!(SwapExecuted);
52    impl_decode_for_cpi_event!(GtUpdated);
53    impl_decode_for_cpi_event!(GtBuyback);
54    impl_decode_for_cpi_event!(MarketTokenValue);
55    impl_decode_for_cpi_event!(GlvTokenValue);
56
57    untagged!(
58        GMSOLAccountData,
59        [
60            Deposit,
61            Withdrawal,
62            Shift,
63            Order,
64            GlvDeposit,
65            GlvWithdrawal,
66            GlvShift,
67            Glv,
68            Store,
69            Market,
70            VirtualInventory,
71            Position,
72            UserHeader,
73            UnknownOwnedData
74        ]
75    );
76
77    type Account = crate::value::Account<GMSOLAccountData>;
78
79    untagged!(
80        GMSOLCPIEvent,
81        [
82            DepositExecuted,
83            DepositRemoved,
84            WithdrawalExecuted,
85            WithdrawalRemoved,
86            ShiftRemoved,
87            GlvDepositRemoved,
88            GlvWithdrawalRemoved,
89            GlvPricing,
90            OrderUpdated,
91            PositionIncreased,
92            PositionDecreased,
93            InsufficientFundingFeePayment,
94            OrderRemoved,
95            TradeEvent,
96            MarketFeesUpdated,
97            BorrowingFeesUpdated,
98            MarketStateUpdated,
99            SwapExecuted,
100            GtUpdated,
101            GtBuyback,
102            MarketTokenValue,
103            GlvTokenValue,
104            UnknownOwnedData
105        ]
106    );
107
108    type CPIEvents = crate::value::AnchorCPIEvents<GMSOLCPIEvent>;
109
110    untagged!(GMSOLData, [Account, CPIEvents]);
111}