diff --git a/src/engine_eval/context.rs b/src/engine_eval/context.rs index f4f84f3..6ec41b4 100644 --- a/src/engine_eval/context.rs +++ b/src/engine_eval/context.rs @@ -17,6 +17,13 @@ pub struct FeatureMetadata { /// The feature ID. #[serde(default)] pub feature_id: u32, + /// The feature type (e.g., "STANDARD", "MULTIVARIATE"). + #[serde(default = "default_feature_type")] + pub feature_type: String, +} + +fn default_feature_type() -> String { + "STANDARD".to_string() } /// Represents a multivariate value for a feature flag. diff --git a/src/engine_eval/mappers.rs b/src/engine_eval/mappers.rs index 07ea630..c075f57 100644 --- a/src/engine_eval/mappers.rs +++ b/src/engine_eval/mappers.rs @@ -68,6 +68,11 @@ fn map_feature_state_to_feature_context(fs: &FeatureState) -> FeatureContext { variants: map_multivariate_values_to_variants(&fs.multivariate_feature_state_values), metadata: FeatureMetadata { feature_id: fs.feature.id, + feature_type: fs + .feature + .feature_type + .clone() + .unwrap_or_else(|| "STANDARD".to_string()), }, }; @@ -184,6 +189,7 @@ struct OverrideKey { enabled: String, feature_value: String, feature_id: u32, + feature_type: String, } /// Maps identity overrides to segment contexts @@ -207,6 +213,11 @@ fn map_identity_overrides_to_segments(identities: &[Identity]) -> HashMap HashMap, + pub feature_type: Option, } #[derive(Serialize, Deserialize, Clone, Debug)]