waves_rust/model/transaction/
create_alias_transaction.rs

1use crate::error::{Error, Result};
2use crate::util::JsonDeserializer;
3use crate::waves_proto::CreateAliasTransactionData;
4use serde_json::{Map, Value};
5
6const TYPE: u8 = 10;
7
8#[derive(Clone, Eq, PartialEq, Debug)]
9pub struct CreateAliasTransactionInfo {
10    alias: String,
11}
12
13impl CreateAliasTransactionInfo {
14    pub fn new(alias: String) -> Self {
15        Self { alias }
16    }
17
18    pub fn alias(&self) -> String {
19        self.alias.clone()
20    }
21}
22
23impl TryFrom<&Value> for CreateAliasTransactionInfo {
24    type Error = Error;
25
26    fn try_from(value: &Value) -> Result<Self> {
27        let alias = JsonDeserializer::safe_to_string_from_field(value, "alias")?;
28
29        Ok(CreateAliasTransactionInfo { alias })
30    }
31}
32
33#[derive(Clone, Eq, PartialEq, Debug)]
34pub struct CreateAliasTransaction {
35    alias: String,
36}
37
38impl CreateAliasTransaction {
39    pub fn new(alias: String) -> Self {
40        Self { alias }
41    }
42
43    pub fn tx_type() -> u8 {
44        TYPE
45    }
46
47    pub fn alias(&self) -> String {
48        self.alias.clone()
49    }
50}
51
52impl TryFrom<&Value> for CreateAliasTransaction {
53    type Error = Error;
54
55    fn try_from(value: &Value) -> Result<Self> {
56        let alias = JsonDeserializer::safe_to_string_from_field(value, "alias")?;
57
58        Ok(CreateAliasTransaction { alias })
59    }
60}
61
62impl TryFrom<&CreateAliasTransaction> for Map<String, Value> {
63    type Error = Error;
64
65    fn try_from(value: &CreateAliasTransaction) -> Result<Self> {
66        let mut create_alias_tx_json = Map::new();
67        create_alias_tx_json.insert("alias".to_owned(), value.alias().into());
68        Ok(create_alias_tx_json)
69    }
70}
71
72impl TryFrom<&CreateAliasTransaction> for CreateAliasTransactionData {
73    type Error = Error;
74
75    fn try_from(value: &CreateAliasTransaction) -> Result<Self> {
76        Ok(CreateAliasTransactionData {
77            alias: value.alias(),
78        })
79    }
80}
81
82#[cfg(test)]
83mod tests {
84    use crate::error::Result;
85    use crate::model::{CreateAliasTransaction, CreateAliasTransactionInfo};
86    use crate::waves_proto::CreateAliasTransactionData;
87    use serde_json::{json, Map, Value};
88    use std::borrow::Borrow;
89    use std::fs;
90
91    #[test]
92    fn test_json_to_create_alias_transaction() {
93        let data = fs::read_to_string("./tests/resources/create_alias_rs.json")
94            .expect("Unable to read file");
95        let json: Value = serde_json::from_str(&data).expect("failed to generate json from str");
96
97        let create_alias_tx_from_json: CreateAliasTransactionInfo =
98            json.borrow().try_into().unwrap();
99
100        assert_eq!("alias1662650000377", create_alias_tx_from_json.alias())
101    }
102
103    #[test]
104    fn test_create_alias_transaction_to_proto() -> Result<()> {
105        let alias_transaction = &CreateAliasTransaction::new("alias".to_owned());
106        let proto: CreateAliasTransactionData = alias_transaction.try_into()?;
107        assert_eq!(alias_transaction.alias(), proto.alias);
108        Ok(())
109    }
110
111    #[test]
112    fn test_burn_transaction_to_json() -> Result<()> {
113        let alias_transaction = &CreateAliasTransaction::new("alias".to_owned());
114
115        let map: Map<String, Value> = alias_transaction.try_into()?;
116        let json: Value = map.into();
117        let expected_json = json!({
118            "alias": "alias"
119        });
120        assert_eq!(expected_json, json);
121        Ok(())
122    }
123}