mod arc_set;
use arc_set::ArcSet;
#[derive(Debug, Clone, Copy)]
pub struct Solvent {
input_mode: InputMode,
}
impl Solvent {
pub fn dissolve(
&self,
cells: impl IntoIterator<Item = crate::CellIndex>,
) -> Result<geo::MultiPolygon, crate::error::DissolutionError> {
Ok(match self.input_mode {
InputMode::Homogeneous => ArcSet::new(cells)?.into(),
InputMode::Heterogeneous(resolution) => {
ArcSet::new_heterogeneous(cells, resolution)?.into()
}
})
}
}
#[derive(Debug, Clone, Copy)]
pub struct SolventBuilder {
input_mode: InputMode,
}
impl Default for SolventBuilder {
fn default() -> Self {
Self::new()
}
}
impl SolventBuilder {
#[must_use]
pub const fn new() -> Self {
Self {
input_mode: InputMode::Homogeneous,
}
}
#[must_use]
pub const fn enable_heterogeneous_support(
mut self,
resolution: crate::Resolution,
) -> Self {
self.input_mode = InputMode::Heterogeneous(resolution);
self
}
#[must_use]
pub const fn build(self) -> Solvent {
Solvent {
input_mode: self.input_mode,
}
}
}
#[derive(Debug, Clone, Copy)]
enum InputMode {
Homogeneous,
Heterogeneous(crate::Resolution),
}