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>> {
60 ledger_object::get_field_optional(self.get_slot_num(), sfield::AssetsTotal)
61 }
62
63 fn assets_available(&self) -> Result<Option<Number>> {
65 ledger_object::get_field_optional(self.get_slot_num(), sfield::AssetsAvailable)
66 }
67
68 fn assets_maximum(&self) -> Result<Option<Number>> {
71 ledger_object::get_field_optional(self.get_slot_num(), sfield::AssetsMaximum)
72 }
73
74 fn loss_unrealized(&self) -> Result<Option<Number>> {
77 ledger_object::get_field_optional(self.get_slot_num(), sfield::LossUnrealized)
78 }
79
80 fn share_mpt_id(&self) -> Result<Hash192> {
82 ledger_object::get_field(self.get_slot_num(), sfield::ShareMPTID)
83 }
84
85 fn withdrawal_policy(&self) -> Result<u8> {
87 ledger_object::get_field(self.get_slot_num(), sfield::WithdrawalPolicy)
88 }
89
90 fn scale(&self) -> Result<Option<u8>> {
97 ledger_object::get_field_optional(self.get_slot_num(), sfield::Scale)
98 }
99
100 fn le_version(&self) -> Result<Option<u8>> {
102 ledger_object::get_field_optional(self.get_slot_num(), sfield::LEVersion)
103 }
104}
105
106pub trait CurrentVaultFields: CurrentLedgerObjectCommonFields {
108 fn previous_txn_id(&self) -> Result<Hash256> {
110 current_ledger_object::get_field(sfield::PreviousTxnID)
111 }
112
113 fn previous_txn_lgr_seq(&self) -> Result<u32> {
116 current_ledger_object::get_field(sfield::PreviousTxnLgrSeq)
117 }
118
119 fn sequence(&self) -> Result<u32> {
121 current_ledger_object::get_field(sfield::Sequence)
122 }
123
124 fn owner_node(&self) -> Result<u64> {
126 current_ledger_object::get_field(sfield::OwnerNode)
127 }
128
129 fn owner(&self) -> Result<AccountID> {
131 current_ledger_object::get_field(sfield::Owner)
132 }
133
134 fn account(&self) -> Result<AccountID> {
136 current_ledger_object::get_field(sfield::Account)
137 }
138
139 fn data(&self) -> Result<Option<StandardBlob>> {
142 current_ledger_object::get_field_optional(sfield::Data)
143 }
144
145 fn asset(&self) -> Result<Issue> {
147 current_ledger_object::get_field(sfield::Asset)
148 }
149
150 fn assets_total(&self) -> Result<Option<Number>> {
152 current_ledger_object::get_field_optional(sfield::AssetsTotal)
153 }
154
155 fn assets_available(&self) -> Result<Option<Number>> {
157 current_ledger_object::get_field_optional(sfield::AssetsAvailable)
158 }
159
160 fn assets_maximum(&self) -> Result<Option<Number>> {
163 current_ledger_object::get_field_optional(sfield::AssetsMaximum)
164 }
165
166 fn loss_unrealized(&self) -> Result<Option<Number>> {
169 current_ledger_object::get_field_optional(sfield::LossUnrealized)
170 }
171
172 fn share_mpt_id(&self) -> Result<Hash192> {
174 current_ledger_object::get_field(sfield::ShareMPTID)
175 }
176
177 fn withdrawal_policy(&self) -> Result<u8> {
179 current_ledger_object::get_field(sfield::WithdrawalPolicy)
180 }
181
182 fn scale(&self) -> Result<Option<u8>> {
189 current_ledger_object::get_field_optional(sfield::Scale)
190 }
191
192 fn le_version(&self) -> Result<Option<u8>> {
194 current_ledger_object::get_field_optional(sfield::LEVersion)
195 }
196}
197
198#[derive(Debug, Clone, Copy, Eq, PartialEq)]
199pub struct Vault {
200 pub(crate) slot_num: i32,
201}
202
203impl Vault {
204 pub fn new(slot_num: i32) -> Self {
206 Self { slot_num }
207 }
208}
209
210impl LedgerObjectCommonFields for Vault {
211 fn get_slot_num(&self) -> i32 {
212 self.slot_num
213 }
214}
215
216impl VaultFields for Vault {}
217
218#[cfg(test)]
219mod tests {
220 use super::*;
221 use crate::host::host_bindings_trait::MockHostBindings;
222 use crate::host::setup_mock;
223 use crate::objects::test_utils::*;
224
225 #[test]
226 fn read_all_fields() {
227 let mut mock = MockHostBindings::new();
228 mock_all_fields_present(&mut mock);
229 let _guard = setup_mock(mock);
230
231 let obj = Vault::new(0);
232
233 assert!(obj.previous_txn_id().is_ok());
234 assert!(obj.previous_txn_lgr_seq().is_ok());
235 assert!(obj.sequence().is_ok());
236 assert!(obj.owner_node().is_ok());
237 assert!(obj.owner().is_ok());
238 assert!(obj.account().is_ok());
239 assert!(obj.asset().is_ok());
240 assert!(obj.share_mpt_id().is_ok());
241 assert!(obj.withdrawal_policy().is_ok());
242 assert!(obj.data().is_ok());
243 assert!(obj.assets_total().is_ok());
244 assert!(obj.assets_available().is_ok());
245 assert!(obj.assets_maximum().is_ok());
246 assert!(obj.loss_unrealized().is_ok());
247 assert!(obj.scale().is_ok());
248 assert!(obj.le_version().is_ok());
249 }
250
251 #[test]
252 fn optional_fields_none() {
253 let mut mock = MockHostBindings::new();
254 mock_all_fields_not_found(&mut mock);
255 let _guard = setup_mock(mock);
256
257 let obj = Vault::new(0);
258
259 assert!(obj.scale().unwrap().is_none());
260 assert!(obj.le_version().unwrap().is_none());
261 }
262}