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 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}