From 264876da8c40c40c5f92ddafdc4f59b98fcb88cb Mon Sep 17 00:00:00 2001 From: Gagan Trivedi Date: Mon, 19 Jan 2026 15:37:07 +0530 Subject: [PATCH] feat: Add feature_type to FeatureMetadata Add feature_type field to FeatureMetadata struct so it can be included in FlagResult. This allows consumers to know whether a feature is STANDARD, MULTIVARIATE, etc. Changes: - Make Feature.feature_type public - Add feature_type: String to FeatureMetadata with default "STANDARD" - Update mappers to populate feature_type from Feature, defaulting to "STANDARD" when the source value is None --- src/engine_eval/context.rs | 7 +++++++ src/engine_eval/mappers.rs | 12 ++++++++++++ src/features/mod.rs | 2 +- 3 files changed, 20 insertions(+), 1 deletion(-) 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)]