Skip to main content

mdnt_support/
macros.rs

1//! Macros for supporting extraction.
2
3/// Implements [`crate::circuit::CircuitInitialization`] for the given type
4/// based on its FromScratch implementation.
5#[macro_export]
6macro_rules! circuit_initialization_from_scratch {
7    ($C:ty, $F:ident $(, $other:ident)* $(where $($conds:tt)+ )?) => {
8        impl<L, $F, $( $other,)*> $crate::circuit::CircuitInitialization<L> for $C
9        where
10            L: midnight_proofs::circuit::Layouter<$F>,
11            $F: ff::PrimeField,
12            $C: crate::testing_utils::FromScratch<$F>
13            $(, $($conds)+)?
14        {
15            type Config = <$C as crate::testing_utils::FromScratch<$F>>::Config;
16            type Args = ();
17            type ConfigCols =
18                [midnight_proofs::plonk::Column<midnight_proofs::plonk::Instance>; 2];
19            type CS = midnight_proofs::plonk::ConstraintSystem<$F>;
20            type Error = midnight_proofs::plonk::Error;
21
22            fn new_chip(config: &Self::Config, _: Self::Args) -> Self {
23                <$C as crate::testing_utils::FromScratch<$F>>::new_from_scratch(config)
24            }
25
26            fn configure_circuit(
27                meta: &mut Self::CS,
28                instance_columns: &Self::ConfigCols,
29            ) -> Self::Config {
30                <$C as crate::testing_utils::FromScratch<$F>>::configure_from_scratch(meta, instance_columns)
31            }
32
33            fn load_chip(
34                &self,
35                layouter: &mut L,
36                _config: &Self::Config,
37            ) -> Result<(), Self::Error> {
38                use crate::testing_utils::FromScratch;
39                self.load_from_scratch(layouter)
40            }
41        }
42    };
43}