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 set_invulnerable(mut self, invulnerable: bool) -> Collator {
40        self.invulnerable = Some(invulnerable);
41        self
42    }
43    pub fn get_formatted_address(&self, prefix:u16)-> Result<String, Box<dyn Error>>{
44        
45        match self.clone().address{
46            Some(verified_address) => {
47                let result = SP_AccountId32::new(verified_address.0)
48                    .to_ss58check_with_version(
49                        Ss58AddressFormat::custom(prefix)
50                    );
51                
52                Ok(result)
53            },
54            None => {
55                Err(account::NoAccountSet::new("collator").into())
56            }
57        }
58
59    }
60
61    pub fn is_invulnerable(&self) -> Result<bool, Box<dyn Error>> {
62        match self.clone().invulnerable {
63            Some(invulnerable) => {
64                Ok(invulnerable)
65            },
66            None => {
67                Err(account::NoAccountSet::new("").into())
68            }
69        }
70    }
71    
72}