cairo_lang_sierra_to_casm/
circuit.rs1use cairo_lang_sierra::extensions::circuit::{CircuitInfo, CircuitTypeConcrete, ConcreteCircuit};
2use cairo_lang_sierra::extensions::core::{CoreLibfunc, CoreType, CoreTypeConcrete};
3use cairo_lang_sierra::ids::ConcreteTypeId;
4use cairo_lang_sierra::program_registry::ProgramRegistry;
5use cairo_lang_utils::ordered_hash_map::OrderedHashMap;
6
7use crate::compiler::CompilationError;
8
9#[derive(Clone, Debug, Default, Eq, PartialEq)]
12pub struct CircuitsInfo {
13 pub circuits: OrderedHashMap<ConcreteTypeId, CircuitInfo>,
14}
15
16impl CircuitsInfo {
17 pub fn new<'a>(
18 registry: &ProgramRegistry<CoreType, CoreLibfunc>,
19 type_ids: impl Iterator<Item = &'a ConcreteTypeId>,
20 ) -> Result<Self, CompilationError> {
21 let mut res = Self::default();
22 for ty in type_ids {
23 if let CoreTypeConcrete::Circuit(CircuitTypeConcrete::Circuit(ConcreteCircuit {
24 circuit_info,
25 ..
26 })) = registry.get_type(ty).unwrap()
27 {
28 res.circuits.entry(ty.clone()).or_insert_with(|| circuit_info.clone());
29 }
30 }
31 Ok(res)
32 }
33}