Skip to main content

native/kameleoon_elixir_bridge/src/feature_flag_ex.rs

use std::collections::HashMap;

use kameleoon_core::types::FeatureFlag as TypesFeatureFlag;

use crate::rule_ex::RuleEx;
use crate::utils_ex::ArcStr;
use crate::variation_ex::VariationEx;

#[derive(Debug, rustler::NifStruct)]
#[module = "Kameleoon.Types.FeatureFlag"]
#[rustler(encode)]
pub(crate) struct FeatureFlagEx {
    environment_enabled: bool,
    default_variation_key: ArcStr,
    variations: HashMap<ArcStr, VariationEx>,
    rules: Vec<RuleEx>,
}

impl From<&TypesFeatureFlag> for FeatureFlagEx {
    fn from(value: &TypesFeatureFlag) -> Self {
        Self {
            environment_enabled: value.environment_enabled,
            default_variation_key: value.default_variation_key.clone().into(),
            variations: value
                .variations
                .iter()
                .map(|(key, variation)| (key.clone().into(), variation.into()))
                .collect(),
            rules: value.rules.iter().map(RuleEx::from).collect(),
        }
    }
}