flagsmith_flag_engine/identities/
mod.rs1use super::features;
2use super::types::FlagsmithValue;
3use super::utils;
4use super::utils::datetime;
5use chrono::{DateTime, Utc};
6use serde::{Deserialize, Serialize};
7pub mod builders;
8
9#[derive(Serialize, Deserialize, Debug, Clone)]
10pub struct Trait {
11 pub trait_key: String,
12 pub trait_value: FlagsmithValue,
13}
14
15#[derive(Serialize, Deserialize, Debug, Clone)]
16pub struct Identity {
17 pub identifier: String,
18 pub environment_api_key: String,
19
20 #[serde(with = "datetime")]
21 pub created_date: DateTime<Utc>,
22
23 #[serde(default)]
24 pub identity_features: Vec<features::FeatureState>,
25
26 #[serde(default)]
27 pub identity_traits: Vec<Trait>,
28
29 #[serde(default = "utils::get_uuid")]
30 pub identity_uuid: String,
31 pub django_id: Option<u32>,
32}
33
34impl Identity {
35 pub fn composite_key(&self) -> String {
36 return self.environment_api_key.clone() + "_" + &self.identifier;
37 }
38 pub fn new(identifier: String, environment_api_key: String) -> Self {
39 Identity {
40 identifier,
41 environment_api_key,
42 created_date: chrono::Utc::now(),
43 identity_features: vec![],
44 identity_traits: vec![],
45 identity_uuid: utils::get_uuid(),
46 django_id: None,
47 }
48 }
49}
50
51#[cfg(test)]
52mod tests {
53 use super::*;
54
55 #[test]
56 fn composite_key_is_correct() {
57 let expected_composite_key = "test_api_key_test_user";
58 let identity_json = r#"{
59 "identifier": "test_user",
60 "environment_api_key": "test_api_key",
61 "created_date": "2022-03-02T12:31:05.309861",
62 "identity_features": [],
63 "identity_traits": [],
64 "identity_uuid":""
65 }"#;
66
67 let identity: Identity = serde_json::from_str(identity_json).unwrap();
68 assert_eq!(identity.composite_key(), expected_composite_key)
69 }
70}