iota_types/stardust/output/
unlock_conditions.rs1use iota_stardust_sdk::types::block::address::Address;
5use schemars::JsonSchema;
6use serde::{Deserialize, Serialize};
7use serde_with::serde_as;
8
9use crate::{base_types::IotaAddress, stardust::stardust_to_iota_address};
10
11#[serde_as]
13#[derive(Debug, Serialize, Deserialize, Clone, Eq, PartialEq, JsonSchema)]
14pub struct ExpirationUnlockCondition {
15 pub owner: IotaAddress,
17 pub return_address: IotaAddress,
20 pub unix_time: u32,
23}
24
25impl ExpirationUnlockCondition {
26 pub(crate) fn new(
27 owner_address: &Address,
28 expiration_unlock_condition: &iota_stardust_sdk::types::block::output::unlock_condition::ExpirationUnlockCondition,
29 ) -> anyhow::Result<Self> {
30 let owner = stardust_to_iota_address(owner_address)?;
31 let return_address =
32 stardust_to_iota_address(expiration_unlock_condition.return_address())?;
33 let unix_time = expiration_unlock_condition.timestamp();
34
35 Ok(Self {
36 owner,
37 return_address,
38 unix_time,
39 })
40 }
41}
42
43#[serde_as]
45#[derive(Debug, Serialize, Deserialize, Clone, Eq, PartialEq, JsonSchema)]
46pub struct StorageDepositReturnUnlockCondition {
47 pub return_address: IotaAddress,
50 pub return_amount: u64,
53}
54
55impl TryFrom<&iota_stardust_sdk::types::block::output::unlock_condition::StorageDepositReturnUnlockCondition>
56 for StorageDepositReturnUnlockCondition
57{
58 type Error = anyhow::Error;
59
60 fn try_from(
61 unlock: &iota_stardust_sdk::types::block::output::unlock_condition::StorageDepositReturnUnlockCondition,
62 ) -> Result<Self, Self::Error> {
63 let return_address = unlock.return_address().to_string().parse()?;
64 let return_amount = unlock.amount();
65 Ok(Self {
66 return_address,
67 return_amount,
68 })
69 }
70}
71
72#[serde_as]
74#[derive(Debug, Serialize, Deserialize, Clone, Eq, PartialEq, JsonSchema)]
75pub struct TimelockUnlockCondition {
76 pub unix_time: u32,
79}
80
81impl From<&iota_stardust_sdk::types::block::output::unlock_condition::TimelockUnlockCondition>
82 for TimelockUnlockCondition
83{
84 fn from(
85 unlock: &iota_stardust_sdk::types::block::output::unlock_condition::TimelockUnlockCondition,
86 ) -> Self {
87 Self {
88 unix_time: unlock.timestamp(),
89 }
90 }
91}