waves_rust/model/rs/
alias.rs1use crate::error::{Error, Result};
2use crate::model::Alias;
3use crate::util::JsonDeserializer;
4use serde_json::Value;
5
6#[derive(Clone, Eq, PartialEq, Debug)]
7pub struct AliasesByAddressResponse {
8 aliases: Vec<Alias>,
9}
10
11impl AliasesByAddressResponse {
12 pub fn new(aliases: Vec<Alias>) -> Self {
13 Self { aliases }
14 }
15
16 pub fn aliases(&self) -> Vec<Alias> {
17 self.aliases.clone()
18 }
19}
20
21impl TryFrom<&Value> for AliasesByAddressResponse {
22 type Error = Error;
23
24 fn try_from(value: &Value) -> Result<Self> {
25 let vec: Vec<String> = JsonDeserializer::safe_to_array(value)?
26 .iter()
27 .filter_map(|alias| alias.as_str())
28 .map(|alias| alias.to_owned())
29 .collect();
30
31 return if vec.is_empty() {
32 Ok(AliasesByAddressResponse { aliases: vec![] })
33 } else {
34 let chain_id = Alias::chain_id(vec[0].as_str().to_owned());
35 let aliases = vec
36 .iter()
37 .map(|alias| Alias::new(chain_id, alias))
38 .collect::<Result<Vec<Alias>>>()?;
39 Ok(AliasesByAddressResponse { aliases })
40 };
41 }
42}
43
44#[cfg(test)]
45mod tests {
46 use crate::model::AliasesByAddressResponse;
47 use serde_json::Value;
48 use std::borrow::Borrow;
49 use std::fs;
50
51 #[test]
52 pub fn aliases_by_address_response() {
53 let data = fs::read_to_string("./tests/resources/alias/aliases_by_address_rs.json")
54 .expect("Unable to read file");
55 let json: Value = serde_json::from_str(&data).expect("failed to generate json from str");
56
57 let aliases_by_address: AliasesByAddressResponse = json.borrow().try_into().unwrap();
58
59 let aliases = aliases_by_address.aliases();
60 assert_eq!(aliases.len(), 3);
61
62 let alias1 = &aliases[0];
63 assert_eq!("alias:T:alias1662650000377", alias1.full_name());
64 assert_eq!("alias1662650000377", alias1.name());
65 let alias2 = &aliases[1];
66 assert_eq!("alias:T:alias2662650000377", alias2.full_name());
67 assert_eq!("alias2662650000377", alias2.name());
68 let alias3 = &aliases[2];
69 assert_eq!("alias:T:alias3662650000377", alias3.full_name());
70 assert_eq!("alias3662650000377", alias3.name());
71 }
72}