Files
brk/crates/brk_cohort/src/cohort_context.rs
2026-03-17 11:01:21 +01:00

40 lines
1.2 KiB
Rust

use super::Filter;
/// Context for cohort naming - determines whether a prefix is needed.
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum CohortContext {
/// UTXO-based cohorts: uses "utxos_" prefix for Time/Amount filters
Utxo,
/// Address-based cohorts: uses "addrs_" prefix for Amount filters
Addr,
}
impl CohortContext {
pub fn prefix(&self) -> &'static str {
match self {
CohortContext::Utxo => "utxos",
CohortContext::Addr => "addrs",
}
}
pub fn prefixed(&self, name: &str) -> String {
format!("{}_{}", self.prefix(), name)
}
/// Build full name for a filter, adding prefix only for Time/Amount filters.
///
/// Prefix rules:
/// - No prefix: `All`, `Term`, `Epoch`, `Class`, `Type`
/// - Context prefix: `Time`, `Amount`
pub fn full_name(&self, filter: &Filter, name: &str) -> String {
match filter {
Filter::All
| Filter::Term(_)
| Filter::Epoch(_)
| Filter::Class(_)
| Filter::Type(_) => name.to_string(),
Filter::Time(_) | Filter::Amount(_) => self.prefixed(name),
}
}
}