Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitmodules
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
[submodule "tests/engine_tests/engine-test-data"]
path = tests/engine_tests/engine-test-data
url = https://github.com/flagsmith/engine-test-data.git
branch = v1.0.0
branch = v3.4.2
25 changes: 21 additions & 4 deletions src/engine_eval/context.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,15 @@ use crate::types::FlagsmithValue;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;

#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum SegmentSource {
/// Segment came from the Flagsmith API.
Api,
/// Segment was created from identity overrides.
IdentityOverride,
}

/// Represents metadata information about a feature.
#[derive(Clone, Debug, Serialize, Deserialize, Default, PartialEq)]
pub struct FeatureMetadata {
Expand Down Expand Up @@ -195,14 +204,22 @@ pub struct SegmentRule {
}

/// Segment metadata.
#[derive(Clone, Debug, Serialize, Deserialize, Default, PartialEq)]
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
pub struct SegmentMetadata {
/// Segment ID.
#[serde(skip_serializing_if = "Option::is_none")]
pub segment_id: Option<i32>,
/// Source of the segment (api or identity_override).
#[serde(skip_serializing_if = "Option::is_none")]
pub source: Option<String>,
/// Source of the segment.
pub source: SegmentSource,
}

impl Default for SegmentMetadata {
fn default() -> Self {
Self {
segment_id: None,
source: SegmentSource::Api,
}
}
}

/// Represents a segment context for feature flag evaluation.
Expand Down
6 changes: 3 additions & 3 deletions src/engine_eval/mappers.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use super::context::{
Condition, ConditionOperator, EngineEvaluationContext, EnvironmentContext, FeatureContext,
FeatureMetadata, FeatureValue, IdentityContext, SegmentContext, SegmentMetadata, SegmentRule,
SegmentRuleType,
SegmentRuleType, SegmentSource,
};
use crate::environments::Environment;
use crate::features::{FeatureState, MultivariateFeatureStateValue};
Expand Down Expand Up @@ -100,7 +100,7 @@ fn map_segment_to_segment_context(segment: &Segment) -> SegmentContext {
name: segment.name.clone(),
metadata: SegmentMetadata {
segment_id: Some(segment.id as i32),
source: Some("api".to_string()),
source: SegmentSource::Api,
},
overrides: vec![],
rules: vec![],
Expand Down Expand Up @@ -237,7 +237,7 @@ fn map_identity_overrides_to_segments(identities: &[Identity]) -> HashMap<String
name: "identity_overrides".to_string(),
metadata: SegmentMetadata {
segment_id: None,
source: Some("identity_override".to_string()),
source: SegmentSource::IdentityOverride,
},
overrides: vec![],
rules: vec![SegmentRule {
Expand Down
2 changes: 1 addition & 1 deletion src/engine_eval/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ pub mod segment_evaluator;
pub mod mappers;

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