iota_types/stardust/output/
alias.rs1use iota_sdk_types::{Address, Identifier, ObjectData, StructTag};
5use serde::{Deserialize, Serialize};
6use serde_with::serde_as;
7
8use crate::{balance::Balance, collection_types::Bag, error::IotaError, id::UID, object::Object};
9
10pub const ALIAS_OUTPUT_MODULE_NAME: Identifier = Identifier::from_static("alias_output");
11pub const ALIAS_OUTPUT_STRUCT_NAME: Identifier = Identifier::from_static("AliasOutput");
12pub const ALIAS_DYNAMIC_OBJECT_FIELD_KEY: &[u8] = b"alias";
13pub const ALIAS_DYNAMIC_OBJECT_FIELD_KEY_TYPE: &str = "vector<u8>";
14
15#[serde_as]
16#[derive(Debug, Serialize, Deserialize, Clone, Eq, PartialEq)]
17pub struct Alias {
18 pub id: UID,
21
22 pub legacy_state_controller: Address,
24 pub state_index: u32,
26 pub state_metadata: Option<Vec<u8>>,
28
29 pub sender: Option<Address>,
31 pub metadata: Option<Vec<u8>>,
33
34 pub immutable_issuer: Option<Address>,
36 pub immutable_metadata: Option<Vec<u8>>,
38}
39
40#[serde_as]
41#[derive(Debug, Serialize, Deserialize, Clone, Eq, PartialEq)]
42pub struct AliasOutput {
43 pub id: UID,
45
46 pub balance: Balance,
48 pub native_tokens: Bag,
52}
53
54impl AliasOutput {
55 pub fn from_bcs_bytes(content: &[u8]) -> Result<Self, IotaError> {
57 bcs::from_bytes(content).map_err(|err| IotaError::ObjectDeserialization {
58 error: format!("Unable to deserialize AliasOutput object: {err:?}"),
59 })
60 }
61
62 pub fn is_alias_output(s: &StructTag) -> bool {
63 s.address() == Address::STARDUST
64 && s.module() == &ALIAS_OUTPUT_MODULE_NAME
65 && s.name() == &ALIAS_OUTPUT_STRUCT_NAME
66 }
67}
68
69impl TryFrom<&Object> for AliasOutput {
70 type Error = IotaError;
71 fn try_from(object: &Object) -> Result<Self, Self::Error> {
72 match &object.data {
73 ObjectData::Struct(o) => {
74 if AliasOutput::is_alias_output(o.struct_tag()) {
75 return AliasOutput::from_bcs_bytes(o.contents());
76 }
77 }
78 ObjectData::Package(_) => {}
79 }
80
81 Err(IotaError::Type {
82 error: format!("Object type is not an AliasOutput: {object:?}"),
83 })
84 }
85}