xpx_chain_sdk/models/multisig/
multisig.rs1use {
8 num_enum::IntoPrimitive,
9 std::{collections::HashMap, fmt},
10};
11
12use crate::{account::PublicAccount, errors_const::ERR_UNKNOWN_TYPE};
13use crate::helpers::TransactionHash;
14
15#[derive(Debug, Clone, Serialize, Deserialize, IntoPrimitive)]
19#[repr(u8)]
20pub enum MultisigModificationType {
21 Add,
22 Remove,
23}
24
25impl MultisigModificationType {
26 pub fn value(self) -> u8 {
27 self.into()
28 }
29}
30
31impl From<u8> for MultisigModificationType {
32 fn from(t: u8) -> Self {
33 assert!(t <= 1, "{}", ERR_UNKNOWN_TYPE);
34 match t {
35 0 => MultisigModificationType::Add,
36 _ => MultisigModificationType::Remove,
37 }
38 }
39}
40
41#[derive(Debug, Clone, Serialize, Deserialize)]
42pub struct CosignatoryModification {
43 #[serde(rename = "modificationType")]
44 pub modification_type: MultisigModificationType,
45 #[serde(rename = "cosignatory_public_key")]
47 pub public_account: PublicAccount,
48}
49
50impl CosignatoryModification {
51 pub fn create(
52 modification_type: MultisigModificationType,
53 public_account: PublicAccount,
54 ) -> Self {
55 CosignatoryModification { modification_type, public_account }
56 }
57}
58
59#[derive(Debug, Clone, Serialize, Deserialize)]
60#[serde(rename_all = "camelCase")]
61pub struct Cosignature {
62 pub signature: String,
66 pub signer: PublicAccount,
68}
69
70#[derive(Debug, Clone, Serialize, Deserialize)]
71#[serde(rename_all = "camelCase")]
72pub struct CosignatureInfo {
73 pub signature: String,
74 pub signer: String,
76 pub parent_hash: TransactionHash,
77}
78
79impl fmt::Display for CosignatureInfo {
80 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
81 write!(f, "{}", serde_json::to_string_pretty(self).unwrap_or_default())
82 }
83}
84
85impl CosignatureInfo {
86 pub fn transaction_hash(&self) -> TransactionHash {
87 self.parent_hash.to_owned()
88 }
89}
90
91#[derive(Debug, Serialize, Deserialize)]
92#[serde(rename_all = "camelCase")]
93pub struct MultisigAccountInfo {
94 #[serde(rename = "account")]
96 pub account: PublicAccount,
97 #[serde(rename = "minApproval")]
99 pub min_approval: i32,
100 #[serde(rename = "minRemoval")]
102 pub min_removal: i32,
103 #[serde(rename = "cosignatories")]
105 pub cosignatories: Vec<PublicAccount>,
106 #[serde(rename = "multisigAccounts")]
108 pub multisig_accounts: Vec<PublicAccount>,
109}
110
111impl fmt::Display for MultisigAccountInfo {
112 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
113 write!(f, "{}", serde_json::to_string_pretty(self).unwrap_or_default())
114 }
115}
116
117#[derive(Debug, Serialize, Deserialize)]
118pub struct MultisigAccountGraphInfo {
119 #[serde(rename = "MultisigAccounts")]
120 pub multisig_accounts: HashMap<i16, Vec<MultisigAccountInfo>>,
121}
122
123impl fmt::Display for MultisigAccountGraphInfo {
124 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
125 write!(f, "{}", serde_json::to_string_pretty(self).unwrap_or_default())
126 }
127}