diff --git a/src/segment.rs b/src/segment.rs index 4145f9d..48f8640 100644 --- a/src/segment.rs +++ b/src/segment.rs @@ -36,6 +36,8 @@ pub struct Segment { #[serde(default)] pub unbounded: bool, #[serde(default)] + unbounded_context_kind: Option, + #[serde(default)] generation: Option, /// An integer that is incremented by LaunchDarkly every time the configuration of the segment @@ -302,6 +304,61 @@ mod tests { assert!(segment.excluded_contexts.is_empty()); } + #[test] + fn handles_unbounded_context_kind() { + let json = r#"{ + "key": "segment", + "included": [], + "excluded": [], + "rules": [], + "salt": "salty", + "unbounded": true, + "unboundedContextKind": "org", + "generation": 2, + "version": 1 + }"#; + + let segment: Segment = serde_json::from_str(json).expect("Failed to parse segment"); + assert!(segment.unbounded); + assert_eq!(segment.unbounded_context_kind, Some(Kind::from("org"))); + assert_eq!(segment.generation, Some(2)); + } + + #[test] + fn unbounded_context_kind_defaults_to_none() { + let json = r#"{ + "key": "segment", + "included": [], + "excluded": [], + "rules": [], + "salt": "salty", + "unbounded": true, + "version": 1 + }"#; + + let segment: Segment = serde_json::from_str(json).expect("Failed to parse segment"); + assert!(segment.unbounded); + assert_eq!(segment.unbounded_context_kind, None); + } + + #[test] + fn unbounded_context_kind_user() { + let json = r#"{ + "key": "segment", + "included": [], + "excluded": [], + "rules": [], + "salt": "salty", + "unbounded": true, + "unboundedContextKind": "user", + "generation": 1, + "version": 1 + }"#; + + let segment: Segment = serde_json::from_str(json).expect("Failed to parse segment"); + assert_eq!(segment.unbounded_context_kind, Some(Kind::user())); + } + #[test] fn handles_context_schema() { let json = &r#"{ @@ -362,6 +419,7 @@ mod tests { rules: vec![], salt: "salty".to_string(), unbounded: false, + unbounded_context_kind: None, generation: Some(1), version: 1, }