snarkvm_synthesizer/vm/helpers/
macros.rs1#[macro_export]
18macro_rules! cast_ref {
19 (($variable:expr) as $object:ident<$($traits:path),+>) => {{
21 (&$variable as &dyn std::any::Any)
22 .downcast_ref::<$object<$($traits),+>>()
23 .ok_or_else(|| anyhow!("Failed to downcast {}", stringify!($variable)))?
24 }};
25 ($variable:ident as $object:ident<$($traits:path),+>) => {{
27 (&$variable as &dyn std::any::Any)
28 .downcast_ref::<$object<$($traits),+>>()
29 .ok_or_else(|| anyhow!("Failed to downcast {}", stringify!($variable)))?
30 }};
31 (&$variable:ident as $object:ident<$($traits:path),+>) => {{
33 ($variable as &dyn std::any::Any)
34 .downcast_ref::<$object<$($traits),+>>()
35 .ok_or_else(|| anyhow!("Failed to downcast {}", stringify!($variable)))?
36 }};
37}
38
39#[macro_export]
41macro_rules! cast_mut_ref {
42 (($variable:expr) as $object:ident<$($traits:path),+>) => {{
44 (&mut $variable as &mut dyn std::any::Any)
45 .downcast_mut::<$object<$($traits),+>>()
46 .ok_or_else(|| anyhow!("Failed to downcast mut {}", stringify!($variable)))?
47 }};
48 ($variable:ident as $object:ident<$($traits:path),+>) => {{
50 (&mut $variable as &mut dyn std::any::Any)
51 .downcast_mut::<$object<$($traits),+>>()
52 .ok_or_else(|| anyhow!("Failed to downcast mut {}", stringify!($variable)))?
53 }};
54}
55
56#[macro_export]
58macro_rules! convert {
59 ($logic:ident) => {{
61 match N::ID {
62 console::network::MainnetV0::ID => {
63 $logic!(console::network::MainnetV0, circuit::AleoV0)
65 }
66 console::network::TestnetV0::ID => {
67 $logic!(console::network::TestnetV0, circuit::AleoTestnetV0)
69 }
70 console::network::CanaryV0::ID => {
71 $logic!(console::network::CanaryV0, circuit::AleoCanaryV0)
73 }
74 _ => bail!("Unsupported VM configuration for network: {}", N::ID),
75 }
76 }};
77}
78
79#[macro_export]
81macro_rules! process {
82 ($self:ident, $logic:ident) => {{
84 match N::ID {
85 console::network::MainnetV0::ID => {
86 let process = (&$self.process as &dyn std::any::Any)
88 .downcast_ref::<Arc<RwLock<Process<console::network::MainnetV0>>>>()
89 .ok_or_else(|| anyhow!("Failed to downcast {}", stringify!($self.process)))?;
90 $logic!(process.read(), console::network::MainnetV0, circuit::AleoV0)
92 }
93 console::network::TestnetV0::ID => {
94 let process = (&$self.process as &dyn std::any::Any)
96 .downcast_ref::<Arc<RwLock<Process<console::network::TestnetV0>>>>()
97 .ok_or_else(|| anyhow!("Failed to downcast {}", stringify!($self.process)))?;
98 $logic!(process.read(), console::network::TestnetV0, circuit::AleoTestnetV0)
100 }
101 console::network::CanaryV0::ID => {
102 let process = (&$self.process as &dyn std::any::Any)
104 .downcast_ref::<Arc<RwLock<Process<console::network::CanaryV0>>>>()
105 .ok_or_else(|| anyhow!("Failed to downcast {}", stringify!($self.process)))?;
106 $logic!(process.read(), console::network::CanaryV0, circuit::AleoCanaryV0)
108 }
109 _ => bail!("Unsupported VM configuration for network: {}", N::ID),
110 }
111 }};
112}