catbuffer_rust/
multisig_entry_builder.rs1use super::address_dto::*;
23use super::address_dto::*;
24use super::generator_utils::*;
25use super::state_header_builder::*;
26
27#[derive(Debug, Clone)]
29pub struct MultisigEntryBuilder {
30 super_object: StateHeaderBuilder,
32 min_approval: u32,
34 min_removal: u32,
36 account_address: AddressDto,
38 cosignatory_addresses: Vec<AddressDto>,
40 multisig_addresses: Vec<AddressDto>,
42}
43
44
45impl MultisigEntryBuilder {
46 pub fn from_binary(_bytes: &[u8]) -> Self {
51 let super_object = StateHeaderBuilder::from_binary(_bytes);
52 let mut _bytes = _bytes[super_object.get_size()..].to_vec();
53 let buf = fixed_bytes::<4>(&_bytes);
54 let min_approval = u32::from_le_bytes(buf); let _bytes = (&_bytes[4..]).to_vec();
56 let buf = fixed_bytes::<4>(&_bytes);
57 let min_removal = u32::from_le_bytes(buf); let _bytes = (&_bytes[4..]).to_vec();
59 let account_address = AddressDto::from_binary(&_bytes); let mut _bytes = _bytes[account_address.get_size()..].to_vec();
61 let buf = fixed_bytes::<8>(&_bytes);
62 let cosignatoryAddressesCount = u64::from_le_bytes(buf); let mut _bytes = (&_bytes[8..]).to_vec();
64 let mut cosignatory_addresses: Vec<AddressDto> = vec![]; let mut _bytes = _bytes.to_vec();
66 for _ in 0..cosignatoryAddressesCount {
67 let item = AddressDto::from_binary(&_bytes);
68 cosignatory_addresses.push(item.clone());
69 _bytes = (&_bytes[item.get_size()..]).to_vec();
70 }
71 let buf = fixed_bytes::<8>(&_bytes);
72 let multisigAddressesCount = u64::from_le_bytes(buf); let mut _bytes = (&_bytes[8..]).to_vec();
74 let mut multisig_addresses: Vec<AddressDto> = vec![]; let mut _bytes = _bytes.to_vec();
76 for _ in 0..multisigAddressesCount {
77 let item = AddressDto::from_binary(&_bytes);
78 multisig_addresses.push(item.clone());
79 _bytes = (&_bytes[item.get_size()..]).to_vec();
80 }
81 MultisigEntryBuilder { super_object, min_approval, min_removal, account_address, cosignatory_addresses, multisig_addresses }
82 }
83
84 pub fn get_min_approval(&self) -> u32 {
89 self.min_approval.clone()
90 }
91
92 pub fn get_min_removal(&self) -> u32 {
97 self.min_removal.clone()
98 }
99
100 pub fn get_account_address(&self) -> AddressDto {
105 self.account_address.clone()
106 }
107
108 pub fn get_cosignatory_addresses(&self) -> Vec<AddressDto> {
113 self.cosignatory_addresses.clone() }
115
116 pub fn get_multisig_addresses(&self) -> Vec<AddressDto> {
121 self.multisig_addresses.clone() }
123
124 pub fn get_size(&self) -> usize {
129 let mut size = self.super_object.get_size();
130 size += 4; size += 4; size += self.account_address.get_size(); size += 8; size += self.cosignatory_addresses.iter().map(|item| item.get_size()).sum::<usize>(); size += 8; size += self.multisig_addresses.iter().map(|item| item.get_size()).sum::<usize>(); size
138 }
139
140 pub fn serializer(&self) -> Vec<u8> {
145 let mut buf: Vec<u8> = vec![];
146 buf.append(&mut self.super_object.serializer());
147 buf.append(&mut self.get_min_approval().to_le_bytes().to_vec()); buf.append(&mut self.get_min_removal().to_le_bytes().to_vec()); buf.append(&mut self.account_address.serializer()); buf.append(&mut (self.get_cosignatory_addresses().len() as u64).to_le_bytes().to_vec()); for i in &self.cosignatory_addresses {
152 buf.append(&mut i.serializer()); }
154 buf.append(&mut (self.get_multisig_addresses().len() as u64).to_le_bytes().to_vec()); for i in &self.multisig_addresses {
156 buf.append(&mut i.serializer()); }
158 buf
159 }
160}
161