waves_rust/model/transaction/action/
issue_action.rs1use crate::error::{Error, Result};
2use crate::model::{AssetId, Base64String};
3use crate::util::JsonDeserializer;
4use serde_json::Value;
5
6#[derive(Eq, PartialEq, Clone, Debug)]
7pub struct IssueAction {
8 asset_id: AssetId,
9 name: String,
10 description: String,
11 quantity: u64,
12 decimals: u32,
13 reissuable: bool,
14 script: Base64String,
15 nonce: u32,
16}
17
18#[allow(clippy::too_many_arguments)]
19impl IssueAction {
20 pub fn new(
21 asset_id: AssetId,
22 name: String,
23 description: String,
24 quantity: u64,
25 decimals: u32,
26 reissuable: bool,
27 script: Base64String,
28 nonce: u32,
29 ) -> Self {
30 Self {
31 asset_id,
32 name,
33 description,
34 quantity,
35 decimals,
36 reissuable,
37 script,
38 nonce,
39 }
40 }
41
42 pub fn asset_id(&self) -> AssetId {
43 self.asset_id.clone()
44 }
45
46 pub fn name(&self) -> String {
47 self.name.clone()
48 }
49
50 pub fn description(&self) -> String {
51 self.description.clone()
52 }
53
54 pub fn quantity(&self) -> u64 {
55 self.quantity
56 }
57
58 pub fn decimals(&self) -> u32 {
59 self.decimals
60 }
61
62 pub fn is_reissuable(&self) -> bool {
63 self.reissuable
64 }
65
66 pub fn script(&self) -> Base64String {
67 self.script.clone()
68 }
69
70 pub fn nonce(&self) -> u32 {
71 self.nonce
72 }
73}
74
75impl TryFrom<&Value> for IssueAction {
76 type Error = Error;
77
78 fn try_from(value: &Value) -> Result<Self> {
79 let asset_id = JsonDeserializer::safe_to_string_from_field(value, "assetId")?;
80 let name = JsonDeserializer::safe_to_string_from_field(value, "name")?;
81 let description = JsonDeserializer::safe_to_string_from_field(value, "description")?;
82 let quantity = JsonDeserializer::safe_to_int_from_field(value, "quantity")?;
83 let decimals = JsonDeserializer::safe_to_int_from_field(value, "decimals")?;
84 let reissuable = JsonDeserializer::safe_to_boolean_from_field(value, "isReissuable")?;
85 let script = JsonDeserializer::safe_to_string_from_field(value, "compiledScript")
86 .unwrap_or_else(|_| "".to_owned());
87 let nonce = JsonDeserializer::safe_to_int_from_field(value, "nonce")?;
88
89 Ok(IssueAction {
90 asset_id: AssetId::from_string(&asset_id)?,
91 name,
92 description,
93 quantity: quantity as u64,
94 decimals: decimals as u32,
95 reissuable,
96 script: Base64String::from_string(&script)?,
97 nonce: nonce as u32,
98 })
99 }
100}