use chess_corners_core::{CenterOfMassConfig, ForstnerConfig, SaddlePointConfig};
use serde::{Deserialize, Serialize};
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
#[non_exhaustive]
pub enum ChessRing {
#[default]
Canonical,
Broad,
}
#[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
#[non_exhaustive]
pub enum ChessRefiner {
CenterOfMass(CenterOfMassConfig),
Forstner(ForstnerConfig),
SaddlePoint(SaddlePointConfig),
#[cfg(feature = "ml-refiner")]
Ml,
}
impl Default for ChessRefiner {
fn default() -> Self {
Self::CenterOfMass(CenterOfMassConfig::default())
}
}
impl ChessRefiner {
pub fn center_of_mass() -> Self {
Self::CenterOfMass(CenterOfMassConfig::default())
}
pub fn forstner() -> Self {
Self::Forstner(ForstnerConfig::default())
}
pub fn saddle_point() -> Self {
Self::SaddlePoint(SaddlePointConfig::default())
}
}
#[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize)]
#[serde(default)]
#[non_exhaustive]
pub struct ChessConfig {
pub ring: ChessRing,
pub refiner: ChessRefiner,
}
impl Default for ChessConfig {
fn default() -> Self {
Self {
ring: ChessRing::Canonical,
refiner: ChessRefiner::default(),
}
}
}