#[cfg(feature = "orm")]
mod db;
mod driver;
mod env;
mod manager;
mod memory;
mod resolvers;
mod toml;
#[cfg(test)]
mod tests;
#[cfg(feature = "orm")]
pub use db::DbFeatureDriver;
pub use driver::FeatureDriver;
pub use env::EnvFeatureDriver;
pub use manager::FeatureManager;
pub use memory::MemoryFeatureDriver;
pub use resolvers::{calculate_hash_bucket, parse_rollout, parse_variants, resolve_variant};
pub use toml::TomlFeatureDriver;
use std::sync::OnceLock;
static FEATURE_CELL: OnceLock<FeatureManager> = OnceLock::new();
pub fn init(manager: FeatureManager) -> Result<(), FeatureManager> {
FEATURE_CELL.set(manager)
}
#[cfg_attr(mutants, mutants::skip)]
pub fn manager() -> &'static FeatureManager {
FEATURE_CELL.get_or_init(FeatureManager::default)
}
#[cfg_attr(mutants, mutants::skip)]
pub async fn enabled(flag: &str) -> bool {
manager().enabled(flag).await
}
#[cfg_attr(mutants, mutants::skip)]
pub async fn enabled_for(flag: &str, identifier: &str) -> bool {
manager().enabled_for(flag, identifier).await
}
#[cfg_attr(mutants, mutants::skip)]
pub async fn variant(flag: &str, identifier: &str) -> Option<String> {
manager().variant(flag, identifier).await
}