Skip to content

Commit 322b689

Browse files
authored
feat: add segment source metadata enum and bump-engine-test-data (#24)
- Add SegmentSource enum with Api and IdentityOverride variants - Update SegmentMetadata to use typed SegmentSource instead of optional string - Add snake_case serialization to support test data format - Update engine-test-data submodule to v3.4.2 - Export SegmentSource in public API
1 parent c655d52 commit 322b689

File tree

5 files changed

+27
-10
lines changed

5 files changed

+27
-10
lines changed

.gitmodules

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
[submodule "tests/engine_tests/engine-test-data"]
22
path = tests/engine_tests/engine-test-data
33
url = https://github.com/flagsmith/engine-test-data.git
4-
branch = v1.0.0
4+
branch = v3.4.2

src/engine_eval/context.rs

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,15 @@ use crate::types::FlagsmithValue;
22
use serde::{Deserialize, Serialize};
33
use std::collections::HashMap;
44

5+
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
6+
#[serde(rename_all = "snake_case")]
7+
pub enum SegmentSource {
8+
/// Segment came from the Flagsmith API.
9+
Api,
10+
/// Segment was created from identity overrides.
11+
IdentityOverride,
12+
}
13+
514
/// Represents metadata information about a feature.
615
#[derive(Clone, Debug, Serialize, Deserialize, Default, PartialEq)]
716
pub struct FeatureMetadata {
@@ -195,14 +204,22 @@ pub struct SegmentRule {
195204
}
196205

197206
/// Segment metadata.
198-
#[derive(Clone, Debug, Serialize, Deserialize, Default, PartialEq)]
207+
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
199208
pub struct SegmentMetadata {
200209
/// Segment ID.
201210
#[serde(skip_serializing_if = "Option::is_none")]
202211
pub segment_id: Option<i32>,
203-
/// Source of the segment (api or identity_override).
204-
#[serde(skip_serializing_if = "Option::is_none")]
205-
pub source: Option<String>,
212+
/// Source of the segment.
213+
pub source: SegmentSource,
214+
}
215+
216+
impl Default for SegmentMetadata {
217+
fn default() -> Self {
218+
Self {
219+
segment_id: None,
220+
source: SegmentSource::Api,
221+
}
222+
}
206223
}
207224

208225
/// Represents a segment context for feature flag evaluation.

src/engine_eval/mappers.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use super::context::{
22
Condition, ConditionOperator, EngineEvaluationContext, EnvironmentContext, FeatureContext,
33
FeatureMetadata, FeatureValue, IdentityContext, SegmentContext, SegmentMetadata, SegmentRule,
4-
SegmentRuleType,
4+
SegmentRuleType, SegmentSource,
55
};
66
use crate::environments::Environment;
77
use crate::features::{FeatureState, MultivariateFeatureStateValue};
@@ -100,7 +100,7 @@ fn map_segment_to_segment_context(segment: &Segment) -> SegmentContext {
100100
name: segment.name.clone(),
101101
metadata: SegmentMetadata {
102102
segment_id: Some(segment.id as i32),
103-
source: Some("api".to_string()),
103+
source: SegmentSource::Api,
104104
},
105105
overrides: vec![],
106106
rules: vec![],
@@ -237,7 +237,7 @@ fn map_identity_overrides_to_segments(identities: &[Identity]) -> HashMap<String
237237
name: "identity_overrides".to_string(),
238238
metadata: SegmentMetadata {
239239
segment_id: None,
240-
source: Some("identity_override".to_string()),
240+
source: SegmentSource::IdentityOverride,
241241
},
242242
overrides: vec![],
243243
rules: vec![SegmentRule {

src/engine_eval/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ pub mod segment_evaluator;
1111
pub mod mappers;
1212

1313
// Re-export commonly used types for convenience
14-
pub use context::{EngineEvaluationContext, FeatureContext, FeatureMetadata};
14+
pub use context::{EngineEvaluationContext, FeatureContext, FeatureMetadata, SegmentSource};
1515
pub use mappers::{add_identity_to_context, environment_to_context};
1616
pub use result::{EvaluationResult, FlagResult, SegmentResult};
1717
pub use segment_evaluator::is_context_in_segment;

0 commit comments

Comments
 (0)