use crate::circuit::{Wire, WireOrUnconstrained};
use crate::plonk::CircuitBuilder;
use crate::witness::Witness;
use anyhow::Result;
pub trait Chip<const I: usize, const O: usize> {
fn build(
&self,
builder: &mut CircuitBuilder,
inputs: [Option<Wire>; I],
) -> Result<[Option<Wire>; O]>;
fn witness(
&self,
witness: &mut Witness,
inputs: [WireOrUnconstrained; I],
) -> Result<[WireOrUnconstrained; O]>;
}
pub trait DynamicChip {
fn build(
&self,
builder: &mut CircuitBuilder,
inputs: &[Option<Wire>],
) -> Result<Vec<Option<Wire>>>;
fn witness(
&self,
witness: &mut Witness,
inputs: &[WireOrUnconstrained],
) -> Result<Vec<WireOrUnconstrained>>;
}