waves_rust/model/transaction/
create_alias_transaction.rs1use 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}