iota_genesis_builder/stardust/migration/verification/
created_objects.rs1use anyhow::{Result, anyhow, bail};
5use iota_types::base_types::ObjectID;
6
7#[derive(Default)]
10pub struct CreatedObjects {
11 output: Option<ObjectID>,
12 package: Option<ObjectID>,
13 coin: Option<ObjectID>,
14 native_token_coin: Option<ObjectID>,
15 native_tokens: Option<Vec<ObjectID>>,
16 coin_manager: Option<ObjectID>,
17 coin_manager_treasury_cap: Option<ObjectID>,
18}
19
20impl CreatedObjects {
21 pub fn output(&self) -> Result<&ObjectID> {
22 self.output
23 .as_ref()
24 .ok_or_else(|| anyhow!("no created output object"))
25 }
26
27 pub(crate) fn set_output(&mut self, id: ObjectID) -> Result<()> {
28 if let Some(id) = self.output {
29 bail!("output already set: {id}")
30 }
31 self.output.replace(id);
32 Ok(())
33 }
34
35 pub fn package(&self) -> Result<&ObjectID> {
36 self.package
37 .as_ref()
38 .ok_or_else(|| anyhow!("no created package object"))
39 }
40
41 pub(crate) fn set_package(&mut self, id: ObjectID) -> Result<()> {
42 if let Some(id) = self.package {
43 bail!("package already set: {id}")
44 }
45 self.package.replace(id);
46 Ok(())
47 }
48
49 pub fn coin(&self) -> Result<&ObjectID> {
50 self.coin
51 .as_ref()
52 .ok_or_else(|| anyhow!("no created coin object"))
53 }
54
55 pub(crate) fn set_coin(&mut self, id: ObjectID) -> Result<()> {
56 if let Some(id) = self.coin {
57 bail!("coin already set: {id}")
58 }
59 self.coin.replace(id);
60 Ok(())
61 }
62
63 pub fn native_token_coin(&self) -> Result<&ObjectID> {
64 self.native_token_coin
65 .as_ref()
66 .ok_or_else(|| anyhow!("no native token coin object"))
67 }
68
69 pub(crate) fn set_native_token_coin(&mut self, id: ObjectID) -> Result<()> {
70 if let Some(id) = self.native_token_coin {
71 bail!("native token coin already set: {id}")
72 }
73 self.native_token_coin.replace(id);
74 Ok(())
75 }
76
77 pub fn native_tokens(&self) -> Result<&[ObjectID]> {
78 self.native_tokens
79 .as_deref()
80 .ok_or_else(|| anyhow!("no created native token objects"))
81 }
82
83 pub(crate) fn set_native_tokens(&mut self, ids: Vec<ObjectID>) -> Result<()> {
84 if let Some(id) = &self.native_tokens {
85 bail!("native tokens already set: {id:?}")
86 }
87 self.native_tokens.replace(ids);
88 Ok(())
89 }
90
91 pub fn coin_manager(&self) -> Result<&ObjectID> {
92 self.coin_manager
93 .as_ref()
94 .ok_or_else(|| anyhow!("no created coin manager object"))
95 }
96
97 pub(crate) fn set_coin_manager(&mut self, id: ObjectID) -> Result<()> {
98 if let Some(id) = self.coin_manager {
99 bail!("coin manager already set: {id}")
100 }
101 self.coin_manager.replace(id);
102 Ok(())
103 }
104
105 pub fn coin_manager_treasury_cap(&self) -> Result<&ObjectID> {
106 self.coin_manager_treasury_cap
107 .as_ref()
108 .ok_or_else(|| anyhow!("no coin manager treasury cap object"))
109 }
110
111 pub(crate) fn set_coin_manager_treasury_cap(&mut self, id: ObjectID) -> Result<()> {
112 if let Some(id) = self.coin_manager_treasury_cap {
113 bail!("coin manager treasury cap already set: {id}")
114 }
115 self.coin_manager_treasury_cap.replace(id);
116 Ok(())
117 }
118}