use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum Op {
Concise,
Elide,
Generate,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum Check {
Rederive,
Ground,
GroundAttest,
}
impl Op {
#[must_use]
pub const fn asserts(self) -> bool {
match self {
Op::Concise => true,
Op::Elide => false,
Op::Generate => true,
}
}
#[must_use]
pub const fn check(self) -> Check {
match self {
Op::Elide => Check::Rederive,
Op::Concise => Check::Ground,
Op::Generate => Check::GroundAttest,
}
}
#[must_use]
pub const fn depth_after(self, d: u32) -> u32 {
match self {
Op::Generate => d.saturating_add(1),
Op::Concise => d,
Op::Elide => d,
}
}
}