ibc_relayer_types/
signer.rs

1use std::str::FromStr;
2
3use derive_more::Display;
4use flex_error::define_error;
5use serde::{Deserialize, Serialize};
6
7define_error! {
8    #[derive(Debug, PartialEq, Eq)]
9    SignerError {
10        EmptySigner
11            | _ | { "signer cannot be empty" },
12    }
13}
14
15#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize, Display)]
16pub struct Signer(String);
17
18impl Signer {
19    pub fn dummy() -> Self {
20        Self("cosmos000000000000000000000000000000000000000".to_string())
21    }
22}
23
24impl FromStr for Signer {
25    type Err = SignerError;
26
27    fn from_str(s: &str) -> Result<Self, Self::Err> {
28        let s = s.to_string();
29        if s.trim().is_empty() {
30            return Err(SignerError::empty_signer());
31        }
32        Ok(Self(s))
33    }
34}
35
36impl AsRef<str> for Signer {
37    fn as_ref(&self) -> &str {
38        self.0.as_str()
39    }
40}