openzeppelin_relayer/models/
address.rs1use std::fmt;
2
3#[derive(Debug, Clone, PartialEq, Eq)]
4#[allow(dead_code)]
5pub enum Address {
6 Evm([u8; 20]),
8 Stellar(String),
10 Solana(String),
12}
13
14impl fmt::Display for Address {
15 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
16 match self {
17 Address::Evm(addr) => write!(f, "0x{}", hex::encode(addr)),
18 Address::Stellar(addr) => write!(f, "{}", addr),
19 Address::Solana(addr) => write!(f, "{}", addr),
20 }
21 }
22}
23
24impl Address {
25 #[allow(dead_code)]
27 pub fn validate(&self) -> bool {
28 match self {
29 Address::Evm(addr) => addr.len() == 20,
30 Address::Stellar(addr) => {
31 addr.len() <= 56 && addr.chars().all(|c| c.is_ascii_alphanumeric() || c == '=')
32 }
33 Address::Solana(addr) => {
34 addr.len() <= 44 && addr.chars().all(|c| c.is_ascii_alphanumeric())
35 }
36 }
37 }
38}
39
40#[cfg(test)]
41mod tests {
42 use super::*;
43
44 #[test]
45 fn test_evm_address_display() {
46 let address = Address::Evm([
47 200, 52, 220, 220, 154, 7, 77, 187, 173, 204, 113, 88, 71, 137, 174, 75, 70, 61, 177,
48 22,
49 ]);
50 assert_eq!(
51 address.to_string(),
52 "0xc834dcdc9a074dbbadcc71584789ae4b463db116"
53 );
54 }
55}