sub_meta_api/models/
collator.rs

1use std::error::Error;
2use subxt::utils::AccountId32;
3use sp_core::crypto::AccountId32 as SP_AccountId32;
4use sp_core::crypto::{Ss58AddressFormat, Ss58Codec};
5
6
7use crate::errors::account;
8
9#[derive(Clone)]
10#[derive(PartialEq)]
11pub struct Collator{
12    pub address: Option<AccountId32>,
13    pub bond:Option<u128>,
14    invulnerable: Option<bool>,
15}
16
17impl Collator {
18    pub fn new() -> Collator {
19        Collator{
20            address: None,
21            bond: None,
22            invulnerable: None,
23        }
24    }
25    
26    /*
27        Builders
28    */
29    pub fn set_address(mut self, address: AccountId32) -> Collator {
30        self.address = Some(address);
31        self
32    }
33    
34    pub fn set_bond(mut self, bond:u128) -> Collator {
35        self.bond = Some(bond);
36        self
37    }
38
39    pub fn get_bond(&self) -> u128 {
40        match self.bond{
41            None => {
42                0
43            }
44            Some(bonded_amount) => {
45                bonded_amount
46            }
47        }
48    }
49
50    pub fn set_invulnerable(mut self, invulnerable: bool) -> Collator {
51        self.invulnerable = Some(invulnerable);
52        self
53    }
54    pub fn get_formatted_address(&self, prefix:u16)-> Result<String, Box<dyn Error>>{
55        
56        match self.clone().address{
57            Some(verified_address) => {
58                let result = SP_AccountId32::new(verified_address.0)
59                    .to_ss58check_with_version(
60                        Ss58AddressFormat::custom(prefix)
61                    );
62                
63                Ok(result)
64            },
65            None => {
66                Err(account::NoAccountSet::new("collator").into())
67            }
68        }
69
70    }
71
72    pub fn is_invulnerable(&self) -> Result<bool, Box<dyn Error>> {
73        match self.clone().invulnerable {
74            Some(invulnerable) => {
75                Ok(invulnerable)
76            },
77            None => {
78                Err(account::NoAccountSet::new("").into())
79            }
80        }
81    }
82
83}