Skip to main content

native/kameleoon_elixir_bridge/src/variation_ex.rs

use kameleoon_core::types::Variation;

use crate::{utils_ex::ArcStr, variable_ex::VariableEx};

#[derive(Debug, rustler::NifStruct)]
#[module = "Kameleoon.Types.Variation"]
#[rustler(encode)]
pub(crate) struct VariationEx {
    key: ArcStr,
    name: ArcStr,
    id: Option<u32>,
    experiment_id: Option<u32>,
    variables: Vec<VariableEx>,
}

impl From<Variation> for VariationEx {
    fn from(value: Variation) -> Self {
        Self {
            key: value.key.into(),
            name: value.name.into(),
            id: value.id,
            experiment_id: value.experiment_id,
            variables: value.variables.into_iter().map(VariableEx::from).collect(),
        }
    }
}

impl From<&Variation> for VariationEx {
    fn from(value: &Variation) -> Self {
        Self {
            key: value.key.clone().into(),
            name: value.name.clone().into(),
            id: value.id,
            experiment_id: value.experiment_id,
            variables: value.variables.iter().map(VariableEx::from).collect(),
        }
    }
}