xrpl_common_stdlib/objects/generated/
account_root.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::blob::{PublicKeyBlob, UriBlob};
11use crate::types::uint::{Hash128, Hash256};
12
13pub trait AccountRootFields: LedgerObjectCommonFields {
15 fn account(&self) -> Result<AccountID> {
17 ledger_object::get_field(self.get_slot_num(), sfield::Account)
18 }
19
20 fn sequence(&self) -> Result<u32> {
22 ledger_object::get_field(self.get_slot_num(), sfield::Sequence)
23 }
24
25 fn balance(&self) -> Result<Amount> {
27 ledger_object::get_field(self.get_slot_num(), sfield::Balance)
28 }
29
30 fn owner_count(&self) -> Result<u32> {
33 ledger_object::get_field(self.get_slot_num(), sfield::OwnerCount)
34 }
35
36 fn previous_txn_id(&self) -> Result<Hash256> {
38 ledger_object::get_field(self.get_slot_num(), sfield::PreviousTxnID)
39 }
40
41 fn previous_txn_lgr_seq(&self) -> Result<u32> {
44 ledger_object::get_field(self.get_slot_num(), sfield::PreviousTxnLgrSeq)
45 }
46
47 fn account_txn_id(&self) -> Result<Option<Hash256>> {
51 ledger_object::get_field_optional(self.get_slot_num(), sfield::AccountTxnID)
52 }
53
54 fn regular_key(&self) -> Result<Option<AccountID>> {
57 ledger_object::get_field_optional(self.get_slot_num(), sfield::RegularKey)
58 }
59
60 fn email_hash(&self) -> Result<Option<Hash128>> {
63 ledger_object::get_field_optional(self.get_slot_num(), sfield::EmailHash)
64 }
65
66 fn wallet_locator(&self) -> Result<Option<Hash256>> {
68 ledger_object::get_field_optional(self.get_slot_num(), sfield::WalletLocator)
69 }
70
71 fn wallet_size(&self) -> Result<Option<u32>> {
73 ledger_object::get_field_optional(self.get_slot_num(), sfield::WalletSize)
74 }
75
76 fn message_key(&self) -> Result<Option<PublicKeyBlob>> {
80 ledger_object::get_field_optional(self.get_slot_num(), sfield::MessageKey)
81 }
82
83 fn transfer_rate(&self) -> Result<Option<u32>> {
86 ledger_object::get_field_optional(self.get_slot_num(), sfield::TransferRate)
87 }
88
89 fn domain(&self) -> Result<Option<UriBlob>> {
92 ledger_object::get_field_optional(self.get_slot_num(), sfield::Domain)
93 }
94
95 fn tick_size(&self) -> Result<Option<u8>> {
98 ledger_object::get_field_optional(self.get_slot_num(), sfield::TickSize)
99 }
100
101 fn ticket_count(&self) -> Result<Option<u32>> {
105 ledger_object::get_field_optional(self.get_slot_num(), sfield::TicketCount)
106 }
107
108 fn nftoken_minter(&self) -> Result<Option<AccountID>> {
110 ledger_object::get_field_optional(self.get_slot_num(), sfield::NFTokenMinter)
111 }
112
113 fn minted_nftokens(&self) -> Result<Option<u32>> {
115 ledger_object::get_field_optional(self.get_slot_num(), sfield::MintedNFTokens)
116 }
117
118 fn burned_nftokens(&self) -> Result<Option<u32>> {
121 ledger_object::get_field_optional(self.get_slot_num(), sfield::BurnedNFTokens)
122 }
123
124 fn first_nftoken_sequence(&self) -> Result<Option<u32>> {
126 ledger_object::get_field_optional(self.get_slot_num(), sfield::FirstNFTokenSequence)
127 }
128
129 fn sponsored_owner_count(&self) -> Result<Option<u32>> {
131 ledger_object::get_field_optional(self.get_slot_num(), sfield::SponsoredOwnerCount)
132 }
133
134 fn sponsoring_owner_count(&self) -> Result<Option<u32>> {
136 ledger_object::get_field_optional(self.get_slot_num(), sfield::SponsoringOwnerCount)
137 }
138
139 fn sponsoring_account_count(&self) -> Result<Option<u32>> {
141 ledger_object::get_field_optional(self.get_slot_num(), sfield::SponsoringAccountCount)
142 }
143
144 fn amm_id(&self) -> Result<Option<Hash256>> {
148 ledger_object::get_field_optional(self.get_slot_num(), sfield::AMMID)
149 }
150
151 fn vault_id(&self) -> Result<Option<Hash256>> {
155 ledger_object::get_field_optional(self.get_slot_num(), sfield::VaultID)
156 }
157
158 fn loan_broker_id(&self) -> Result<Option<Hash256>> {
160 ledger_object::get_field_optional(self.get_slot_num(), sfield::LoanBrokerID)
161 }
162}
163
164pub trait CurrentAccountRootFields: CurrentLedgerObjectCommonFields {
166 fn account(&self) -> Result<AccountID> {
168 current_ledger_object::get_field(sfield::Account)
169 }
170
171 fn sequence(&self) -> Result<u32> {
173 current_ledger_object::get_field(sfield::Sequence)
174 }
175
176 fn balance(&self) -> Result<Amount> {
178 current_ledger_object::get_field(sfield::Balance)
179 }
180
181 fn owner_count(&self) -> Result<u32> {
184 current_ledger_object::get_field(sfield::OwnerCount)
185 }
186
187 fn previous_txn_id(&self) -> Result<Hash256> {
189 current_ledger_object::get_field(sfield::PreviousTxnID)
190 }
191
192 fn previous_txn_lgr_seq(&self) -> Result<u32> {
195 current_ledger_object::get_field(sfield::PreviousTxnLgrSeq)
196 }
197
198 fn account_txn_id(&self) -> Result<Option<Hash256>> {
202 current_ledger_object::get_field_optional(sfield::AccountTxnID)
203 }
204
205 fn regular_key(&self) -> Result<Option<AccountID>> {
208 current_ledger_object::get_field_optional(sfield::RegularKey)
209 }
210
211 fn email_hash(&self) -> Result<Option<Hash128>> {
214 current_ledger_object::get_field_optional(sfield::EmailHash)
215 }
216
217 fn wallet_locator(&self) -> Result<Option<Hash256>> {
219 current_ledger_object::get_field_optional(sfield::WalletLocator)
220 }
221
222 fn wallet_size(&self) -> Result<Option<u32>> {
224 current_ledger_object::get_field_optional(sfield::WalletSize)
225 }
226
227 fn message_key(&self) -> Result<Option<PublicKeyBlob>> {
231 current_ledger_object::get_field_optional(sfield::MessageKey)
232 }
233
234 fn transfer_rate(&self) -> Result<Option<u32>> {
237 current_ledger_object::get_field_optional(sfield::TransferRate)
238 }
239
240 fn domain(&self) -> Result<Option<UriBlob>> {
243 current_ledger_object::get_field_optional(sfield::Domain)
244 }
245
246 fn tick_size(&self) -> Result<Option<u8>> {
249 current_ledger_object::get_field_optional(sfield::TickSize)
250 }
251
252 fn ticket_count(&self) -> Result<Option<u32>> {
256 current_ledger_object::get_field_optional(sfield::TicketCount)
257 }
258
259 fn nftoken_minter(&self) -> Result<Option<AccountID>> {
261 current_ledger_object::get_field_optional(sfield::NFTokenMinter)
262 }
263
264 fn minted_nftokens(&self) -> Result<Option<u32>> {
266 current_ledger_object::get_field_optional(sfield::MintedNFTokens)
267 }
268
269 fn burned_nftokens(&self) -> Result<Option<u32>> {
272 current_ledger_object::get_field_optional(sfield::BurnedNFTokens)
273 }
274
275 fn first_nftoken_sequence(&self) -> Result<Option<u32>> {
277 current_ledger_object::get_field_optional(sfield::FirstNFTokenSequence)
278 }
279
280 fn sponsored_owner_count(&self) -> Result<Option<u32>> {
282 current_ledger_object::get_field_optional(sfield::SponsoredOwnerCount)
283 }
284
285 fn sponsoring_owner_count(&self) -> Result<Option<u32>> {
287 current_ledger_object::get_field_optional(sfield::SponsoringOwnerCount)
288 }
289
290 fn sponsoring_account_count(&self) -> Result<Option<u32>> {
292 current_ledger_object::get_field_optional(sfield::SponsoringAccountCount)
293 }
294
295 fn amm_id(&self) -> Result<Option<Hash256>> {
299 current_ledger_object::get_field_optional(sfield::AMMID)
300 }
301
302 fn vault_id(&self) -> Result<Option<Hash256>> {
306 current_ledger_object::get_field_optional(sfield::VaultID)
307 }
308
309 fn loan_broker_id(&self) -> Result<Option<Hash256>> {
311 current_ledger_object::get_field_optional(sfield::LoanBrokerID)
312 }
313}
314
315#[derive(Debug, Clone, Copy, Eq, PartialEq)]
316pub struct AccountRoot {
317 pub(crate) slot_num: i32,
318}
319
320impl AccountRoot {
321 pub fn new(slot_num: i32) -> Self {
323 Self { slot_num }
324 }
325}
326
327impl LedgerObjectCommonFields for AccountRoot {
328 fn get_slot_num(&self) -> i32 {
329 self.slot_num
330 }
331}
332
333impl AccountRootFields for AccountRoot {}
334
335#[cfg(test)]
336mod tests {
337 use super::*;
338 use crate::host::host_bindings_trait::MockHostBindings;
339 use crate::host::setup_mock;
340 use crate::objects::test_utils::*;
341
342 #[test]
343 fn read_all_fields() {
344 let mut mock = MockHostBindings::new();
345 mock_all_fields_present(&mut mock);
346 let _guard = setup_mock(mock);
347
348 let obj = AccountRoot::new(0);
349
350 assert!(obj.account().is_ok());
351 assert!(obj.sequence().is_ok());
352 assert!(obj.balance().is_ok());
353 assert!(obj.owner_count().is_ok());
354 assert!(obj.previous_txn_id().is_ok());
355 assert!(obj.previous_txn_lgr_seq().is_ok());
356 assert!(obj.account_txn_id().is_ok());
357 assert!(obj.regular_key().is_ok());
358 assert!(obj.email_hash().is_ok());
359 assert!(obj.wallet_locator().is_ok());
360 assert!(obj.wallet_size().is_ok());
361 assert!(obj.message_key().is_ok());
362 assert!(obj.transfer_rate().is_ok());
363 assert!(obj.domain().is_ok());
364 assert!(obj.tick_size().is_ok());
365 assert!(obj.ticket_count().is_ok());
366 assert!(obj.nftoken_minter().is_ok());
367 assert!(obj.minted_nftokens().is_ok());
368 assert!(obj.burned_nftokens().is_ok());
369 assert!(obj.first_nftoken_sequence().is_ok());
370 assert!(obj.sponsored_owner_count().is_ok());
371 assert!(obj.sponsoring_owner_count().is_ok());
372 assert!(obj.sponsoring_account_count().is_ok());
373 assert!(obj.amm_id().is_ok());
374 assert!(obj.vault_id().is_ok());
375 assert!(obj.loan_broker_id().is_ok());
376 }
377
378 #[test]
379 fn optional_fields_none() {
380 let mut mock = MockHostBindings::new();
381 mock_all_fields_not_found(&mut mock);
382 let _guard = setup_mock(mock);
383
384 let obj = AccountRoot::new(0);
385
386 assert!(obj.account_txn_id().unwrap().is_none());
387 assert!(obj.regular_key().unwrap().is_none());
388 assert!(obj.email_hash().unwrap().is_none());
389 assert!(obj.wallet_locator().unwrap().is_none());
390 assert!(obj.wallet_size().unwrap().is_none());
391 assert!(obj.transfer_rate().unwrap().is_none());
392 assert!(obj.tick_size().unwrap().is_none());
393 assert!(obj.ticket_count().unwrap().is_none());
394 assert!(obj.nftoken_minter().unwrap().is_none());
395 assert!(obj.minted_nftokens().unwrap().is_none());
396 assert!(obj.burned_nftokens().unwrap().is_none());
397 assert!(obj.first_nftoken_sequence().unwrap().is_none());
398 assert!(obj.sponsored_owner_count().unwrap().is_none());
399 assert!(obj.sponsoring_owner_count().unwrap().is_none());
400 assert!(obj.sponsoring_account_count().unwrap().is_none());
401 assert!(obj.amm_id().unwrap().is_none());
402 assert!(obj.vault_id().unwrap().is_none());
403 assert!(obj.loan_broker_id().unwrap().is_none());
404 }
405}