flagsmith_flag_engine/identities/
mod.rs

1use 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}