use {
crate::witness::WitnessBuilder,
serde::{Deserialize, Serialize},
};
mod dependency;
mod remapper;
mod scheduler;
mod splitter;
pub use {
dependency::DependencyInfo,
remapper::WitnessIndexRemapper,
scheduler::LayerScheduler,
splitter::{SplitError, WitnessSplitter},
};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub enum LayerType {
Other,
Inverse,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct Layer {
pub witness_builders: Vec<WitnessBuilder>,
pub typ: LayerType,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct LayeredWitnessBuilders {
pub layers: Vec<Layer>,
}
impl LayeredWitnessBuilders {
pub fn layers_len(&self) -> usize {
self.layers.len()
}
pub fn builders_len(&self) -> usize {
self.layers
.iter()
.map(|layer| layer.witness_builders.len())
.sum()
}
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct SplitWitnessBuilders {
pub w1_layers: LayeredWitnessBuilders,
pub w2_layers: LayeredWitnessBuilders,
pub w1_size: usize,
}