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 contract_version: None,
79 id: Identifier::from([0xDD; 32]),
80 owner_id: Identifier::from([0xAA; 32]),
81 properties: Default::default(),
82 revision: Some(1),
83 created_at: None,
84 updated_at: None,
85 transferred_at: None,
86 created_at_block_height: None,
87 updated_at_block_height: None,
88 transferred_at_block_height: None,
89 created_at_core_block_height: None,
90 updated_at_core_block_height: None,
91 transferred_at_core_block_height: None,
92 creator_id: None,
93 })
94 }
95
96 fn make_v0() -> IdentityCreditWithdrawalTransitionActionV0 {
97 IdentityCreditWithdrawalTransitionActionV0 {
98 identity_id: Identifier::from([0xAA; 32]),
99 nonce: 10,
100 prepared_withdrawal_document: make_document(),
101 amount: 7500,
102 user_fee_increase: 6,
103 }
104 }
105
106 #[test]
107 fn test_from_v0() {
108 let v0 = make_v0();
109 let action: IdentityCreditWithdrawalTransitionAction = v0.into();
110 assert!(matches!(
111 action,
112 IdentityCreditWithdrawalTransitionAction::V0(_)
113 ));
114 }
115
116 #[test]
117 fn test_nonce() {
118 let action = IdentityCreditWithdrawalTransitionAction::V0(make_v0());
119 assert_eq!(action.nonce(), 10);
120 }
121
122 #[test]
123 fn test_identity_id() {
124 let action = IdentityCreditWithdrawalTransitionAction::V0(make_v0());
125 assert_eq!(action.identity_id(), Identifier::from([0xAA; 32]));
126 }
127
128 #[test]
129 fn test_amount() {
130 let action = IdentityCreditWithdrawalTransitionAction::V0(make_v0());
131 assert_eq!(action.amount(), 7500);
132 }
133
134 #[test]
135 fn test_prepared_withdrawal_document() {
136 let action = IdentityCreditWithdrawalTransitionAction::V0(make_v0());
137 let doc = action.prepared_withdrawal_document();
138 match doc {
139 Document::V0(v0) => {
140 assert_eq!(v0.id, Identifier::from([0xDD; 32]));
141 assert_eq!(v0.owner_id, Identifier::from([0xAA; 32]));
142 }
143 }
144 }
145
146 #[test]
147 fn test_prepared_withdrawal_document_owned() {
148 let action = IdentityCreditWithdrawalTransitionAction::V0(make_v0());
149 let doc = action.prepared_withdrawal_document_owned();
150 match doc {
151 Document::V0(v0) => {
152 assert_eq!(v0.id, Identifier::from([0xDD; 32]));
153 }
154 }
155 }
156
157 #[test]
158 fn test_user_fee_increase() {
159 let action = IdentityCreditWithdrawalTransitionAction::V0(make_v0());
160 assert_eq!(action.user_fee_increase(), 6);
161 }
162}