use midnight_proofs::{
circuit::{Layouter, Value},
plonk::Error,
};
use crate::{types::InnerValue, CircuitField};
pub trait AssignmentInstructions<F, Assigned>
where
F: CircuitField,
Assigned: InnerValue,
{
fn assign(
&self,
layouter: &mut impl Layouter<F>,
value: Value<Assigned::Element>,
) -> Result<Assigned, Error>;
fn assign_fixed(
&self,
layouter: &mut impl Layouter<F>,
constant: Assigned::Element,
) -> Result<Assigned, Error>;
fn assign_many(
&self,
layouter: &mut impl Layouter<F>,
values: &[Value<Assigned::Element>],
) -> Result<Vec<Assigned>, Error> {
values
.iter()
.map(|v| self.assign(layouter, v.clone()))
.collect::<Result<Vec<Assigned>, Error>>()
}
fn assign_many_fixed(
&self,
layouter: &mut impl Layouter<F>,
values: &[Assigned::Element],
) -> Result<Vec<Assigned>, Error> {
values
.iter()
.map(|v| self.assign_fixed(layouter, v.clone()))
.collect::<Result<Vec<Assigned>, Error>>()
}
}