use serde::Serialize;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize)]
pub enum Family {
Cyclic,
Angular,
Sampling,
Hashing,
CrossCutting,
}
impl Family {
#[must_use]
pub fn label(self) -> &'static str {
match self {
Family::Cyclic => "循环群/CRT",
Family::Angular => "角度量化",
Family::Sampling => "抽样/二进制",
Family::Hashing => "哈希环",
Family::CrossCutting => "飞布/横切",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
pub enum Determinism {
Det,
Sto,
Und,
}
impl Determinism {
#[must_use]
pub fn label(self) -> &'static str {
match self {
Determinism::Det => "确定",
Determinism::Sto => "随机·种子可复现",
Determinism::Und => "欠定",
}
}
}
#[derive(Debug, Clone, Copy, Serialize)]
pub struct DetItem {
pub aspect: &'static str,
pub status: Determinism,
pub note: &'static str,
}
#[must_use]
pub const fn d(aspect: &'static str, status: Determinism, note: &'static str) -> DetItem {
DetItem { aspect, status, note }
}
#[derive(Debug, Clone, Copy, Serialize)]
pub struct SchoolItem {
pub id: &'static str,
pub name: &'static str,
pub default: bool,
pub note: &'static str,
}
#[must_use]
pub const fn s(id: &'static str, name: &'static str, default: bool, note: &'static str) -> SchoolItem {
SchoolItem { id, name, default, note }
}