xrpl_common_stdlib/objects/generated/
offer.rs1use crate::host::Result;
4use crate::objects::traits::CurrentLedgerObjectCommonFields;
5use crate::objects::traits::LedgerObjectCommonFields;
6use crate::objects::{current_ledger_object, ledger_object};
7use crate::sfield;
8use crate::types::account_id::AccountID;
9use crate::types::amount::Amount;
10use crate::types::uint::Hash256;
11
12pub trait OfferFields: LedgerObjectCommonFields {
14 fn account(&self) -> Result<AccountID> {
16 ledger_object::get_field(self.get_slot_num(), sfield::Account)
17 }
18
19 fn sequence(&self) -> Result<u32> {
22 ledger_object::get_field(self.get_slot_num(), sfield::Sequence)
23 }
24
25 fn taker_pays(&self) -> Result<Amount> {
27 ledger_object::get_field(self.get_slot_num(), sfield::TakerPays)
28 }
29
30 fn taker_gets(&self) -> Result<Amount> {
32 ledger_object::get_field(self.get_slot_num(), sfield::TakerGets)
33 }
34
35 fn book_directory(&self) -> Result<Hash256> {
37 ledger_object::get_field(self.get_slot_num(), sfield::BookDirectory)
38 }
39
40 fn book_node(&self) -> Result<u64> {
43 ledger_object::get_field(self.get_slot_num(), sfield::BookNode)
44 }
45
46 fn owner_node(&self) -> Result<u64> {
49 ledger_object::get_field(self.get_slot_num(), sfield::OwnerNode)
50 }
51
52 fn previous_txn_id(&self) -> Result<Hash256> {
54 ledger_object::get_field(self.get_slot_num(), sfield::PreviousTxnID)
55 }
56
57 fn previous_txn_lgr_seq(&self) -> Result<u32> {
60 ledger_object::get_field(self.get_slot_num(), sfield::PreviousTxnLgrSeq)
61 }
62
63 fn expiration(&self) -> Result<Option<u32>> {
66 ledger_object::get_field_optional(self.get_slot_num(), sfield::Expiration)
67 }
68
69 fn domain_id(&self) -> Result<Option<Hash256>> {
72 ledger_object::get_field_optional(self.get_slot_num(), sfield::DomainID)
73 }
74}
75
76pub trait CurrentOfferFields: CurrentLedgerObjectCommonFields {
78 fn account(&self) -> Result<AccountID> {
80 current_ledger_object::get_field(sfield::Account)
81 }
82
83 fn sequence(&self) -> Result<u32> {
86 current_ledger_object::get_field(sfield::Sequence)
87 }
88
89 fn taker_pays(&self) -> Result<Amount> {
91 current_ledger_object::get_field(sfield::TakerPays)
92 }
93
94 fn taker_gets(&self) -> Result<Amount> {
96 current_ledger_object::get_field(sfield::TakerGets)
97 }
98
99 fn book_directory(&self) -> Result<Hash256> {
101 current_ledger_object::get_field(sfield::BookDirectory)
102 }
103
104 fn book_node(&self) -> Result<u64> {
107 current_ledger_object::get_field(sfield::BookNode)
108 }
109
110 fn owner_node(&self) -> Result<u64> {
113 current_ledger_object::get_field(sfield::OwnerNode)
114 }
115
116 fn previous_txn_id(&self) -> Result<Hash256> {
118 current_ledger_object::get_field(sfield::PreviousTxnID)
119 }
120
121 fn previous_txn_lgr_seq(&self) -> Result<u32> {
124 current_ledger_object::get_field(sfield::PreviousTxnLgrSeq)
125 }
126
127 fn expiration(&self) -> Result<Option<u32>> {
130 current_ledger_object::get_field_optional(sfield::Expiration)
131 }
132
133 fn domain_id(&self) -> Result<Option<Hash256>> {
136 current_ledger_object::get_field_optional(sfield::DomainID)
137 }
138}
139
140#[derive(Debug, Clone, Copy, Eq, PartialEq)]
141pub struct Offer {
142 pub(crate) slot_num: i32,
143}
144
145impl Offer {
146 pub fn new(slot_num: i32) -> Self {
148 Self { slot_num }
149 }
150}
151
152impl LedgerObjectCommonFields for Offer {
153 fn get_slot_num(&self) -> i32 {
154 self.slot_num
155 }
156}
157
158impl OfferFields for Offer {}
159
160#[cfg(test)]
161mod tests {
162 use super::*;
163 use crate::host::host_bindings_trait::MockHostBindings;
164 use crate::host::setup_mock;
165 use crate::objects::test_utils::*;
166
167 #[test]
168 fn read_all_fields() {
169 let mut mock = MockHostBindings::new();
170 mock_all_fields_present(&mut mock);
171 let _guard = setup_mock(mock);
172
173 let obj = Offer::new(0);
174
175 assert!(obj.account().is_ok());
176 assert!(obj.sequence().is_ok());
177 assert!(obj.taker_pays().is_ok());
178 assert!(obj.taker_gets().is_ok());
179 assert!(obj.book_directory().is_ok());
180 assert!(obj.book_node().is_ok());
181 assert!(obj.owner_node().is_ok());
182 assert!(obj.previous_txn_id().is_ok());
183 assert!(obj.previous_txn_lgr_seq().is_ok());
184 assert!(obj.expiration().is_ok());
185 assert!(obj.domain_id().is_ok());
186 }
187
188 #[test]
189 fn optional_fields_none() {
190 let mut mock = MockHostBindings::new();
191 mock_all_fields_not_found(&mut mock);
192 let _guard = setup_mock(mock);
193
194 let obj = Offer::new(0);
195
196 assert!(obj.expiration().unwrap().is_none());
197 assert!(obj.domain_id().unwrap().is_none());
198 }
199}