drive/state_transition_action/identity/identity_credit_withdrawal/
mod.rs1pub mod transformer;
3pub mod v0;
5
6use crate::state_transition_action::identity::identity_credit_withdrawal::v0::IdentityCreditWithdrawalTransitionActionV0;
7use derive_more::From;
8use dpp::document::Document;
9
10use dpp::platform_value::Identifier;
11use dpp::prelude::{IdentityNonce, UserFeeIncrease};
12
13#[derive(Debug, Clone, From)]
15pub enum IdentityCreditWithdrawalTransitionAction {
16 V0(IdentityCreditWithdrawalTransitionActionV0),
18}
19
20impl IdentityCreditWithdrawalTransitionAction {
21 pub fn nonce(&self) -> IdentityNonce {
23 match self {
24 IdentityCreditWithdrawalTransitionAction::V0(transition) => transition.nonce,
25 }
26 }
27
28 pub fn identity_id(&self) -> Identifier {
30 match self {
31 IdentityCreditWithdrawalTransitionAction::V0(transition) => transition.identity_id,
32 }
33 }
34
35 pub fn amount(&self) -> u64 {
37 match self {
38 IdentityCreditWithdrawalTransitionAction::V0(transition) => transition.amount,
39 }
40 }
41
42 pub fn prepared_withdrawal_document(&self) -> &Document {
44 match self {
45 IdentityCreditWithdrawalTransitionAction::V0(transition) => {
46 &transition.prepared_withdrawal_document
47 }
48 }
49 }
50
51 pub fn prepared_withdrawal_document_owned(self) -> Document {
53 match self {
54 IdentityCreditWithdrawalTransitionAction::V0(transition) => {
55 transition.prepared_withdrawal_document
56 }
57 }
58 }
59
60 pub fn user_fee_increase(&self) -> UserFeeIncrease {
62 match self {
63 IdentityCreditWithdrawalTransitionAction::V0(transition) => {
64 transition.user_fee_increase
65 }
66 }
67 }
68}
69
70#[cfg(test)]
71mod tests {
72 use super::*;
73 use crate::state_transition_action::identity::identity_credit_withdrawal::v0::IdentityCreditWithdrawalTransitionActionV0;
74 use dpp::document::DocumentV0;
75
76 fn make_document() -> Document {
77 Document::V0(DocumentV0 {
78 id: Identifier::from([0xDD; 32]),
79 owner_id: Identifier::from([0xAA; 32]),
80 properties: Default::default(),
81 revision: Some(1),
82 created_at: None,
83 updated_at: None,
84 transferred_at: None,
85 created_at_block_height: None,
86 updated_at_block_height: None,
87 transferred_at_block_height: None,
88 created_at_core_block_height: None,
89 updated_at_core_block_height: None,
90 transferred_at_core_block_height: None,
91 creator_id: None,
92 })
93 }
94
95 fn make_v0() -> IdentityCreditWithdrawalTransitionActionV0 {
96 IdentityCreditWithdrawalTransitionActionV0 {
97 identity_id: Identifier::from([0xAA; 32]),
98 nonce: 10,
99 prepared_withdrawal_document: make_document(),
100 amount: 7500,
101 user_fee_increase: 6,
102 }
103 }
104
105 #[test]
106 fn test_from_v0() {
107 let v0 = make_v0();
108 let action: IdentityCreditWithdrawalTransitionAction = v0.into();
109 assert!(matches!(
110 action,
111 IdentityCreditWithdrawalTransitionAction::V0(_)
112 ));
113 }
114
115 #[test]
116 fn test_nonce() {
117 let action = IdentityCreditWithdrawalTransitionAction::V0(make_v0());
118 assert_eq!(action.nonce(), 10);
119 }
120
121 #[test]
122 fn test_identity_id() {
123 let action = IdentityCreditWithdrawalTransitionAction::V0(make_v0());
124 assert_eq!(action.identity_id(), Identifier::from([0xAA; 32]));
125 }
126
127 #[test]
128 fn test_amount() {
129 let action = IdentityCreditWithdrawalTransitionAction::V0(make_v0());
130 assert_eq!(action.amount(), 7500);
131 }
132
133 #[test]
134 fn test_prepared_withdrawal_document() {
135 let action = IdentityCreditWithdrawalTransitionAction::V0(make_v0());
136 let doc = action.prepared_withdrawal_document();
137 match doc {
138 Document::V0(v0) => {
139 assert_eq!(v0.id, Identifier::from([0xDD; 32]));
140 assert_eq!(v0.owner_id, Identifier::from([0xAA; 32]));
141 }
142 }
143 }
144
145 #[test]
146 fn test_prepared_withdrawal_document_owned() {
147 let action = IdentityCreditWithdrawalTransitionAction::V0(make_v0());
148 let doc = action.prepared_withdrawal_document_owned();
149 match doc {
150 Document::V0(v0) => {
151 assert_eq!(v0.id, Identifier::from([0xDD; 32]));
152 }
153 }
154 }
155
156 #[test]
157 fn test_user_fee_increase() {
158 let action = IdentityCreditWithdrawalTransitionAction::V0(make_v0());
159 assert_eq!(action.user_fee_increase(), 6);
160 }
161}