xrpl_common_stdlib/objects/generated/
vault.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::issue::Issue;
11use crate::types::number::Number;
12use crate::types::uint::{Hash192, Hash256};
13
14pub trait VaultFields: LedgerObjectCommonFields {
16 fn previous_txn_id(&self) -> Result<Hash256> {
18 ledger_object::get_field(self.get_slot_num(), sfield::PreviousTxnID)
19 }
20
21 fn previous_txn_lgr_seq(&self) -> Result<u32> {
24 ledger_object::get_field(self.get_slot_num(), sfield::PreviousTxnLgrSeq)
25 }
26
27 fn sequence(&self) -> Result<u32> {
29 ledger_object::get_field(self.get_slot_num(), sfield::Sequence)
30 }
31
32 fn owner_node(&self) -> Result<u64> {
34 ledger_object::get_field(self.get_slot_num(), sfield::OwnerNode)
35 }
36
37 fn owner(&self) -> Result<AccountID> {
39 ledger_object::get_field(self.get_slot_num(), sfield::Owner)
40 }
41
42 fn account(&self) -> Result<AccountID> {
44 ledger_object::get_field(self.get_slot_num(), sfield::Account)
45 }
46
47 fn data(&self) -> Result<Option<StandardBlob>> {
50 ledger_object::get_field_optional(self.get_slot_num(), sfield::Data)
51 }
52
53 fn asset(&self) -> Result<Issue> {
55 ledger_object::get_field(self.get_slot_num(), sfield::Asset)
56 }
57
58 fn assets_total(&self) -> Result<Option<Number>> {
63 ledger_object::get_field_optional(self.get_slot_num(), sfield::AssetsTotal)
64 }
65
66 fn assets_available(&self) -> Result<Option<Number>> {
68 ledger_object::get_field_optional(self.get_slot_num(), sfield::AssetsAvailable)
69 }
70
71 fn assets_maximum(&self) -> Result<Option<Number>> {
73 ledger_object::get_field_optional(self.get_slot_num(), sfield::AssetsMaximum)
74 }
75
76 fn loss_unrealized(&self) -> Result<Option<Number>> {
81 ledger_object::get_field_optional(self.get_slot_num(), sfield::LossUnrealized)
82 }
83
84 fn share_mpt_id(&self) -> Result<Hash192> {
86 ledger_object::get_field(self.get_slot_num(), sfield::ShareMPTID)
87 }
88
89 fn withdrawal_policy(&self) -> Result<u8> {
91 ledger_object::get_field(self.get_slot_num(), sfield::WithdrawalPolicy)
92 }
93
94 fn scale(&self) -> Result<Option<u8>> {
101 ledger_object::get_field_optional(self.get_slot_num(), sfield::Scale)
102 }
103
104 fn le_version(&self) -> Result<Option<u8>> {
108 ledger_object::get_field_optional(self.get_slot_num(), sfield::LEVersion)
109 }
110
111 fn vault_kind(&self) -> Result<Option<u8>> {
114 ledger_object::get_field_optional(self.get_slot_num(), sfield::VaultKind)
115 }
116
117 fn subscription_date(&self) -> Result<Option<u32>> {
120 ledger_object::get_field_optional(self.get_slot_num(), sfield::SubscriptionDate)
121 }
122
123 fn redemption_date(&self) -> Result<Option<u32>> {
126 ledger_object::get_field_optional(self.get_slot_num(), sfield::RedemptionDate)
127 }
128}
129
130pub trait CurrentVaultFields: CurrentLedgerObjectCommonFields {
132 fn previous_txn_id(&self) -> Result<Hash256> {
134 current_ledger_object::get_field(sfield::PreviousTxnID)
135 }
136
137 fn previous_txn_lgr_seq(&self) -> Result<u32> {
140 current_ledger_object::get_field(sfield::PreviousTxnLgrSeq)
141 }
142
143 fn sequence(&self) -> Result<u32> {
145 current_ledger_object::get_field(sfield::Sequence)
146 }
147
148 fn owner_node(&self) -> Result<u64> {
150 current_ledger_object::get_field(sfield::OwnerNode)
151 }
152
153 fn owner(&self) -> Result<AccountID> {
155 current_ledger_object::get_field(sfield::Owner)
156 }
157
158 fn account(&self) -> Result<AccountID> {
160 current_ledger_object::get_field(sfield::Account)
161 }
162
163 fn data(&self) -> Result<Option<StandardBlob>> {
166 current_ledger_object::get_field_optional(sfield::Data)
167 }
168
169 fn asset(&self) -> Result<Issue> {
171 current_ledger_object::get_field(sfield::Asset)
172 }
173
174 fn assets_total(&self) -> Result<Option<Number>> {
179 current_ledger_object::get_field_optional(sfield::AssetsTotal)
180 }
181
182 fn assets_available(&self) -> Result<Option<Number>> {
184 current_ledger_object::get_field_optional(sfield::AssetsAvailable)
185 }
186
187 fn assets_maximum(&self) -> Result<Option<Number>> {
189 current_ledger_object::get_field_optional(sfield::AssetsMaximum)
190 }
191
192 fn loss_unrealized(&self) -> Result<Option<Number>> {
197 current_ledger_object::get_field_optional(sfield::LossUnrealized)
198 }
199
200 fn share_mpt_id(&self) -> Result<Hash192> {
202 current_ledger_object::get_field(sfield::ShareMPTID)
203 }
204
205 fn withdrawal_policy(&self) -> Result<u8> {
207 current_ledger_object::get_field(sfield::WithdrawalPolicy)
208 }
209
210 fn scale(&self) -> Result<Option<u8>> {
217 current_ledger_object::get_field_optional(sfield::Scale)
218 }
219
220 fn le_version(&self) -> Result<Option<u8>> {
224 current_ledger_object::get_field_optional(sfield::LEVersion)
225 }
226
227 fn vault_kind(&self) -> Result<Option<u8>> {
230 current_ledger_object::get_field_optional(sfield::VaultKind)
231 }
232
233 fn subscription_date(&self) -> Result<Option<u32>> {
236 current_ledger_object::get_field_optional(sfield::SubscriptionDate)
237 }
238
239 fn redemption_date(&self) -> Result<Option<u32>> {
242 current_ledger_object::get_field_optional(sfield::RedemptionDate)
243 }
244}
245
246#[derive(Debug, Clone, Copy, Eq, PartialEq)]
247pub struct Vault {
248 pub(crate) slot_num: i32,
249}
250
251impl Vault {
252 pub fn new(slot_num: i32) -> Self {
254 Self { slot_num }
255 }
256}
257
258impl LedgerObjectCommonFields for Vault {
259 fn get_slot_num(&self) -> i32 {
260 self.slot_num
261 }
262}
263
264impl VaultFields for Vault {}
265
266#[cfg(test)]
267mod tests {
268 use super::*;
269 use crate::host::host_bindings_trait::MockHostBindings;
270 use crate::host::setup_mock;
271 use crate::objects::test_utils::*;
272
273 #[test]
274 fn read_all_fields() {
275 let mut mock = MockHostBindings::new();
276 mock_all_fields_present(&mut mock);
277 let _guard = setup_mock(mock);
278
279 let obj = Vault::new(0);
280
281 assert!(obj.previous_txn_id().is_ok());
282 assert!(obj.previous_txn_lgr_seq().is_ok());
283 assert!(obj.sequence().is_ok());
284 assert!(obj.owner_node().is_ok());
285 assert!(obj.owner().is_ok());
286 assert!(obj.account().is_ok());
287 assert!(obj.asset().is_ok());
288 assert!(obj.share_mpt_id().is_ok());
289 assert!(obj.withdrawal_policy().is_ok());
290 assert!(obj.data().is_ok());
291 assert!(obj.assets_total().is_ok());
292 assert!(obj.assets_available().is_ok());
293 assert!(obj.assets_maximum().is_ok());
294 assert!(obj.loss_unrealized().is_ok());
295 assert!(obj.scale().is_ok());
296 assert!(obj.le_version().is_ok());
297 assert!(obj.vault_kind().is_ok());
298 assert!(obj.subscription_date().is_ok());
299 assert!(obj.redemption_date().is_ok());
300 }
301
302 #[test]
303 fn optional_fields_none() {
304 let mut mock = MockHostBindings::new();
305 mock_all_fields_not_found(&mut mock);
306 let _guard = setup_mock(mock);
307
308 let obj = Vault::new(0);
309
310 assert!(obj.scale().unwrap().is_none());
311 assert!(obj.le_version().unwrap().is_none());
312 assert!(obj.vault_kind().unwrap().is_none());
313 assert!(obj.subscription_date().unwrap().is_none());
314 assert!(obj.redemption_date().unwrap().is_none());
315 }
316}