sub_meta_api/models/
collator.rs1use 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 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}