xrpl_common_stdlib/objects/generated/
nftoken_page.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::uint::Hash256;
9
10pub trait NFTokenPageFields: LedgerObjectCommonFields {
12 fn previous_page_min(&self) -> Result<Option<Hash256>> {
15 ledger_object::get_field_optional(self.get_slot_num(), sfield::PreviousPageMin)
16 }
17
18 fn next_page_min(&self) -> Result<Option<Hash256>> {
21 ledger_object::get_field_optional(self.get_slot_num(), sfield::NextPageMin)
22 }
23
24 fn previous_txn_id(&self) -> Result<Hash256> {
27 ledger_object::get_field(self.get_slot_num(), sfield::PreviousTxnID)
28 }
29
30 fn previous_txn_lgr_seq(&self) -> Result<u32> {
33 ledger_object::get_field(self.get_slot_num(), sfield::PreviousTxnLgrSeq)
34 }
35}
36
37pub trait CurrentNFTokenPageFields: CurrentLedgerObjectCommonFields {
39 fn previous_page_min(&self) -> Result<Option<Hash256>> {
42 current_ledger_object::get_field_optional(sfield::PreviousPageMin)
43 }
44
45 fn next_page_min(&self) -> Result<Option<Hash256>> {
48 current_ledger_object::get_field_optional(sfield::NextPageMin)
49 }
50
51 fn previous_txn_id(&self) -> Result<Hash256> {
54 current_ledger_object::get_field(sfield::PreviousTxnID)
55 }
56
57 fn previous_txn_lgr_seq(&self) -> Result<u32> {
60 current_ledger_object::get_field(sfield::PreviousTxnLgrSeq)
61 }
62}
63
64#[derive(Debug, Clone, Copy, Eq, PartialEq)]
65pub struct NFTokenPage {
66 pub(crate) slot_num: i32,
67}
68
69impl NFTokenPage {
70 pub fn new(slot_num: i32) -> Self {
72 Self { slot_num }
73 }
74}
75
76impl LedgerObjectCommonFields for NFTokenPage {
77 fn get_slot_num(&self) -> i32 {
78 self.slot_num
79 }
80}
81
82impl NFTokenPageFields for NFTokenPage {}
83
84#[cfg(test)]
85mod tests {
86 use super::*;
87 use crate::host::host_bindings_trait::MockHostBindings;
88 use crate::host::setup_mock;
89 use crate::objects::test_utils::*;
90
91 #[test]
92 fn read_all_fields() {
93 let mut mock = MockHostBindings::new();
94 mock_all_fields_present(&mut mock);
95 let _guard = setup_mock(mock);
96
97 let obj = NFTokenPage::new(0);
98
99 assert!(obj.previous_txn_id().is_ok());
100 assert!(obj.previous_txn_lgr_seq().is_ok());
101 assert!(obj.previous_page_min().is_ok());
102 assert!(obj.next_page_min().is_ok());
103 }
104
105 #[test]
106 fn optional_fields_none() {
107 let mut mock = MockHostBindings::new();
108 mock_all_fields_not_found(&mut mock);
109 let _guard = setup_mock(mock);
110
111 let obj = NFTokenPage::new(0);
112
113 assert!(obj.previous_page_min().unwrap().is_none());
114 assert!(obj.next_page_min().unwrap().is_none());
115 }
116}