statsig_rust/evaluation/
dynamic_returnable.rs

1use std::collections::HashMap;
2
3use serde::{Deserialize, Deserializer, Serialize, Serializer};
4use serde_json::{from_value, Value as JsonValue};
5
6#[derive(Clone, Debug, PartialEq)]
7pub struct DynamicReturnable {
8    pub value: JsonValue,
9    pub string_value: String,
10    pub json_value: Option<HashMap<String, JsonValue>>,
11}
12
13impl Serialize for DynamicReturnable {
14    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
15    where
16        S: Serializer,
17    {
18        serializer.serialize_str(&self.string_value)
19    }
20}
21
22impl<'de> Deserialize<'de> for DynamicReturnable {
23    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
24    where
25        D: Deserializer<'de>,
26    {
27        let value = JsonValue::deserialize(deserializer)?;
28        let string_value = value.to_string();
29        let json_value = from_value(value.clone()).ok();
30
31        Ok(DynamicReturnable {
32            value,
33            string_value,
34            json_value,
35        })
36    }
37}