waves_rust/model/transaction/action/
issue_action.rs

1use 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}