use halo2_base::AssignedValue;
use crate::{
utils::component::{circuit::PromiseBuilder, types::LogicalEmpty, ComponentType},
Field,
};
use super::{
combo::PromiseBuilderCombo,
empty::EmptyPromiseLoader,
multi::{ComponentTypeList, MultiPromiseLoader, RlcAdapter},
single,
};
pub trait DummyPromiseBuilder<F: Field>: PromiseBuilder<F> {
fn fulfill_dummy_promise_results(&mut self);
}
impl<F: Field> DummyPromiseBuilder<F> for EmptyPromiseLoader<F> {
fn fulfill_dummy_promise_results(&mut self) {}
}
impl<F: Field, T: ComponentType<F>> DummyPromiseBuilder<F> for single::PromiseLoader<F, T> {
fn fulfill_dummy_promise_results(&mut self) {
self.comp_loader.load_dummy_promise_results();
}
}
impl<F: Field, FIRST: DummyPromiseBuilder<F>, SECOND: DummyPromiseBuilder<F>> DummyPromiseBuilder<F>
for PromiseBuilderCombo<F, FIRST, SECOND>
{
fn fulfill_dummy_promise_results(&mut self) {
let (first, second) = &mut self.to_combine;
first.fulfill_dummy_promise_results();
second.fulfill_dummy_promise_results();
}
}
impl<
F: Field,
VT: ComponentType<
F,
OutputValue = LogicalEmpty<F>,
OutputWitness = LogicalEmpty<AssignedValue<F>>,
>,
CLIST: ComponentTypeList<F>,
A: RlcAdapter<F>,
> DummyPromiseBuilder<F> for MultiPromiseLoader<F, VT, CLIST, A>
{
fn fulfill_dummy_promise_results(&mut self) {
for comp_loader in &mut self.comp_loaders {
comp_loader.load_dummy_promise_results();
}
}
}