1use crate::{ArrayType, AssociatedFunctionExpression, IntegerType, Type};
18
19use leo_span::{Symbol, sym};
20
21use snarkvm::{
22 prelude::LiteralType,
23 synthesizer::program::{CommitVariant, DeserializeVariant, ECDSAVerifyVariant, HashVariant, SerializeVariant},
24};
25
26#[derive(Clone, Debug, PartialEq, Eq)]
28pub enum CoreFunction {
29 ChaChaRand(LiteralType),
31 Commit(CommitVariant, LiteralType),
33 ECDSAVerify(ECDSAVerifyVariant),
35 Hash(HashVariant, Type),
37
38 Get,
40 Set,
41
42 MappingGetOrUse,
43 MappingRemove,
44 MappingContains,
45
46 OptionalUnwrap,
47 OptionalUnwrapOr,
48
49 VectorPush,
50 VectorLen,
51 VectorClear,
52 VectorPop,
53 VectorSwapRemove,
54
55 GroupToXCoordinate,
56 GroupToYCoordinate,
57
58 SignatureVerify,
60
61 FutureAwait,
62
63 ProgramChecksum,
64 ProgramEdition,
65 ProgramOwner,
66
67 Serialize(SerializeVariant),
68
69 Deserialize(DeserializeVariant, Type),
71
72 CheatCodePrintMapping,
73 CheatCodeSetBlockHeight,
74 CheatCodeSetBlockTimestamp,
75 CheatCodeSetSigner,
76}
77
78impl CoreFunction {
79 #[rustfmt::skip]
81 pub fn from_symbols(module: Symbol, function: Symbol) -> Option<Self> {
82 Some(match (module, function) {
83 (sym::ChaCha, sym::rand_address) => Self::ChaChaRand(LiteralType::Address),
84 (sym::ChaCha, sym::rand_bool) => Self::ChaChaRand(LiteralType::Boolean),
85 (sym::ChaCha, sym::rand_field) => Self::ChaChaRand(LiteralType::Field),
86 (sym::ChaCha, sym::rand_group) => Self::ChaChaRand(LiteralType::Group),
87 (sym::ChaCha, sym::rand_i8) => Self::ChaChaRand(LiteralType::I8),
88 (sym::ChaCha, sym::rand_i16) => Self::ChaChaRand(LiteralType::I16),
89 (sym::ChaCha, sym::rand_i32) => Self::ChaChaRand(LiteralType::I32),
90 (sym::ChaCha, sym::rand_i64) => Self::ChaChaRand(LiteralType::I64),
91 (sym::ChaCha, sym::rand_i128) => Self::ChaChaRand(LiteralType::I128),
92 (sym::ChaCha, sym::rand_u8) => Self::ChaChaRand(LiteralType::U8),
93 (sym::ChaCha, sym::rand_u16) => Self::ChaChaRand(LiteralType::U16),
94 (sym::ChaCha, sym::rand_u32) => Self::ChaChaRand(LiteralType::U32),
95 (sym::ChaCha, sym::rand_u64) => Self::ChaChaRand(LiteralType::U64),
96 (sym::ChaCha, sym::rand_u128) => Self::ChaChaRand(LiteralType::U128),
97 (sym::ChaCha, sym::rand_scalar) => Self::ChaChaRand(LiteralType::Scalar),
98
99 (sym::BHP256, sym::commit_to_address) => Self::Commit(CommitVariant::CommitBHP256, LiteralType::Address),
100 (sym::BHP256, sym::commit_to_field) => Self::Commit(CommitVariant::CommitBHP256, LiteralType::Field),
101 (sym::BHP256, sym::commit_to_group) => Self::Commit(CommitVariant::CommitBHP256, LiteralType::Group),
102 (sym::BHP512, sym::commit_to_address) => Self::Commit(CommitVariant::CommitBHP512, LiteralType::Address),
103 (sym::BHP512, sym::commit_to_field) => Self::Commit(CommitVariant::CommitBHP512, LiteralType::Field),
104 (sym::BHP512, sym::commit_to_group) => Self::Commit(CommitVariant::CommitBHP512, LiteralType::Group),
105 (sym::BHP768, sym::commit_to_address) => Self::Commit(CommitVariant::CommitBHP768, LiteralType::Address),
106 (sym::BHP768, sym::commit_to_field) => Self::Commit(CommitVariant::CommitBHP768, LiteralType::Field),
107 (sym::BHP768, sym::commit_to_group) => Self::Commit(CommitVariant::CommitBHP768, LiteralType::Group),
108 (sym::BHP1024, sym::commit_to_address) => Self::Commit(CommitVariant::CommitBHP1024, LiteralType::Address),
109 (sym::BHP1024, sym::commit_to_field) => Self::Commit(CommitVariant::CommitBHP1024, LiteralType::Field),
110 (sym::BHP1024, sym::commit_to_group) => Self::Commit(CommitVariant::CommitBHP1024, LiteralType::Group),
111 (sym::Pedersen64, sym::commit_to_address) => Self::Commit(CommitVariant::CommitPED64, LiteralType::Address),
112 (sym::Pedersen64, sym::commit_to_field) => Self::Commit(CommitVariant::CommitPED64, LiteralType::Field),
113 (sym::Pedersen64, sym::commit_to_group) => Self::Commit(CommitVariant::CommitPED64, LiteralType::Group),
114 (sym::Pedersen128, sym::commit_to_address) => Self::Commit(CommitVariant::CommitPED128, LiteralType::Address),
115 (sym::Pedersen128, sym::commit_to_field) => Self::Commit(CommitVariant::CommitPED128, LiteralType::Field),
116 (sym::Pedersen128, sym::commit_to_group) => Self::Commit(CommitVariant::CommitPED128, LiteralType::Group),
117
118 (sym::BHP256, sym::hash_to_address) => Self::Hash(HashVariant::HashBHP256, Type::Address),
119 (sym::BHP256, sym::hash_to_field) => Self::Hash(HashVariant::HashBHP256, Type::Field),
120 (sym::BHP256, sym::hash_to_group) => Self::Hash(HashVariant::HashBHP256, Type::Group),
121 (sym::BHP256, sym::hash_to_i8) => Self::Hash(HashVariant::HashBHP256, Type::Integer(IntegerType::I8)),
122 (sym::BHP256, sym::hash_to_i16) => Self::Hash(HashVariant::HashBHP256, Type::Integer(IntegerType::I16)),
123 (sym::BHP256, sym::hash_to_i32) => Self::Hash(HashVariant::HashBHP256, Type::Integer(IntegerType::I32)),
124 (sym::BHP256, sym::hash_to_i64) => Self::Hash(HashVariant::HashBHP256, Type::Integer(IntegerType::I64)),
125 (sym::BHP256, sym::hash_to_i128) => Self::Hash(HashVariant::HashBHP256, Type::Integer(IntegerType::I128)),
126 (sym::BHP256, sym::hash_to_u8) => Self::Hash(HashVariant::HashBHP256, Type::Integer(IntegerType::U8)),
127 (sym::BHP256, sym::hash_to_u16) => Self::Hash(HashVariant::HashBHP256, Type::Integer(IntegerType::U16)),
128 (sym::BHP256, sym::hash_to_u32) => Self::Hash(HashVariant::HashBHP256, Type::Integer(IntegerType::U32)),
129 (sym::BHP256, sym::hash_to_u64) => Self::Hash(HashVariant::HashBHP256, Type::Integer(IntegerType::U64)),
130 (sym::BHP256, sym::hash_to_u128) => Self::Hash(HashVariant::HashBHP256, Type::Integer(IntegerType::U128)),
131 (sym::BHP256, sym::hash_to_scalar) => Self::Hash(HashVariant::HashBHP256, Type::Scalar),
132 (sym::BHP256, sym::hash_to_address_raw) => Self::Hash(HashVariant::HashBHP256Raw, Type::Address),
133 (sym::BHP256, sym::hash_to_field_raw) => Self::Hash(HashVariant::HashBHP256Raw, Type::Field),
134 (sym::BHP256, sym::hash_to_group_raw) => Self::Hash(HashVariant::HashBHP256Raw, Type::Group),
135 (sym::BHP256, sym::hash_to_i8_raw) => Self::Hash(HashVariant::HashBHP256Raw, Type::Integer(IntegerType::I8)),
136 (sym::BHP256, sym::hash_to_i16_raw) => Self::Hash(HashVariant::HashBHP256Raw, Type::Integer(IntegerType::I16)),
137 (sym::BHP256, sym::hash_to_i32_raw) => Self::Hash(HashVariant::HashBHP256Raw, Type::Integer(IntegerType::I32)),
138 (sym::BHP256, sym::hash_to_i64_raw) => Self::Hash(HashVariant::HashBHP256Raw, Type::Integer(IntegerType::I64)),
139 (sym::BHP256, sym::hash_to_i128_raw) => Self::Hash(HashVariant::HashBHP256Raw, Type::Integer(IntegerType::I128)),
140 (sym::BHP256, sym::hash_to_u8_raw) => Self::Hash(HashVariant::HashBHP256Raw, Type::Integer(IntegerType::U8)),
141 (sym::BHP256, sym::hash_to_u16_raw) => Self::Hash(HashVariant::HashBHP256Raw, Type::Integer(IntegerType::U16)),
142 (sym::BHP256, sym::hash_to_u32_raw) => Self::Hash(HashVariant::HashBHP256Raw, Type::Integer(IntegerType::U32)),
143 (sym::BHP256, sym::hash_to_u64_raw) => Self::Hash(HashVariant::HashBHP256Raw, Type::Integer(IntegerType::U64)),
144 (sym::BHP256, sym::hash_to_u128_raw) => Self::Hash(HashVariant::HashBHP256Raw, Type::Integer(IntegerType::U128)),
145 (sym::BHP256, sym::hash_to_scalar_raw) => Self::Hash(HashVariant::HashBHP256Raw, Type::Scalar),
146
147 (sym::BHP512, sym::hash_to_address) => Self::Hash(HashVariant::HashBHP512, Type::Address),
148 (sym::BHP512, sym::hash_to_field) => Self::Hash(HashVariant::HashBHP512, Type::Field),
149 (sym::BHP512, sym::hash_to_group) => Self::Hash(HashVariant::HashBHP512, Type::Group),
150 (sym::BHP512, sym::hash_to_i8) => Self::Hash(HashVariant::HashBHP512, Type::Integer(IntegerType::I8)),
151 (sym::BHP512, sym::hash_to_i16) => Self::Hash(HashVariant::HashBHP512, Type::Integer(IntegerType::I16)),
152 (sym::BHP512, sym::hash_to_i32) => Self::Hash(HashVariant::HashBHP512, Type::Integer(IntegerType::I32)),
153 (sym::BHP512, sym::hash_to_i64) => Self::Hash(HashVariant::HashBHP512, Type::Integer(IntegerType::I64)),
154 (sym::BHP512, sym::hash_to_i128) => Self::Hash(HashVariant::HashBHP512, Type::Integer(IntegerType::I128)),
155 (sym::BHP512, sym::hash_to_u8) => Self::Hash(HashVariant::HashBHP512, Type::Integer(IntegerType::U8)),
156 (sym::BHP512, sym::hash_to_u16) => Self::Hash(HashVariant::HashBHP512, Type::Integer(IntegerType::U16)),
157 (sym::BHP512, sym::hash_to_u32) => Self::Hash(HashVariant::HashBHP512, Type::Integer(IntegerType::U32)),
158 (sym::BHP512, sym::hash_to_u64) => Self::Hash(HashVariant::HashBHP512, Type::Integer(IntegerType::U64)),
159 (sym::BHP512, sym::hash_to_u128) => Self::Hash(HashVariant::HashBHP512, Type::Integer(IntegerType::U128)),
160 (sym::BHP512, sym::hash_to_scalar) => Self::Hash(HashVariant::HashBHP512, Type::Scalar),
161 (sym::BHP512, sym::hash_to_address_raw) => Self::Hash(HashVariant::HashBHP512Raw, Type::Address),
162 (sym::BHP512, sym::hash_to_field_raw) => Self::Hash(HashVariant::HashBHP512Raw, Type::Field),
163 (sym::BHP512, sym::hash_to_group_raw) => Self::Hash(HashVariant::HashBHP512Raw, Type::Group),
164 (sym::BHP512, sym::hash_to_i8_raw) => Self::Hash(HashVariant::HashBHP512Raw, Type::Integer(IntegerType::I8)),
165 (sym::BHP512, sym::hash_to_i16_raw) => Self::Hash(HashVariant::HashBHP512Raw, Type::Integer(IntegerType::I16)),
166 (sym::BHP512, sym::hash_to_i32_raw) => Self::Hash(HashVariant::HashBHP512Raw, Type::Integer(IntegerType::I32)),
167 (sym::BHP512, sym::hash_to_i64_raw) => Self::Hash(HashVariant::HashBHP512Raw, Type::Integer(IntegerType::I64)),
168 (sym::BHP512, sym::hash_to_i128_raw) => Self::Hash(HashVariant::HashBHP512Raw, Type::Integer(IntegerType::I128)),
169 (sym::BHP512, sym::hash_to_u8_raw) => Self::Hash(HashVariant::HashBHP512Raw, Type::Integer(IntegerType::U8)),
170 (sym::BHP512, sym::hash_to_u16_raw) => Self::Hash(HashVariant::HashBHP512Raw, Type::Integer(IntegerType::U16)),
171 (sym::BHP512, sym::hash_to_u32_raw) => Self::Hash(HashVariant::HashBHP512Raw, Type::Integer(IntegerType::U32)),
172 (sym::BHP512, sym::hash_to_u64_raw) => Self::Hash(HashVariant::HashBHP512Raw, Type::Integer(IntegerType::U64)),
173 (sym::BHP512, sym::hash_to_u128_raw) => Self::Hash(HashVariant::HashBHP512Raw, Type::Integer(IntegerType::U128)),
174 (sym::BHP512, sym::hash_to_scalar_raw) => Self::Hash(HashVariant::HashBHP512Raw, Type::Scalar),
175
176 (sym::BHP768, sym::hash_to_address) => Self::Hash(HashVariant::HashBHP768, Type::Address),
177 (sym::BHP768, sym::hash_to_field) => Self::Hash(HashVariant::HashBHP768, Type::Field),
178 (sym::BHP768, sym::hash_to_group) => Self::Hash(HashVariant::HashBHP768, Type::Group),
179 (sym::BHP768, sym::hash_to_i8) => Self::Hash(HashVariant::HashBHP768, Type::Integer(IntegerType::I8)),
180 (sym::BHP768, sym::hash_to_i16) => Self::Hash(HashVariant::HashBHP768, Type::Integer(IntegerType::I16)),
181 (sym::BHP768, sym::hash_to_i32) => Self::Hash(HashVariant::HashBHP768, Type::Integer(IntegerType::I32)),
182 (sym::BHP768, sym::hash_to_i64) => Self::Hash(HashVariant::HashBHP768, Type::Integer(IntegerType::I64)),
183 (sym::BHP768, sym::hash_to_i128) => Self::Hash(HashVariant::HashBHP768, Type::Integer(IntegerType::I128)),
184 (sym::BHP768, sym::hash_to_u8) => Self::Hash(HashVariant::HashBHP768, Type::Integer(IntegerType::U8)),
185 (sym::BHP768, sym::hash_to_u16) => Self::Hash(HashVariant::HashBHP768, Type::Integer(IntegerType::U16)),
186 (sym::BHP768, sym::hash_to_u32) => Self::Hash(HashVariant::HashBHP768, Type::Integer(IntegerType::U32)),
187 (sym::BHP768, sym::hash_to_u64) => Self::Hash(HashVariant::HashBHP768, Type::Integer(IntegerType::U64)),
188 (sym::BHP768, sym::hash_to_u128) => Self::Hash(HashVariant::HashBHP768, Type::Integer(IntegerType::U128)),
189 (sym::BHP768, sym::hash_to_scalar) => Self::Hash(HashVariant::HashBHP768, Type::Scalar),
190 (sym::BHP768, sym::hash_to_address_raw) => Self::Hash(HashVariant::HashBHP768Raw, Type::Address),
191 (sym::BHP768, sym::hash_to_field_raw) => Self::Hash(HashVariant::HashBHP768Raw, Type::Field),
192 (sym::BHP768, sym::hash_to_group_raw) => Self::Hash(HashVariant::HashBHP768Raw, Type::Group),
193 (sym::BHP768, sym::hash_to_i8_raw) => Self::Hash(HashVariant::HashBHP768Raw, Type::Integer(IntegerType::I8)),
194 (sym::BHP768, sym::hash_to_i16_raw) => Self::Hash(HashVariant::HashBHP768Raw, Type::Integer(IntegerType::I16)),
195 (sym::BHP768, sym::hash_to_i32_raw) => Self::Hash(HashVariant::HashBHP768Raw, Type::Integer(IntegerType::I32)),
196 (sym::BHP768, sym::hash_to_i64_raw) => Self::Hash(HashVariant::HashBHP768Raw, Type::Integer(IntegerType::I64)),
197 (sym::BHP768, sym::hash_to_i128_raw) => Self::Hash(HashVariant::HashBHP768Raw, Type::Integer(IntegerType::I128)),
198 (sym::BHP768, sym::hash_to_u8_raw) => Self::Hash(HashVariant::HashBHP768Raw, Type::Integer(IntegerType::U8)),
199 (sym::BHP768, sym::hash_to_u16_raw) => Self::Hash(HashVariant::HashBHP768Raw, Type::Integer(IntegerType::U16)),
200 (sym::BHP768, sym::hash_to_u32_raw) => Self::Hash(HashVariant::HashBHP768Raw, Type::Integer(IntegerType::U32)),
201 (sym::BHP768, sym::hash_to_u64_raw) => Self::Hash(HashVariant::HashBHP768Raw, Type::Integer(IntegerType::U64)),
202 (sym::BHP768, sym::hash_to_u128_raw) => Self::Hash(HashVariant::HashBHP768Raw, Type::Integer(IntegerType::U128)),
203 (sym::BHP768, sym::hash_to_scalar_raw) => Self::Hash(HashVariant::HashBHP768Raw, Type::Scalar),
204
205 (sym::BHP1024, sym::hash_to_address) => Self::Hash(HashVariant::HashBHP1024, Type::Address),
206 (sym::BHP1024, sym::hash_to_field) => Self::Hash(HashVariant::HashBHP1024, Type::Field),
207 (sym::BHP1024, sym::hash_to_group) => Self::Hash(HashVariant::HashBHP1024, Type::Group),
208 (sym::BHP1024, sym::hash_to_i8) => Self::Hash(HashVariant::HashBHP1024, Type::Integer(IntegerType::I8)),
209 (sym::BHP1024, sym::hash_to_i16) => Self::Hash(HashVariant::HashBHP1024, Type::Integer(IntegerType::I16)),
210 (sym::BHP1024, sym::hash_to_i32) => Self::Hash(HashVariant::HashBHP1024, Type::Integer(IntegerType::I32)),
211 (sym::BHP1024, sym::hash_to_i64) => Self::Hash(HashVariant::HashBHP1024, Type::Integer(IntegerType::I64)),
212 (sym::BHP1024, sym::hash_to_i128) => Self::Hash(HashVariant::HashBHP1024, Type::Integer(IntegerType::I128)),
213 (sym::BHP1024, sym::hash_to_u8) => Self::Hash(HashVariant::HashBHP1024, Type::Integer(IntegerType::U8)),
214 (sym::BHP1024, sym::hash_to_u16) => Self::Hash(HashVariant::HashBHP1024, Type::Integer(IntegerType::U16)),
215 (sym::BHP1024, sym::hash_to_u32) => Self::Hash(HashVariant::HashBHP1024, Type::Integer(IntegerType::U32)),
216 (sym::BHP1024, sym::hash_to_u64) => Self::Hash(HashVariant::HashBHP1024, Type::Integer(IntegerType::U64)),
217 (sym::BHP1024, sym::hash_to_u128) => Self::Hash(HashVariant::HashBHP1024, Type::Integer(IntegerType::U128)),
218 (sym::BHP1024, sym::hash_to_scalar) => Self::Hash(HashVariant::HashBHP1024, Type::Scalar),
219 (sym::BHP1024, sym::hash_to_address_raw) => Self::Hash(HashVariant::HashBHP1024Raw, Type::Address),
220 (sym::BHP1024, sym::hash_to_field_raw) => Self::Hash(HashVariant::HashBHP1024Raw, Type::Field),
221 (sym::BHP1024, sym::hash_to_group_raw) => Self::Hash(HashVariant::HashBHP1024Raw, Type::Group),
222 (sym::BHP1024, sym::hash_to_i8_raw) => Self::Hash(HashVariant::HashBHP1024Raw, Type::Integer(IntegerType::I8)),
223 (sym::BHP1024, sym::hash_to_i16_raw) => Self::Hash(HashVariant::HashBHP1024Raw, Type::Integer(IntegerType::I16)),
224 (sym::BHP1024, sym::hash_to_i32_raw) => Self::Hash(HashVariant::HashBHP1024Raw, Type::Integer(IntegerType::I32)),
225 (sym::BHP1024, sym::hash_to_i64_raw) => Self::Hash(HashVariant::HashBHP1024Raw, Type::Integer(IntegerType::I64)),
226 (sym::BHP1024, sym::hash_to_i128_raw) => Self::Hash(HashVariant::HashBHP1024Raw, Type::Integer(IntegerType::I128)),
227 (sym::BHP1024, sym::hash_to_u8_raw) => Self::Hash(HashVariant::HashBHP1024Raw, Type::Integer(IntegerType::U8)),
228 (sym::BHP1024, sym::hash_to_u16_raw) => Self::Hash(HashVariant::HashBHP1024Raw, Type::Integer(IntegerType::U16)),
229 (sym::BHP1024, sym::hash_to_u32_raw) => Self::Hash(HashVariant::HashBHP1024Raw, Type::Integer(IntegerType::U32)),
230 (sym::BHP1024, sym::hash_to_u64_raw) => Self::Hash(HashVariant::HashBHP1024Raw, Type::Integer(IntegerType::U64)),
231 (sym::BHP1024, sym::hash_to_u128_raw) => Self::Hash(HashVariant::HashBHP1024Raw, Type::Integer(IntegerType::U128)),
232 (sym::BHP1024, sym::hash_to_scalar_raw) => Self::Hash(HashVariant::HashBHP1024Raw, Type::Scalar),
233
234 (sym::Keccak256, sym::hash_to_address) => Self::Hash(HashVariant::HashKeccak256, Type::Address),
235 (sym::Keccak256, sym::hash_to_field) => Self::Hash(HashVariant::HashKeccak256, Type::Field),
236 (sym::Keccak256, sym::hash_to_group) => Self::Hash(HashVariant::HashKeccak256, Type::Group),
237 (sym::Keccak256, sym::hash_to_i8) => Self::Hash(HashVariant::HashKeccak256, Type::Integer(IntegerType::I8)),
238 (sym::Keccak256, sym::hash_to_i16) => Self::Hash(HashVariant::HashKeccak256, Type::Integer(IntegerType::I16)),
239 (sym::Keccak256, sym::hash_to_i32) => Self::Hash(HashVariant::HashKeccak256, Type::Integer(IntegerType::I32)),
240 (sym::Keccak256, sym::hash_to_i64) => Self::Hash(HashVariant::HashKeccak256, Type::Integer(IntegerType::I64)),
241 (sym::Keccak256, sym::hash_to_i128) => Self::Hash(HashVariant::HashKeccak256, Type::Integer(IntegerType::I128)),
242 (sym::Keccak256, sym::hash_to_u8) => Self::Hash(HashVariant::HashKeccak256, Type::Integer(IntegerType::U8)),
243 (sym::Keccak256, sym::hash_to_u16) => Self::Hash(HashVariant::HashKeccak256, Type::Integer(IntegerType::U16)),
244 (sym::Keccak256, sym::hash_to_u32) => Self::Hash(HashVariant::HashKeccak256, Type::Integer(IntegerType::U32)),
245 (sym::Keccak256, sym::hash_to_u64) => Self::Hash(HashVariant::HashKeccak256, Type::Integer(IntegerType::U64)),
246 (sym::Keccak256, sym::hash_to_u128) => Self::Hash(HashVariant::HashKeccak256, Type::Integer(IntegerType::U128)),
247 (sym::Keccak256, sym::hash_to_scalar) => Self::Hash(HashVariant::HashKeccak256, Type::Scalar),
248 (sym::Keccak256, sym::hash_to_address_raw) => Self::Hash(HashVariant::HashKeccak256Raw, Type::Address),
249 (sym::Keccak256, sym::hash_to_field_raw) => Self::Hash(HashVariant::HashKeccak256Raw, Type::Field),
250 (sym::Keccak256, sym::hash_to_group_raw) => Self::Hash(HashVariant::HashKeccak256Raw, Type::Group),
251 (sym::Keccak256, sym::hash_to_i8_raw) => Self::Hash(HashVariant::HashKeccak256Raw, Type::Integer(IntegerType::I8)),
252 (sym::Keccak256, sym::hash_to_i16_raw) => Self::Hash(HashVariant::HashKeccak256Raw, Type::Integer(IntegerType::I16)),
253 (sym::Keccak256, sym::hash_to_i32_raw) => Self::Hash(HashVariant::HashKeccak256Raw, Type::Integer(IntegerType::I32)),
254 (sym::Keccak256, sym::hash_to_i64_raw) => Self::Hash(HashVariant::HashKeccak256Raw, Type::Integer(IntegerType::I64)),
255 (sym::Keccak256, sym::hash_to_i128_raw) => Self::Hash(HashVariant::HashKeccak256Raw, Type::Integer(IntegerType::I128)),
256 (sym::Keccak256, sym::hash_to_u8_raw) => Self::Hash(HashVariant::HashKeccak256Raw, Type::Integer(IntegerType::U8)),
257 (sym::Keccak256, sym::hash_to_u16_raw) => Self::Hash(HashVariant::HashKeccak256Raw, Type::Integer(IntegerType::U16)),
258 (sym::Keccak256, sym::hash_to_u32_raw) => Self::Hash(HashVariant::HashKeccak256Raw, Type::Integer(IntegerType::U32)),
259 (sym::Keccak256, sym::hash_to_u64_raw) => Self::Hash(HashVariant::HashKeccak256Raw, Type::Integer(IntegerType::U64)),
260 (sym::Keccak256, sym::hash_to_u128_raw) => Self::Hash(HashVariant::HashKeccak256Raw, Type::Integer(IntegerType::U128)),
261 (sym::Keccak256, sym::hash_to_scalar_raw) => Self::Hash(HashVariant::HashKeccak256Raw, Type::Scalar),
262 (sym::Keccak256, sym::hash_native) => Self::Hash(HashVariant::HashKeccak256Native, Type::Array(ArrayType::bit_array(256))),
263 (sym::Keccak256, sym::hash_native_raw) => Self::Hash(HashVariant::HashKeccak256NativeRaw, Type::Array(ArrayType::bit_array(256))),
264
265 (sym::Keccak384, sym::hash_to_address) => Self::Hash(HashVariant::HashKeccak384, Type::Address),
266 (sym::Keccak384, sym::hash_to_field) => Self::Hash(HashVariant::HashKeccak384, Type::Field),
267 (sym::Keccak384, sym::hash_to_group) => Self::Hash(HashVariant::HashKeccak384, Type::Group),
268 (sym::Keccak384, sym::hash_to_i8) => Self::Hash(HashVariant::HashKeccak384, Type::Integer(IntegerType::I8)),
269 (sym::Keccak384, sym::hash_to_i16) => Self::Hash(HashVariant::HashKeccak384, Type::Integer(IntegerType::I16)),
270 (sym::Keccak384, sym::hash_to_i32) => Self::Hash(HashVariant::HashKeccak384, Type::Integer(IntegerType::I32)),
271 (sym::Keccak384, sym::hash_to_i64) => Self::Hash(HashVariant::HashKeccak384, Type::Integer(IntegerType::I64)),
272 (sym::Keccak384, sym::hash_to_i128) => Self::Hash(HashVariant::HashKeccak384, Type::Integer(IntegerType::I128)),
273 (sym::Keccak384, sym::hash_to_u8) => Self::Hash(HashVariant::HashKeccak384, Type::Integer(IntegerType::U8)),
274 (sym::Keccak384, sym::hash_to_u16) => Self::Hash(HashVariant::HashKeccak384, Type::Integer(IntegerType::U16)),
275 (sym::Keccak384, sym::hash_to_u32) => Self::Hash(HashVariant::HashKeccak384, Type::Integer(IntegerType::U32)),
276 (sym::Keccak384, sym::hash_to_u64) => Self::Hash(HashVariant::HashKeccak384, Type::Integer(IntegerType::U64)),
277 (sym::Keccak384, sym::hash_to_u128) => Self::Hash(HashVariant::HashKeccak384, Type::Integer(IntegerType::U128)),
278 (sym::Keccak384, sym::hash_to_scalar) => Self::Hash(HashVariant::HashKeccak384, Type::Scalar),
279 (sym::Keccak384, sym::hash_to_address_raw) => Self::Hash(HashVariant::HashKeccak384Raw, Type::Address),
280 (sym::Keccak384, sym::hash_to_field_raw) => Self::Hash(HashVariant::HashKeccak384Raw, Type::Field),
281 (sym::Keccak384, sym::hash_to_group_raw) => Self::Hash(HashVariant::HashKeccak384Raw, Type::Group),
282 (sym::Keccak384, sym::hash_to_i8_raw) => Self::Hash(HashVariant::HashKeccak384Raw, Type::Integer(IntegerType::I8)),
283 (sym::Keccak384, sym::hash_to_i16_raw) => Self::Hash(HashVariant::HashKeccak384Raw, Type::Integer(IntegerType::I16)),
284 (sym::Keccak384, sym::hash_to_i32_raw) => Self::Hash(HashVariant::HashKeccak384Raw, Type::Integer(IntegerType::I32)),
285 (sym::Keccak384, sym::hash_to_i64_raw) => Self::Hash(HashVariant::HashKeccak384Raw, Type::Integer(IntegerType::I64)),
286 (sym::Keccak384, sym::hash_to_i128_raw) => Self::Hash(HashVariant::HashKeccak384Raw, Type::Integer(IntegerType::I128)),
287 (sym::Keccak384, sym::hash_to_u8_raw) => Self::Hash(HashVariant::HashKeccak384Raw, Type::Integer(IntegerType::U8)),
288 (sym::Keccak384, sym::hash_to_u16_raw) => Self::Hash(HashVariant::HashKeccak384Raw, Type::Integer(IntegerType::U16)),
289 (sym::Keccak384, sym::hash_to_u32_raw) => Self::Hash(HashVariant::HashKeccak384Raw, Type::Integer(IntegerType::U32)),
290 (sym::Keccak384, sym::hash_to_u64_raw) => Self::Hash(HashVariant::HashKeccak384Raw, Type::Integer(IntegerType::U64)),
291 (sym::Keccak384, sym::hash_to_u128_raw) => Self::Hash(HashVariant::HashKeccak384Raw, Type::Integer(IntegerType::U128)),
292 (sym::Keccak384, sym::hash_to_scalar_raw) => Self::Hash(HashVariant::HashKeccak384Raw, Type::Scalar),
293 (sym::Keccak384, sym::hash_native) => Self::Hash(HashVariant::HashKeccak384Native, Type::Array(ArrayType::bit_array(384))),
294 (sym::Keccak384, sym::hash_native_raw) => Self::Hash(HashVariant::HashKeccak384NativeRaw, Type::Array(ArrayType::bit_array(384))),
295
296 (sym::Keccak512, sym::hash_to_address) => Self::Hash(HashVariant::HashKeccak512, Type::Address),
297 (sym::Keccak512, sym::hash_to_field) => Self::Hash(HashVariant::HashKeccak512, Type::Field),
298 (sym::Keccak512, sym::hash_to_group) => Self::Hash(HashVariant::HashKeccak512, Type::Group),
299 (sym::Keccak512, sym::hash_to_i8) => Self::Hash(HashVariant::HashKeccak512, Type::Integer(IntegerType::I8)),
300 (sym::Keccak512, sym::hash_to_i16) => Self::Hash(HashVariant::HashKeccak512, Type::Integer(IntegerType::I16)),
301 (sym::Keccak512, sym::hash_to_i32) => Self::Hash(HashVariant::HashKeccak512, Type::Integer(IntegerType::I32)),
302 (sym::Keccak512, sym::hash_to_i64) => Self::Hash(HashVariant::HashKeccak512, Type::Integer(IntegerType::I64)),
303 (sym::Keccak512, sym::hash_to_i128) => Self::Hash(HashVariant::HashKeccak512, Type::Integer(IntegerType::I128)),
304 (sym::Keccak512, sym::hash_to_u8) => Self::Hash(HashVariant::HashKeccak512, Type::Integer(IntegerType::U8)),
305 (sym::Keccak512, sym::hash_to_u16) => Self::Hash(HashVariant::HashKeccak512, Type::Integer(IntegerType::U16)),
306 (sym::Keccak512, sym::hash_to_u32) => Self::Hash(HashVariant::HashKeccak512, Type::Integer(IntegerType::U32)),
307 (sym::Keccak512, sym::hash_to_u64) => Self::Hash(HashVariant::HashKeccak512, Type::Integer(IntegerType::U64)),
308 (sym::Keccak512, sym::hash_to_u128) => Self::Hash(HashVariant::HashKeccak512, Type::Integer(IntegerType::U128)),
309 (sym::Keccak512, sym::hash_to_scalar) => Self::Hash(HashVariant::HashKeccak512, Type::Scalar),
310 (sym::Keccak512, sym::hash_to_address_raw) => Self::Hash(HashVariant::HashKeccak512Raw, Type::Address),
311 (sym::Keccak512, sym::hash_to_field_raw) => Self::Hash(HashVariant::HashKeccak512Raw, Type::Field),
312 (sym::Keccak512, sym::hash_to_group_raw) => Self::Hash(HashVariant::HashKeccak512Raw, Type::Group),
313 (sym::Keccak512, sym::hash_to_i8_raw) => Self::Hash(HashVariant::HashKeccak512Raw, Type::Integer(IntegerType::I8)),
314 (sym::Keccak512, sym::hash_to_i16_raw) => Self::Hash(HashVariant::HashKeccak512Raw, Type::Integer(IntegerType::I16)),
315 (sym::Keccak512, sym::hash_to_i32_raw) => Self::Hash(HashVariant::HashKeccak512Raw, Type::Integer(IntegerType::I32)),
316 (sym::Keccak512, sym::hash_to_i64_raw) => Self::Hash(HashVariant::HashKeccak512Raw, Type::Integer(IntegerType::I64)),
317 (sym::Keccak512, sym::hash_to_i128_raw) => Self::Hash(HashVariant::HashKeccak512Raw, Type::Integer(IntegerType::I128)),
318 (sym::Keccak512, sym::hash_to_u8_raw) => Self::Hash(HashVariant::HashKeccak512Raw, Type::Integer(IntegerType::U8)),
319 (sym::Keccak512, sym::hash_to_u16_raw) => Self::Hash(HashVariant::HashKeccak512Raw, Type::Integer(IntegerType::U16)),
320 (sym::Keccak512, sym::hash_to_u32_raw) => Self::Hash(HashVariant::HashKeccak512Raw, Type::Integer(IntegerType::U32)),
321 (sym::Keccak512, sym::hash_to_u64_raw) => Self::Hash(HashVariant::HashKeccak512Raw, Type::Integer(IntegerType::U64)),
322 (sym::Keccak512, sym::hash_to_u128_raw) => Self::Hash(HashVariant::HashKeccak512Raw, Type::Integer(IntegerType::U128)),
323 (sym::Keccak512, sym::hash_to_scalar_raw) => Self::Hash(HashVariant::HashKeccak512Raw, Type::Scalar),
324 (sym::Keccak512, sym::hash_native) => Self::Hash(HashVariant::HashKeccak512Native, Type::Array(ArrayType::bit_array(512))),
325 (sym::Keccak512, sym::hash_native_raw) => Self::Hash(HashVariant::HashKeccak512NativeRaw, Type::Array(ArrayType::bit_array(512))),
326
327 (sym::Pedersen64, sym::hash_to_address) => Self::Hash(HashVariant::HashPED64, Type::Address),
328 (sym::Pedersen64, sym::hash_to_field) => Self::Hash(HashVariant::HashPED64, Type::Field),
329 (sym::Pedersen64, sym::hash_to_group) => Self::Hash(HashVariant::HashPED64, Type::Group),
330 (sym::Pedersen64, sym::hash_to_i8) => Self::Hash(HashVariant::HashPED64, Type::Integer(IntegerType::I8)),
331 (sym::Pedersen64, sym::hash_to_i16) => Self::Hash(HashVariant::HashPED64, Type::Integer(IntegerType::I16)),
332 (sym::Pedersen64, sym::hash_to_i32) => Self::Hash(HashVariant::HashPED64, Type::Integer(IntegerType::I32)),
333 (sym::Pedersen64, sym::hash_to_i64) => Self::Hash(HashVariant::HashPED64, Type::Integer(IntegerType::I64)),
334 (sym::Pedersen64, sym::hash_to_i128) => Self::Hash(HashVariant::HashPED64, Type::Integer(IntegerType::I128)),
335 (sym::Pedersen64, sym::hash_to_u8) => Self::Hash(HashVariant::HashPED64, Type::Integer(IntegerType::U8)),
336 (sym::Pedersen64, sym::hash_to_u16) => Self::Hash(HashVariant::HashPED64, Type::Integer(IntegerType::U16)),
337 (sym::Pedersen64, sym::hash_to_u32) => Self::Hash(HashVariant::HashPED64, Type::Integer(IntegerType::U32)),
338 (sym::Pedersen64, sym::hash_to_u64) => Self::Hash(HashVariant::HashPED64, Type::Integer(IntegerType::U64)),
339 (sym::Pedersen64, sym::hash_to_u128) => Self::Hash(HashVariant::HashPED64, Type::Integer(IntegerType::U128)),
340 (sym::Pedersen64, sym::hash_to_scalar) => Self::Hash(HashVariant::HashPED64, Type::Scalar),
341 (sym::Pedersen64, sym::hash_to_address_raw) => Self::Hash(HashVariant::HashPED64Raw, Type::Address),
342 (sym::Pedersen64, sym::hash_to_field_raw) => Self::Hash(HashVariant::HashPED64Raw, Type::Field),
343 (sym::Pedersen64, sym::hash_to_group_raw) => Self::Hash(HashVariant::HashPED64Raw, Type::Group),
344 (sym::Pedersen64, sym::hash_to_i8_raw) => Self::Hash(HashVariant::HashPED64Raw, Type::Integer(IntegerType::I8)),
345 (sym::Pedersen64, sym::hash_to_i16_raw) => Self::Hash(HashVariant::HashPED64Raw, Type::Integer(IntegerType::I16)),
346 (sym::Pedersen64, sym::hash_to_i32_raw) => Self::Hash(HashVariant::HashPED64Raw, Type::Integer(IntegerType::I32)),
347 (sym::Pedersen64, sym::hash_to_i64_raw) => Self::Hash(HashVariant::HashPED64Raw, Type::Integer(IntegerType::I64)),
348 (sym::Pedersen64, sym::hash_to_i128_raw) => Self::Hash(HashVariant::HashPED64Raw, Type::Integer(IntegerType::I128)),
349 (sym::Pedersen64, sym::hash_to_u8_raw) => Self::Hash(HashVariant::HashPED64Raw, Type::Integer(IntegerType::U8)),
350 (sym::Pedersen64, sym::hash_to_u16_raw) => Self::Hash(HashVariant::HashPED64Raw, Type::Integer(IntegerType::U16)),
351 (sym::Pedersen64, sym::hash_to_u32_raw) => Self::Hash(HashVariant::HashPED64Raw, Type::Integer(IntegerType::U32)),
352 (sym::Pedersen64, sym::hash_to_u64_raw) => Self::Hash(HashVariant::HashPED64Raw, Type::Integer(IntegerType::U64)),
353 (sym::Pedersen64, sym::hash_to_u128_raw) => Self::Hash(HashVariant::HashPED64Raw, Type::Integer(IntegerType::U128)),
354 (sym::Pedersen64, sym::hash_to_scalar_raw) => Self::Hash(HashVariant::HashPED64Raw, Type::Scalar),
355
356 (sym::Pedersen128, sym::hash_to_address) => Self::Hash(HashVariant::HashPED128, Type::Address),
357 (sym::Pedersen128, sym::hash_to_field) => Self::Hash(HashVariant::HashPED128, Type::Field),
358 (sym::Pedersen128, sym::hash_to_group) => Self::Hash(HashVariant::HashPED128, Type::Group),
359 (sym::Pedersen128, sym::hash_to_i8) => Self::Hash(HashVariant::HashPED128, Type::Integer(IntegerType::I8)),
360 (sym::Pedersen128, sym::hash_to_i16) => Self::Hash(HashVariant::HashPED128, Type::Integer(IntegerType::I16)),
361 (sym::Pedersen128, sym::hash_to_i32) => Self::Hash(HashVariant::HashPED128, Type::Integer(IntegerType::I32)),
362 (sym::Pedersen128, sym::hash_to_i64) => Self::Hash(HashVariant::HashPED128, Type::Integer(IntegerType::I64)),
363 (sym::Pedersen128, sym::hash_to_i128) => Self::Hash(HashVariant::HashPED128, Type::Integer(IntegerType::I128)),
364 (sym::Pedersen128, sym::hash_to_u8) => Self::Hash(HashVariant::HashPED128, Type::Integer(IntegerType::U8)),
365 (sym::Pedersen128, sym::hash_to_u16) => Self::Hash(HashVariant::HashPED128, Type::Integer(IntegerType::U16)),
366 (sym::Pedersen128, sym::hash_to_u32) => Self::Hash(HashVariant::HashPED128, Type::Integer(IntegerType::U32)),
367 (sym::Pedersen128, sym::hash_to_u64) => Self::Hash(HashVariant::HashPED128, Type::Integer(IntegerType::U64)),
368 (sym::Pedersen128, sym::hash_to_u128) => Self::Hash(HashVariant::HashPED128, Type::Integer(IntegerType::U128)),
369 (sym::Pedersen128, sym::hash_to_scalar) => Self::Hash(HashVariant::HashPED128, Type::Scalar),
370 (sym::Pedersen128, sym::hash_to_address_raw) => Self::Hash(HashVariant::HashPED128Raw, Type::Address),
371 (sym::Pedersen128, sym::hash_to_field_raw) => Self::Hash(HashVariant::HashPED128Raw, Type::Field),
372 (sym::Pedersen128, sym::hash_to_group_raw) => Self::Hash(HashVariant::HashPED128Raw, Type::Group),
373 (sym::Pedersen128, sym::hash_to_i8_raw) => Self::Hash(HashVariant::HashPED128Raw, Type::Integer(IntegerType::I8)),
374 (sym::Pedersen128, sym::hash_to_i16_raw) => Self::Hash(HashVariant::HashPED128Raw, Type::Integer(IntegerType::I16)),
375 (sym::Pedersen128, sym::hash_to_i32_raw) => Self::Hash(HashVariant::HashPED128Raw, Type::Integer(IntegerType::I32)),
376 (sym::Pedersen128, sym::hash_to_i64_raw) => Self::Hash(HashVariant::HashPED128Raw, Type::Integer(IntegerType::I64)),
377 (sym::Pedersen128, sym::hash_to_i128_raw) => Self::Hash(HashVariant::HashPED128Raw, Type::Integer(IntegerType::I128)),
378 (sym::Pedersen128, sym::hash_to_u8_raw) => Self::Hash(HashVariant::HashPED128Raw, Type::Integer(IntegerType::U8)),
379 (sym::Pedersen128, sym::hash_to_u16_raw) => Self::Hash(HashVariant::HashPED128Raw, Type::Integer(IntegerType::U16)),
380 (sym::Pedersen128, sym::hash_to_u32_raw) => Self::Hash(HashVariant::HashPED128Raw, Type::Integer(IntegerType::U32)),
381 (sym::Pedersen128, sym::hash_to_u64_raw) => Self::Hash(HashVariant::HashPED128Raw, Type::Integer(IntegerType::U64)),
382 (sym::Pedersen128, sym::hash_to_u128_raw) => Self::Hash(HashVariant::HashPED128Raw, Type::Integer(IntegerType::U128)),
383 (sym::Pedersen128, sym::hash_to_scalar_raw) => Self::Hash(HashVariant::HashPED128Raw, Type::Scalar),
384
385 (sym::Poseidon2, sym::hash_to_address) => Self::Hash(HashVariant::HashPSD2, Type::Address),
386 (sym::Poseidon2, sym::hash_to_field) => Self::Hash(HashVariant::HashPSD2, Type::Field),
387 (sym::Poseidon2, sym::hash_to_group) => Self::Hash(HashVariant::HashPSD2, Type::Group),
388 (sym::Poseidon2, sym::hash_to_i8) => Self::Hash(HashVariant::HashPSD2, Type::Integer(IntegerType::I8)),
389 (sym::Poseidon2, sym::hash_to_i16) => Self::Hash(HashVariant::HashPSD2, Type::Integer(IntegerType::I16)),
390 (sym::Poseidon2, sym::hash_to_i32) => Self::Hash(HashVariant::HashPSD2, Type::Integer(IntegerType::I32)),
391 (sym::Poseidon2, sym::hash_to_i64) => Self::Hash(HashVariant::HashPSD2, Type::Integer(IntegerType::I64)),
392 (sym::Poseidon2, sym::hash_to_i128) => Self::Hash(HashVariant::HashPSD2, Type::Integer(IntegerType::I128)),
393 (sym::Poseidon2, sym::hash_to_u8) => Self::Hash(HashVariant::HashPSD2, Type::Integer(IntegerType::U8)),
394 (sym::Poseidon2, sym::hash_to_u16) => Self::Hash(HashVariant::HashPSD2, Type::Integer(IntegerType::U16)),
395 (sym::Poseidon2, sym::hash_to_u32) => Self::Hash(HashVariant::HashPSD2, Type::Integer(IntegerType::U32)),
396 (sym::Poseidon2, sym::hash_to_u64) => Self::Hash(HashVariant::HashPSD2, Type::Integer(IntegerType::U64)),
397 (sym::Poseidon2, sym::hash_to_u128) => Self::Hash(HashVariant::HashPSD2, Type::Integer(IntegerType::U128)),
398 (sym::Poseidon2, sym::hash_to_scalar) => Self::Hash(HashVariant::HashPSD2, Type::Scalar),
399 (sym::Poseidon2, sym::hash_to_address_raw) => Self::Hash(HashVariant::HashPSD2Raw, Type::Address),
400 (sym::Poseidon2, sym::hash_to_field_raw) => Self::Hash(HashVariant::HashPSD2Raw, Type::Field),
401 (sym::Poseidon2, sym::hash_to_group_raw) => Self::Hash(HashVariant::HashPSD2Raw, Type::Group),
402 (sym::Poseidon2, sym::hash_to_i8_raw) => Self::Hash(HashVariant::HashPSD2Raw, Type::Integer(IntegerType::I8)),
403 (sym::Poseidon2, sym::hash_to_i16_raw) => Self::Hash(HashVariant::HashPSD2Raw, Type::Integer(IntegerType::I16)),
404 (sym::Poseidon2, sym::hash_to_i32_raw) => Self::Hash(HashVariant::HashPSD2Raw, Type::Integer(IntegerType::I32)),
405 (sym::Poseidon2, sym::hash_to_i64_raw) => Self::Hash(HashVariant::HashPSD2Raw, Type::Integer(IntegerType::I64)),
406 (sym::Poseidon2, sym::hash_to_i128_raw) => Self::Hash(HashVariant::HashPSD2Raw, Type::Integer(IntegerType::I128)),
407 (sym::Poseidon2, sym::hash_to_u8_raw) => Self::Hash(HashVariant::HashPSD2Raw, Type::Integer(IntegerType::U8)),
408 (sym::Poseidon2, sym::hash_to_u16_raw) => Self::Hash(HashVariant::HashPSD2Raw, Type::Integer(IntegerType::U16)),
409 (sym::Poseidon2, sym::hash_to_u32_raw) => Self::Hash(HashVariant::HashPSD2Raw, Type::Integer(IntegerType::U32)),
410 (sym::Poseidon2, sym::hash_to_u64_raw) => Self::Hash(HashVariant::HashPSD2Raw, Type::Integer(IntegerType::U64)),
411 (sym::Poseidon2, sym::hash_to_u128_raw) => Self::Hash(HashVariant::HashPSD2Raw, Type::Integer(IntegerType::U128)),
412 (sym::Poseidon2, sym::hash_to_scalar_raw) => Self::Hash(HashVariant::HashPSD2Raw, Type::Scalar),
413
414 (sym::Poseidon4, sym::hash_to_address) => Self::Hash(HashVariant::HashPSD4, Type::Address),
415 (sym::Poseidon4, sym::hash_to_field) => Self::Hash(HashVariant::HashPSD4, Type::Field),
416 (sym::Poseidon4, sym::hash_to_group) => Self::Hash(HashVariant::HashPSD4, Type::Group),
417 (sym::Poseidon4, sym::hash_to_i8) => Self::Hash(HashVariant::HashPSD4, Type::Integer(IntegerType::I8)),
418 (sym::Poseidon4, sym::hash_to_i16) => Self::Hash(HashVariant::HashPSD4, Type::Integer(IntegerType::I16)),
419 (sym::Poseidon4, sym::hash_to_i32) => Self::Hash(HashVariant::HashPSD4, Type::Integer(IntegerType::I32)),
420 (sym::Poseidon4, sym::hash_to_i64) => Self::Hash(HashVariant::HashPSD4, Type::Integer(IntegerType::I64)),
421 (sym::Poseidon4, sym::hash_to_i128) => Self::Hash(HashVariant::HashPSD4, Type::Integer(IntegerType::I128)),
422 (sym::Poseidon4, sym::hash_to_u8) => Self::Hash(HashVariant::HashPSD4, Type::Integer(IntegerType::U8)),
423 (sym::Poseidon4, sym::hash_to_u16) => Self::Hash(HashVariant::HashPSD4, Type::Integer(IntegerType::U16)),
424 (sym::Poseidon4, sym::hash_to_u32) => Self::Hash(HashVariant::HashPSD4, Type::Integer(IntegerType::U32)),
425 (sym::Poseidon4, sym::hash_to_u64) => Self::Hash(HashVariant::HashPSD4, Type::Integer(IntegerType::U64)),
426 (sym::Poseidon4, sym::hash_to_u128) => Self::Hash(HashVariant::HashPSD4, Type::Integer(IntegerType::U128)),
427 (sym::Poseidon4, sym::hash_to_scalar) => Self::Hash(HashVariant::HashPSD4, Type::Scalar),
428 (sym::Poseidon4, sym::hash_to_address_raw) => Self::Hash(HashVariant::HashPSD4Raw, Type::Address),
429 (sym::Poseidon4, sym::hash_to_field_raw) => Self::Hash(HashVariant::HashPSD4Raw, Type::Field),
430 (sym::Poseidon4, sym::hash_to_group_raw) => Self::Hash(HashVariant::HashPSD4Raw, Type::Group),
431 (sym::Poseidon4, sym::hash_to_i8_raw) => Self::Hash(HashVariant::HashPSD4Raw, Type::Integer(IntegerType::I8)),
432 (sym::Poseidon4, sym::hash_to_i16_raw) => Self::Hash(HashVariant::HashPSD4Raw, Type::Integer(IntegerType::I16)),
433 (sym::Poseidon4, sym::hash_to_i32_raw) => Self::Hash(HashVariant::HashPSD4Raw, Type::Integer(IntegerType::I32)),
434 (sym::Poseidon4, sym::hash_to_i64_raw) => Self::Hash(HashVariant::HashPSD4Raw, Type::Integer(IntegerType::I64)),
435 (sym::Poseidon4, sym::hash_to_i128_raw) => Self::Hash(HashVariant::HashPSD4Raw, Type::Integer(IntegerType::I128)),
436 (sym::Poseidon4, sym::hash_to_u8_raw) => Self::Hash(HashVariant::HashPSD4Raw, Type::Integer(IntegerType::U8)),
437 (sym::Poseidon4, sym::hash_to_u16_raw) => Self::Hash(HashVariant::HashPSD4Raw, Type::Integer(IntegerType::U16)),
438 (sym::Poseidon4, sym::hash_to_u32_raw) => Self::Hash(HashVariant::HashPSD4Raw, Type::Integer(IntegerType::U32)),
439 (sym::Poseidon4, sym::hash_to_u64_raw) => Self::Hash(HashVariant::HashPSD4Raw, Type::Integer(IntegerType::U64)),
440 (sym::Poseidon4, sym::hash_to_u128_raw) => Self::Hash(HashVariant::HashPSD4Raw, Type::Integer(IntegerType::U128)),
441 (sym::Poseidon4, sym::hash_to_scalar_raw) => Self::Hash(HashVariant::HashPSD4Raw, Type::Scalar),
442
443 (sym::Poseidon8, sym::hash_to_address) => Self::Hash(HashVariant::HashPSD8, Type::Address),
444 (sym::Poseidon8, sym::hash_to_field) => Self::Hash(HashVariant::HashPSD8, Type::Field),
445 (sym::Poseidon8, sym::hash_to_group) => Self::Hash(HashVariant::HashPSD8, Type::Group),
446 (sym::Poseidon8, sym::hash_to_i8) => Self::Hash(HashVariant::HashPSD8, Type::Integer(IntegerType::I8)),
447 (sym::Poseidon8, sym::hash_to_i16) => Self::Hash(HashVariant::HashPSD8, Type::Integer(IntegerType::I16)),
448 (sym::Poseidon8, sym::hash_to_i32) => Self::Hash(HashVariant::HashPSD8, Type::Integer(IntegerType::I32)),
449 (sym::Poseidon8, sym::hash_to_i64) => Self::Hash(HashVariant::HashPSD8, Type::Integer(IntegerType::I64)),
450 (sym::Poseidon8, sym::hash_to_i128) => Self::Hash(HashVariant::HashPSD8, Type::Integer(IntegerType::I128)),
451 (sym::Poseidon8, sym::hash_to_u8) => Self::Hash(HashVariant::HashPSD8, Type::Integer(IntegerType::U8)),
452 (sym::Poseidon8, sym::hash_to_u16) => Self::Hash(HashVariant::HashPSD8, Type::Integer(IntegerType::U16)),
453 (sym::Poseidon8, sym::hash_to_u32) => Self::Hash(HashVariant::HashPSD8, Type::Integer(IntegerType::U32)),
454 (sym::Poseidon8, sym::hash_to_u64) => Self::Hash(HashVariant::HashPSD8, Type::Integer(IntegerType::U64)),
455 (sym::Poseidon8, sym::hash_to_u128) => Self::Hash(HashVariant::HashPSD8, Type::Integer(IntegerType::U128)),
456 (sym::Poseidon8, sym::hash_to_scalar) => Self::Hash(HashVariant::HashPSD8, Type::Scalar),
457 (sym::Poseidon8, sym::hash_to_address_raw) => Self::Hash(HashVariant::HashPSD8Raw, Type::Address),
458 (sym::Poseidon8, sym::hash_to_field_raw) => Self::Hash(HashVariant::HashPSD8Raw, Type::Field),
459 (sym::Poseidon8, sym::hash_to_group_raw) => Self::Hash(HashVariant::HashPSD8Raw, Type::Group),
460 (sym::Poseidon8, sym::hash_to_i8_raw) => Self::Hash(HashVariant::HashPSD8Raw, Type::Integer(IntegerType::I8)),
461 (sym::Poseidon8, sym::hash_to_i16_raw) => Self::Hash(HashVariant::HashPSD8Raw, Type::Integer(IntegerType::I16)),
462 (sym::Poseidon8, sym::hash_to_i32_raw) => Self::Hash(HashVariant::HashPSD8Raw, Type::Integer(IntegerType::I32)),
463 (sym::Poseidon8, sym::hash_to_i64_raw) => Self::Hash(HashVariant::HashPSD8Raw, Type::Integer(IntegerType::I64)),
464 (sym::Poseidon8, sym::hash_to_i128_raw) => Self::Hash(HashVariant::HashPSD8Raw, Type::Integer(IntegerType::I128)),
465 (sym::Poseidon8, sym::hash_to_u8_raw) => Self::Hash(HashVariant::HashPSD8Raw, Type::Integer(IntegerType::U8)),
466 (sym::Poseidon8, sym::hash_to_u16_raw) => Self::Hash(HashVariant::HashPSD8Raw, Type::Integer(IntegerType::U16)),
467 (sym::Poseidon8, sym::hash_to_u32_raw) => Self::Hash(HashVariant::HashPSD8Raw, Type::Integer(IntegerType::U32)),
468 (sym::Poseidon8, sym::hash_to_u64_raw) => Self::Hash(HashVariant::HashPSD8Raw, Type::Integer(IntegerType::U64)),
469 (sym::Poseidon8, sym::hash_to_u128_raw) => Self::Hash(HashVariant::HashPSD8Raw, Type::Integer(IntegerType::U128)),
470 (sym::Poseidon8, sym::hash_to_scalar_raw) => Self::Hash(HashVariant::HashPSD8Raw, Type::Scalar),
471
472 (sym::SHA3_256, sym::hash_to_address) => Self::Hash(HashVariant::HashSha3_256, Type::Address),
473 (sym::SHA3_256, sym::hash_to_field) => Self::Hash(HashVariant::HashSha3_256, Type::Field),
474 (sym::SHA3_256, sym::hash_to_group) => Self::Hash(HashVariant::HashSha3_256, Type::Group),
475 (sym::SHA3_256, sym::hash_to_i8) => Self::Hash(HashVariant::HashSha3_256, Type::Integer(IntegerType::I8)),
476 (sym::SHA3_256, sym::hash_to_i16) => Self::Hash(HashVariant::HashSha3_256, Type::Integer(IntegerType::I16)),
477 (sym::SHA3_256, sym::hash_to_i32) => Self::Hash(HashVariant::HashSha3_256, Type::Integer(IntegerType::I32)),
478 (sym::SHA3_256, sym::hash_to_i64) => Self::Hash(HashVariant::HashSha3_256, Type::Integer(IntegerType::I64)),
479 (sym::SHA3_256, sym::hash_to_i128) => Self::Hash(HashVariant::HashSha3_256, Type::Integer(IntegerType::I128)),
480 (sym::SHA3_256, sym::hash_to_u8) => Self::Hash(HashVariant::HashSha3_256, Type::Integer(IntegerType::U8)),
481 (sym::SHA3_256, sym::hash_to_u16) => Self::Hash(HashVariant::HashSha3_256, Type::Integer(IntegerType::U16)),
482 (sym::SHA3_256, sym::hash_to_u32) => Self::Hash(HashVariant::HashSha3_256, Type::Integer(IntegerType::U32)),
483 (sym::SHA3_256, sym::hash_to_u64) => Self::Hash(HashVariant::HashSha3_256, Type::Integer(IntegerType::U64)),
484 (sym::SHA3_256, sym::hash_to_u128) => Self::Hash(HashVariant::HashSha3_256, Type::Integer(IntegerType::U128)),
485 (sym::SHA3_256, sym::hash_to_scalar) => Self::Hash(HashVariant::HashSha3_256, Type::Scalar),
486 (sym::SHA3_256, sym::hash_to_address_raw) => Self::Hash(HashVariant::HashSha3_256Raw, Type::Address),
487 (sym::SHA3_256, sym::hash_to_field_raw) => Self::Hash(HashVariant::HashSha3_256Raw, Type::Field),
488 (sym::SHA3_256, sym::hash_to_group_raw) => Self::Hash(HashVariant::HashSha3_256Raw, Type::Group),
489 (sym::SHA3_256, sym::hash_to_i8_raw) => Self::Hash(HashVariant::HashSha3_256Raw, Type::Integer(IntegerType::I8)),
490 (sym::SHA3_256, sym::hash_to_i16_raw) => Self::Hash(HashVariant::HashSha3_256Raw, Type::Integer(IntegerType::I16)),
491 (sym::SHA3_256, sym::hash_to_i32_raw) => Self::Hash(HashVariant::HashSha3_256Raw, Type::Integer(IntegerType::I32)),
492 (sym::SHA3_256, sym::hash_to_i64_raw) => Self::Hash(HashVariant::HashSha3_256Raw, Type::Integer(IntegerType::I64)),
493 (sym::SHA3_256, sym::hash_to_i128_raw) => Self::Hash(HashVariant::HashSha3_256Raw, Type::Integer(IntegerType::I128)),
494 (sym::SHA3_256, sym::hash_to_u8_raw) => Self::Hash(HashVariant::HashSha3_256Raw, Type::Integer(IntegerType::U8)),
495 (sym::SHA3_256, sym::hash_to_u16_raw) => Self::Hash(HashVariant::HashSha3_256Raw, Type::Integer(IntegerType::U16)),
496 (sym::SHA3_256, sym::hash_to_u32_raw) => Self::Hash(HashVariant::HashSha3_256Raw, Type::Integer(IntegerType::U32)),
497 (sym::SHA3_256, sym::hash_to_u64_raw) => Self::Hash(HashVariant::HashSha3_256Raw, Type::Integer(IntegerType::U64)),
498 (sym::SHA3_256, sym::hash_to_u128_raw) => Self::Hash(HashVariant::HashSha3_256Raw, Type::Integer(IntegerType::U128)),
499 (sym::SHA3_256, sym::hash_to_scalar_raw) => Self::Hash(HashVariant::HashSha3_256Raw, Type::Scalar),
500 (sym::SHA3_256, sym::hash_native) => Self::Hash(HashVariant::HashSha3_256Native, Type::Array(ArrayType::bit_array(256))),
501 (sym::SHA3_256, sym::hash_native_raw) => Self::Hash(HashVariant::HashSha3_256NativeRaw, Type::Array(ArrayType::bit_array(256))),
502
503 (sym::SHA3_384, sym::hash_to_address) => Self::Hash(HashVariant::HashSha3_384, Type::Address),
504 (sym::SHA3_384, sym::hash_to_field) => Self::Hash(HashVariant::HashSha3_384, Type::Field),
505 (sym::SHA3_384, sym::hash_to_group) => Self::Hash(HashVariant::HashSha3_384, Type::Group),
506 (sym::SHA3_384, sym::hash_to_i8) => Self::Hash(HashVariant::HashSha3_384, Type::Integer(IntegerType::I8)),
507 (sym::SHA3_384, sym::hash_to_i16) => Self::Hash(HashVariant::HashSha3_384, Type::Integer(IntegerType::I16)),
508 (sym::SHA3_384, sym::hash_to_i32) => Self::Hash(HashVariant::HashSha3_384, Type::Integer(IntegerType::I32)),
509 (sym::SHA3_384, sym::hash_to_i64) => Self::Hash(HashVariant::HashSha3_384, Type::Integer(IntegerType::I64)),
510 (sym::SHA3_384, sym::hash_to_i128) => Self::Hash(HashVariant::HashSha3_384, Type::Integer(IntegerType::I128)),
511 (sym::SHA3_384, sym::hash_to_u8) => Self::Hash(HashVariant::HashSha3_384, Type::Integer(IntegerType::U8)),
512 (sym::SHA3_384, sym::hash_to_u16) => Self::Hash(HashVariant::HashSha3_384, Type::Integer(IntegerType::U16)),
513 (sym::SHA3_384, sym::hash_to_u32) => Self::Hash(HashVariant::HashSha3_384, Type::Integer(IntegerType::U32)),
514 (sym::SHA3_384, sym::hash_to_u64) => Self::Hash(HashVariant::HashSha3_384, Type::Integer(IntegerType::U64)),
515 (sym::SHA3_384, sym::hash_to_u128) => Self::Hash(HashVariant::HashSha3_384, Type::Integer(IntegerType::U128)),
516 (sym::SHA3_384, sym::hash_to_scalar) => Self::Hash(HashVariant::HashSha3_384, Type::Scalar),
517 (sym::SHA3_384, sym::hash_to_address_raw) => Self::Hash(HashVariant::HashSha3_384Raw, Type::Address),
518 (sym::SHA3_384, sym::hash_to_field_raw) => Self::Hash(HashVariant::HashSha3_384Raw, Type::Field),
519 (sym::SHA3_384, sym::hash_to_group_raw) => Self::Hash(HashVariant::HashSha3_384Raw, Type::Group),
520 (sym::SHA3_384, sym::hash_to_i8_raw) => Self::Hash(HashVariant::HashSha3_384Raw, Type::Integer(IntegerType::I8)),
521 (sym::SHA3_384, sym::hash_to_i16_raw) => Self::Hash(HashVariant::HashSha3_384Raw, Type::Integer(IntegerType::I16)),
522 (sym::SHA3_384, sym::hash_to_i32_raw) => Self::Hash(HashVariant::HashSha3_384Raw, Type::Integer(IntegerType::I32)),
523 (sym::SHA3_384, sym::hash_to_i64_raw) => Self::Hash(HashVariant::HashSha3_384Raw, Type::Integer(IntegerType::I64)),
524 (sym::SHA3_384, sym::hash_to_i128_raw) => Self::Hash(HashVariant::HashSha3_384Raw, Type::Integer(IntegerType::I128)),
525 (sym::SHA3_384, sym::hash_to_u8_raw) => Self::Hash(HashVariant::HashSha3_384Raw, Type::Integer(IntegerType::U8)),
526 (sym::SHA3_384, sym::hash_to_u16_raw) => Self::Hash(HashVariant::HashSha3_384Raw, Type::Integer(IntegerType::U16)),
527 (sym::SHA3_384, sym::hash_to_u32_raw) => Self::Hash(HashVariant::HashSha3_384Raw, Type::Integer(IntegerType::U32)),
528 (sym::SHA3_384, sym::hash_to_u64_raw) => Self::Hash(HashVariant::HashSha3_384Raw, Type::Integer(IntegerType::U64)),
529 (sym::SHA3_384, sym::hash_to_u128_raw) => Self::Hash(HashVariant::HashSha3_384Raw, Type::Integer(IntegerType::U128)),
530 (sym::SHA3_384, sym::hash_to_scalar_raw) => Self::Hash(HashVariant::HashSha3_384Raw, Type::Scalar),
531 (sym::SHA3_384, sym::hash_native) => Self::Hash(HashVariant::HashSha3_384Native, Type::Array(ArrayType::bit_array(384))),
532 (sym::SHA3_384, sym::hash_native_raw) => Self::Hash(HashVariant::HashSha3_384NativeRaw, Type::Array(ArrayType::bit_array(384))),
533
534 (sym::SHA3_512, sym::hash_to_address) => Self::Hash(HashVariant::HashSha3_512, Type::Address),
535 (sym::SHA3_512, sym::hash_to_field) => Self::Hash(HashVariant::HashSha3_512, Type::Field),
536 (sym::SHA3_512, sym::hash_to_group) => Self::Hash(HashVariant::HashSha3_512, Type::Group),
537 (sym::SHA3_512, sym::hash_to_i8) => Self::Hash(HashVariant::HashSha3_512, Type::Integer(IntegerType::I8)),
538 (sym::SHA3_512, sym::hash_to_i16) => Self::Hash(HashVariant::HashSha3_512, Type::Integer(IntegerType::I16)),
539 (sym::SHA3_512, sym::hash_to_i32) => Self::Hash(HashVariant::HashSha3_512, Type::Integer(IntegerType::I32)),
540 (sym::SHA3_512, sym::hash_to_i64) => Self::Hash(HashVariant::HashSha3_512, Type::Integer(IntegerType::I64)),
541 (sym::SHA3_512, sym::hash_to_i128) => Self::Hash(HashVariant::HashSha3_512, Type::Integer(IntegerType::I128)),
542 (sym::SHA3_512, sym::hash_to_u8) => Self::Hash(HashVariant::HashSha3_512, Type::Integer(IntegerType::U8)),
543 (sym::SHA3_512, sym::hash_to_u16) => Self::Hash(HashVariant::HashSha3_512, Type::Integer(IntegerType::U16)),
544 (sym::SHA3_512, sym::hash_to_u32) => Self::Hash(HashVariant::HashSha3_512, Type::Integer(IntegerType::U32)),
545 (sym::SHA3_512, sym::hash_to_u64) => Self::Hash(HashVariant::HashSha3_512, Type::Integer(IntegerType::U64)),
546 (sym::SHA3_512, sym::hash_to_u128) => Self::Hash(HashVariant::HashSha3_512, Type::Integer(IntegerType::U128)),
547 (sym::SHA3_512, sym::hash_to_scalar) => Self::Hash(HashVariant::HashSha3_512, Type::Scalar),
548 (sym::SHA3_512, sym::hash_to_address_raw) => Self::Hash(HashVariant::HashSha3_512Raw, Type::Address),
549 (sym::SHA3_512, sym::hash_to_field_raw) => Self::Hash(HashVariant::HashSha3_512Raw, Type::Field),
550 (sym::SHA3_512, sym::hash_to_group_raw) => Self::Hash(HashVariant::HashSha3_512Raw, Type::Group),
551 (sym::SHA3_512, sym::hash_to_i8_raw) => Self::Hash(HashVariant::HashSha3_512Raw, Type::Integer(IntegerType::I8)),
552 (sym::SHA3_512, sym::hash_to_i16_raw) => Self::Hash(HashVariant::HashSha3_512Raw, Type::Integer(IntegerType::I16)),
553 (sym::SHA3_512, sym::hash_to_i32_raw) => Self::Hash(HashVariant::HashSha3_512Raw, Type::Integer(IntegerType::I32)),
554 (sym::SHA3_512, sym::hash_to_i64_raw) => Self::Hash(HashVariant::HashSha3_512Raw, Type::Integer(IntegerType::I64)),
555 (sym::SHA3_512, sym::hash_to_i128_raw) => Self::Hash(HashVariant::HashSha3_512Raw, Type::Integer(IntegerType::I128)),
556 (sym::SHA3_512, sym::hash_to_u8_raw) => Self::Hash(HashVariant::HashSha3_512Raw, Type::Integer(IntegerType::U8)),
557 (sym::SHA3_512, sym::hash_to_u16_raw) => Self::Hash(HashVariant::HashSha3_512Raw, Type::Integer(IntegerType::U16)),
558 (sym::SHA3_512, sym::hash_to_u32_raw) => Self::Hash(HashVariant::HashSha3_512Raw, Type::Integer(IntegerType::U32)),
559 (sym::SHA3_512, sym::hash_to_u64_raw) => Self::Hash(HashVariant::HashSha3_512Raw, Type::Integer(IntegerType::U64)),
560 (sym::SHA3_512, sym::hash_to_u128_raw) => Self::Hash(HashVariant::HashSha3_512Raw, Type::Integer(IntegerType::U128)),
561 (sym::SHA3_512, sym::hash_to_scalar_raw) => Self::Hash(HashVariant::HashSha3_512Raw, Type::Scalar),
562 (sym::SHA3_512, sym::hash_native) => Self::Hash(HashVariant::HashSha3_512Native, Type::Array(ArrayType::bit_array(512))),
563 (sym::SHA3_512, sym::hash_native_raw) => Self::Hash(HashVariant::HashSha3_512NativeRaw, Type::Array(ArrayType::bit_array(512))),
564
565 (sym::ECDSA, sym::verify_digest) => Self::ECDSAVerify(ECDSAVerifyVariant::Digest),
566 (sym::ECDSA, sym::verify_digest_eth) => Self::ECDSAVerify(ECDSAVerifyVariant::DigestEth),
567 (sym::ECDSA, sym::verify_keccak256) => Self::ECDSAVerify(ECDSAVerifyVariant::HashKeccak256),
568 (sym::ECDSA, sym::verify_keccak256_raw) => Self::ECDSAVerify(ECDSAVerifyVariant::HashKeccak256Raw),
569 (sym::ECDSA, sym::verify_keccak256_eth) => Self::ECDSAVerify(ECDSAVerifyVariant::HashKeccak256Eth),
570 (sym::ECDSA, sym::verify_keccak384) => Self::ECDSAVerify(ECDSAVerifyVariant::HashKeccak384),
571 (sym::ECDSA, sym::verify_keccak384_raw) => Self::ECDSAVerify(ECDSAVerifyVariant::HashKeccak384Raw),
572 (sym::ECDSA, sym::verify_keccak384_eth) => Self::ECDSAVerify(ECDSAVerifyVariant::HashKeccak384Eth),
573 (sym::ECDSA, sym::verify_keccak512) => Self::ECDSAVerify(ECDSAVerifyVariant::HashKeccak512),
574 (sym::ECDSA, sym::verify_keccak512_raw) => Self::ECDSAVerify(ECDSAVerifyVariant::HashKeccak512Raw),
575 (sym::ECDSA, sym::verify_keccak512_eth) => Self::ECDSAVerify(ECDSAVerifyVariant::HashKeccak512Eth),
576 (sym::ECDSA, sym::verify_sha3_256) => Self::ECDSAVerify(ECDSAVerifyVariant::HashSha3_256),
577 (sym::ECDSA, sym::verify_sha3_256_raw) => Self::ECDSAVerify(ECDSAVerifyVariant::HashSha3_256Raw),
578 (sym::ECDSA, sym::verify_sha3_256_eth) => Self::ECDSAVerify(ECDSAVerifyVariant::HashSha3_256Eth),
579 (sym::ECDSA, sym::verify_sha3_384) => Self::ECDSAVerify(ECDSAVerifyVariant::HashSha3_384),
580 (sym::ECDSA, sym::verify_sha3_384_raw) => Self::ECDSAVerify(ECDSAVerifyVariant::HashSha3_384Raw),
581 (sym::ECDSA, sym::verify_sha3_384_eth) => Self::ECDSAVerify(ECDSAVerifyVariant::HashSha3_384Eth),
582 (sym::ECDSA, sym::verify_sha3_512) => Self::ECDSAVerify(ECDSAVerifyVariant::HashSha3_512),
583 (sym::ECDSA, sym::verify_sha3_512_raw) => Self::ECDSAVerify(ECDSAVerifyVariant::HashSha3_512Raw),
584 (sym::ECDSA, sym::verify_sha3_512_eth) => Self::ECDSAVerify(ECDSAVerifyVariant::HashSha3_512Eth),
585
586 (_, sym::get) => Self::Get,
587 (_, sym::set) => Self::Set,
588
589 (sym::Mapping, sym::get_or_use) => Self::MappingGetOrUse,
590 (sym::Mapping, sym::remove) => Self::MappingRemove,
591 (sym::Mapping, sym::contains) => Self::MappingContains,
592
593 (sym::Optional, sym::unwrap) => Self::OptionalUnwrap,
594 (sym::Optional, sym::unwrap_or) => Self::OptionalUnwrapOr,
595
596 (sym::Vector, sym::push) => Self::VectorPush,
597 (sym::Vector, sym::len) => Self::VectorLen,
598 (sym::Vector, sym::clear) => Self::VectorClear,
599 (sym::Vector, sym::pop) => Self::VectorPop,
600 (sym::Vector, sym::swap_remove) => Self::VectorSwapRemove,
601
602 (sym::group, sym::to_x_coordinate) => Self::GroupToXCoordinate,
603 (sym::group, sym::to_y_coordinate) => Self::GroupToYCoordinate,
604
605 (sym::ProgramCore, sym::checksum) => Self::ProgramChecksum,
606 (sym::ProgramCore, sym::edition) => Self::ProgramEdition,
607 (sym::ProgramCore, sym::program_owner) => Self::ProgramOwner,
608
609 (sym::signature, sym::verify) => Self::SignatureVerify,
610 (sym::Future, sym::Await) => Self::FutureAwait,
611
612 (sym::Serialize, sym::to_bits) => Self::Serialize(SerializeVariant::ToBits),
613 (sym::Serialize, sym::to_bits_raw) => Self::Serialize(SerializeVariant::ToBitsRaw),
614
615 (sym::CheatCode, sym::print_mapping) => Self::CheatCodePrintMapping,
616 (sym::CheatCode, sym::set_block_height) => Self::CheatCodeSetBlockHeight,
617 (sym::CheatCode, sym::set_block_timestamp) => Self::CheatCodeSetBlockTimestamp,
618 (sym::CheatCode, sym::set_signer) => Self::CheatCodeSetSigner,
619 _ => return None,
620 })
621 }
622
623 pub fn num_args(&self) -> usize {
625 match self {
626 Self::ChaChaRand(_) => 0,
627 Self::Commit(_, _) => 2,
628 Self::Hash(_, _) => 1,
629 Self::ECDSAVerify(_) => 3,
630
631 Self::Get => 2,
632 Self::Set => 3,
633
634 Self::MappingGetOrUse => 3,
635 Self::MappingRemove => 2,
636 Self::MappingContains => 2,
637
638 Self::OptionalUnwrap => 1,
639 Self::OptionalUnwrapOr => 2,
640
641 Self::VectorPush => 2,
642 Self::VectorLen => 1,
643 Self::VectorClear => 1,
644 Self::VectorPop => 1,
645 Self::VectorSwapRemove => 2,
646
647 Self::GroupToXCoordinate => 1,
648 Self::GroupToYCoordinate => 1,
649
650 Self::SignatureVerify => 3,
651 Self::FutureAwait => 1,
652
653 Self::ProgramChecksum => 1,
654 Self::ProgramEdition => 1,
655 Self::ProgramOwner => 1,
656
657 Self::Serialize(_) => 1,
658 Self::Deserialize(_, _) => 1,
659
660 Self::CheatCodePrintMapping => 1,
661 Self::CheatCodeSetBlockHeight => 1,
662 Self::CheatCodeSetBlockTimestamp => 1,
663 Self::CheatCodeSetSigner => 1,
664 }
665 }
666
667 pub fn is_finalize_command(&self) -> bool {
669 match self {
670 CoreFunction::FutureAwait
671 | CoreFunction::ChaChaRand(_)
672 | CoreFunction::ECDSAVerify(_)
673 | CoreFunction::Get
674 | CoreFunction::MappingGetOrUse
675 | CoreFunction::Set
676 | CoreFunction::MappingRemove
677 | CoreFunction::MappingContains
678 | CoreFunction::ProgramChecksum
679 | CoreFunction::ProgramEdition
680 | CoreFunction::ProgramOwner
681 | CoreFunction::VectorPush
682 | CoreFunction::VectorLen
683 | CoreFunction::VectorClear
684 | CoreFunction::VectorPop
685 | CoreFunction::VectorSwapRemove => true,
686 CoreFunction::Commit(_, _)
687 | CoreFunction::Hash(_, _)
688 | CoreFunction::OptionalUnwrap
689 | CoreFunction::OptionalUnwrapOr
690 | CoreFunction::GroupToXCoordinate
691 | CoreFunction::GroupToYCoordinate
692 | CoreFunction::SignatureVerify
693 | CoreFunction::Serialize(_)
694 | CoreFunction::Deserialize(_, _)
695 | CoreFunction::CheatCodePrintMapping
696 | CoreFunction::CheatCodeSetBlockHeight
697 | CoreFunction::CheatCodeSetBlockTimestamp
698 | CoreFunction::CheatCodeSetSigner => false,
699 }
700 }
701
702 pub fn is_pure(&self) -> bool {
704 match self {
705 CoreFunction::FutureAwait
706 | CoreFunction::Set
707 | CoreFunction::MappingRemove
708 | CoreFunction::VectorPush
709 | CoreFunction::VectorClear
710 | CoreFunction::CheatCodePrintMapping
711 | CoreFunction::CheatCodeSetBlockHeight
712 | CoreFunction::CheatCodeSetBlockTimestamp
713 | CoreFunction::CheatCodeSetSigner
714 | CoreFunction::VectorPop
715 | CoreFunction::VectorSwapRemove => false,
716
717 CoreFunction::ChaChaRand(_)
718 | CoreFunction::ECDSAVerify(_)
719 | CoreFunction::Get
720 | CoreFunction::MappingGetOrUse
721 | CoreFunction::MappingContains
722 | CoreFunction::ProgramChecksum
723 | CoreFunction::ProgramEdition
724 | CoreFunction::ProgramOwner
725 | CoreFunction::VectorLen
726 | CoreFunction::Commit(_, _)
727 | CoreFunction::Hash(_, _)
728 | CoreFunction::OptionalUnwrap
729 | CoreFunction::OptionalUnwrapOr
730 | CoreFunction::GroupToXCoordinate
731 | CoreFunction::GroupToYCoordinate
732 | CoreFunction::SignatureVerify
733 | CoreFunction::Serialize(_)
734 | CoreFunction::Deserialize(_, _) => true,
735 }
736 }
737}
738
739impl TryFrom<&AssociatedFunctionExpression> for CoreFunction {
740 type Error = anyhow::Error;
741
742 fn try_from(associated_function: &AssociatedFunctionExpression) -> anyhow::Result<Self> {
743 match CoreFunction::from_symbols(associated_function.variant.name, associated_function.name.name) {
744 Some(core_function) => Ok(core_function),
745 None if associated_function.variant.name == sym::Deserialize => {
747 let variant = match associated_function.name.name {
749 sym::from_bits => DeserializeVariant::FromBits,
750 sym::from_bits_raw => DeserializeVariant::FromBitsRaw,
751 _ => anyhow::bail!(
752 "Unknown associated function: {}::{}",
753 associated_function.variant.name,
754 associated_function.name.name
755 ),
756 };
757 anyhow::ensure!(
759 associated_function.type_parameters.len() == 1,
760 "Expected exactly one type argument for Deserialize::{}",
761 associated_function.name.name
762 );
763 let type_parameter = associated_function.type_parameters[0].0.clone();
764 Ok(Self::Deserialize(variant, type_parameter))
765 }
766 _ => anyhow::bail!(
767 "Unknown associated function: {}::{}",
768 associated_function.variant.name,
769 associated_function.name.name
770 ),
771 }
772 }
773}