Skip to main content

xrpl_common_stdlib/objects/generated/
nftoken_page.rs

1// GENERATED -- do not hand-edit. Run scripts/generate-ledger-objects.sh to regenerate.
2
3use 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
10/// Trait providing access to fields specific to NFTokenPage objects in any ledger.
11pub trait NFTokenPageFields: LedgerObjectCommonFields {
12    /// The locator of the previous page, if any. Details about this field and how it should be used
13    /// are outlined below.
14    fn previous_page_min(&self) -> Result<Option<Hash256>> {
15        ledger_object::get_field_optional(self.get_slot_num(), sfield::PreviousPageMin)
16    }
17
18    /// The locator of the next page, if any. Details about this field and how it should be used are
19    /// outlined below.
20    fn next_page_min(&self) -> Result<Option<Hash256>> {
21        ledger_object::get_field_optional(self.get_slot_num(), sfield::NextPageMin)
22    }
23
24    /// Identifies the transaction ID of the transaction that most recently modified this
25    /// NFTokenPage object.
26    fn previous_txn_id(&self) -> Result<Hash256> {
27        ledger_object::get_field(self.get_slot_num(), sfield::PreviousTxnID)
28    }
29
30    /// The sequence of the ledger that contains the transaction that most recently modified this
31    /// NFTokenPage object.
32    fn previous_txn_lgr_seq(&self) -> Result<u32> {
33        ledger_object::get_field(self.get_slot_num(), sfield::PreviousTxnLgrSeq)
34    }
35}
36
37/// Trait providing access to fields specific to the current NFTokenPage object.
38pub trait CurrentNFTokenPageFields: CurrentLedgerObjectCommonFields {
39    /// The locator of the previous page, if any. Details about this field and how it should be used
40    /// are outlined below.
41    fn previous_page_min(&self) -> Result<Option<Hash256>> {
42        current_ledger_object::get_field_optional(sfield::PreviousPageMin)
43    }
44
45    /// The locator of the next page, if any. Details about this field and how it should be used are
46    /// outlined below.
47    fn next_page_min(&self) -> Result<Option<Hash256>> {
48        current_ledger_object::get_field_optional(sfield::NextPageMin)
49    }
50
51    /// Identifies the transaction ID of the transaction that most recently modified this
52    /// NFTokenPage object.
53    fn previous_txn_id(&self) -> Result<Hash256> {
54        current_ledger_object::get_field(sfield::PreviousTxnID)
55    }
56
57    /// The sequence of the ledger that contains the transaction that most recently modified this
58    /// NFTokenPage object.
59    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    /// Binds this handle to a host-managed slot holding a NFTokenPage ledger object.
71    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}