statsig_rust/evaluation/
dynamic_returnable.rs1use 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}