use antecedent_stats::{FdrAdjustment, MultipleTestingMethod};
#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)]
pub enum FdrControl {
Off,
On(FdrAdjustment),
}
impl FdrControl {
#[must_use]
pub const fn bh() -> Self {
Self::On(FdrAdjustment::bh())
}
#[must_use]
pub const fn by() -> Self {
Self::On(FdrAdjustment::by())
}
#[must_use]
pub const fn bonferroni() -> Self {
Self::On(FdrAdjustment {
method: MultipleTestingMethod::Bonferroni,
exclude_contemporaneous: true,
})
}
#[must_use]
pub const fn holm() -> Self {
Self::On(FdrAdjustment {
method: MultipleTestingMethod::Holm,
exclude_contemporaneous: true,
})
}
#[must_use]
pub const fn enabled(self) -> bool {
matches!(self, Self::On(_))
}
#[must_use]
pub const fn adjustment(self) -> Option<FdrAdjustment> {
match self {
Self::Off => None,
Self::On(cfg) => Some(cfg),
}
}
}
impl From<bool> for FdrControl {
fn from(value: bool) -> Self {
if value { Self::bh() } else { Self::Off }
}
}
impl From<FdrAdjustment> for FdrControl {
fn from(value: FdrAdjustment) -> Self {
Self::On(value)
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)]
pub enum DiscoveryAccept {
Review,
AutoAccept,
}
impl DiscoveryAccept {
#[must_use]
pub const fn auto(self) -> bool {
matches!(self, Self::AutoAccept)
}
}
impl From<bool> for DiscoveryAccept {
fn from(value: bool) -> Self {
if value { Self::AutoAccept } else { Self::Review }
}
}