xrpl_common_stdlib/objects/generated/
mptoken.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::blob::StandardBlob;
10use crate::types::uint::{Hash192, Hash256};
11
12pub trait MPTokenFields: LedgerObjectCommonFields {
14 fn account(&self) -> Result<AccountID> {
16 ledger_object::get_field(self.get_slot_num(), sfield::Account)
17 }
18
19 fn mptoken_issuance_id(&self) -> Result<Hash192> {
21 ledger_object::get_field(self.get_slot_num(), sfield::MPTokenIssuanceID)
22 }
23
24 fn mpt_amount(&self) -> Result<Option<u64>> {
27 ledger_object::get_field_optional(self.get_slot_num(), sfield::MPTAmount)
28 }
29
30 fn locked_amount(&self) -> Result<Option<u64>> {
32 ledger_object::get_field_optional(self.get_slot_num(), sfield::LockedAmount)
33 }
34
35 fn owner_node(&self) -> Result<u64> {
38 ledger_object::get_field(self.get_slot_num(), sfield::OwnerNode)
39 }
40
41 fn previous_txn_id(&self) -> Result<Hash256> {
43 ledger_object::get_field(self.get_slot_num(), sfield::PreviousTxnID)
44 }
45
46 fn previous_txn_lgr_seq(&self) -> Result<u32> {
49 ledger_object::get_field(self.get_slot_num(), sfield::PreviousTxnLgrSeq)
50 }
51
52 fn confidential_balance_inbox(&self) -> Result<Option<StandardBlob>> {
56 ledger_object::get_field_optional(self.get_slot_num(), sfield::ConfidentialBalanceInbox)
57 }
58
59 fn confidential_balance_spending(&self) -> Result<Option<StandardBlob>> {
62 ledger_object::get_field_optional(self.get_slot_num(), sfield::ConfidentialBalanceSpending)
63 }
64
65 fn confidential_balance_version(&self) -> Result<Option<u32>> {
70 ledger_object::get_field_optional(self.get_slot_num(), sfield::ConfidentialBalanceVersion)
71 }
72
73 fn issuer_encrypted_balance(&self) -> Result<Option<StandardBlob>> {
76 ledger_object::get_field_optional(self.get_slot_num(), sfield::IssuerEncryptedBalance)
77 }
78
79 fn auditor_encrypted_balance(&self) -> Result<Option<StandardBlob>> {
82 ledger_object::get_field_optional(self.get_slot_num(), sfield::AuditorEncryptedBalance)
83 }
84
85 fn issuer_key_mirror_epoch(&self) -> Result<Option<u32>> {
87 ledger_object::get_field_optional(self.get_slot_num(), sfield::IssuerKeyMirrorEpoch)
88 }
89
90 fn auditor_key_mirror_epoch(&self) -> Result<Option<u32>> {
92 ledger_object::get_field_optional(self.get_slot_num(), sfield::AuditorKeyMirrorEpoch)
93 }
94
95 fn holder_encryption_key(&self) -> Result<Option<StandardBlob>> {
98 ledger_object::get_field_optional(self.get_slot_num(), sfield::HolderEncryptionKey)
99 }
100}
101
102pub trait CurrentMPTokenFields: CurrentLedgerObjectCommonFields {
104 fn account(&self) -> Result<AccountID> {
106 current_ledger_object::get_field(sfield::Account)
107 }
108
109 fn mptoken_issuance_id(&self) -> Result<Hash192> {
111 current_ledger_object::get_field(sfield::MPTokenIssuanceID)
112 }
113
114 fn mpt_amount(&self) -> Result<Option<u64>> {
117 current_ledger_object::get_field_optional(sfield::MPTAmount)
118 }
119
120 fn locked_amount(&self) -> Result<Option<u64>> {
122 current_ledger_object::get_field_optional(sfield::LockedAmount)
123 }
124
125 fn owner_node(&self) -> Result<u64> {
128 current_ledger_object::get_field(sfield::OwnerNode)
129 }
130
131 fn previous_txn_id(&self) -> Result<Hash256> {
133 current_ledger_object::get_field(sfield::PreviousTxnID)
134 }
135
136 fn previous_txn_lgr_seq(&self) -> Result<u32> {
139 current_ledger_object::get_field(sfield::PreviousTxnLgrSeq)
140 }
141
142 fn confidential_balance_inbox(&self) -> Result<Option<StandardBlob>> {
146 current_ledger_object::get_field_optional(sfield::ConfidentialBalanceInbox)
147 }
148
149 fn confidential_balance_spending(&self) -> Result<Option<StandardBlob>> {
152 current_ledger_object::get_field_optional(sfield::ConfidentialBalanceSpending)
153 }
154
155 fn confidential_balance_version(&self) -> Result<Option<u32>> {
160 current_ledger_object::get_field_optional(sfield::ConfidentialBalanceVersion)
161 }
162
163 fn issuer_encrypted_balance(&self) -> Result<Option<StandardBlob>> {
166 current_ledger_object::get_field_optional(sfield::IssuerEncryptedBalance)
167 }
168
169 fn auditor_encrypted_balance(&self) -> Result<Option<StandardBlob>> {
172 current_ledger_object::get_field_optional(sfield::AuditorEncryptedBalance)
173 }
174
175 fn issuer_key_mirror_epoch(&self) -> Result<Option<u32>> {
177 current_ledger_object::get_field_optional(sfield::IssuerKeyMirrorEpoch)
178 }
179
180 fn auditor_key_mirror_epoch(&self) -> Result<Option<u32>> {
182 current_ledger_object::get_field_optional(sfield::AuditorKeyMirrorEpoch)
183 }
184
185 fn holder_encryption_key(&self) -> Result<Option<StandardBlob>> {
188 current_ledger_object::get_field_optional(sfield::HolderEncryptionKey)
189 }
190}
191
192#[derive(Debug, Clone, Copy, Eq, PartialEq)]
193pub struct MPToken {
194 pub(crate) slot_num: i32,
195}
196
197impl MPToken {
198 pub fn new(slot_num: i32) -> Self {
200 Self { slot_num }
201 }
202}
203
204impl LedgerObjectCommonFields for MPToken {
205 fn get_slot_num(&self) -> i32 {
206 self.slot_num
207 }
208}
209
210impl MPTokenFields for MPToken {}
211
212#[cfg(test)]
213mod tests {
214 use super::*;
215 use crate::host::host_bindings_trait::MockHostBindings;
216 use crate::host::setup_mock;
217 use crate::objects::test_utils::*;
218
219 #[test]
220 fn read_all_fields() {
221 let mut mock = MockHostBindings::new();
222 mock_all_fields_present(&mut mock);
223 let _guard = setup_mock(mock);
224
225 let obj = MPToken::new(0);
226
227 assert!(obj.account().is_ok());
228 assert!(obj.mptoken_issuance_id().is_ok());
229 assert!(obj.owner_node().is_ok());
230 assert!(obj.previous_txn_id().is_ok());
231 assert!(obj.previous_txn_lgr_seq().is_ok());
232 assert!(obj.mpt_amount().is_ok());
233 assert!(obj.locked_amount().is_ok());
234 assert!(obj.confidential_balance_inbox().is_ok());
235 assert!(obj.confidential_balance_spending().is_ok());
236 assert!(obj.confidential_balance_version().is_ok());
237 assert!(obj.issuer_encrypted_balance().is_ok());
238 assert!(obj.auditor_encrypted_balance().is_ok());
239 assert!(obj.issuer_key_mirror_epoch().is_ok());
240 assert!(obj.auditor_key_mirror_epoch().is_ok());
241 assert!(obj.holder_encryption_key().is_ok());
242 }
243
244 #[test]
245 fn optional_fields_none() {
246 let mut mock = MockHostBindings::new();
247 mock_all_fields_not_found(&mut mock);
248 let _guard = setup_mock(mock);
249
250 let obj = MPToken::new(0);
251
252 assert!(obj.mpt_amount().unwrap().is_none());
253 assert!(obj.locked_amount().unwrap().is_none());
254 assert!(obj.confidential_balance_version().unwrap().is_none());
255 assert!(obj.issuer_key_mirror_epoch().unwrap().is_none());
256 assert!(obj.auditor_key_mirror_epoch().unwrap().is_none());
257 }
258}