statsig_rust/evaluation/
dynamic_string.rs1use serde::{Deserialize, Deserializer, Serialize, Serializer};
2use serde_json::Value as JsonValue;
3
4#[derive(Clone, PartialEq, Debug)]
5pub struct DynamicString {
6 pub value: String,
7 pub lowercased_value: String,
8}
9
10impl Serialize for DynamicString {
11 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
12 where
13 S: Serializer,
14 {
15 serializer.serialize_str(&self.value)
17 }
18}
19
20impl<'de> Deserialize<'de> for DynamicString {
21 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
22 where
23 D: Deserializer<'de>,
24 {
25 let json_value = JsonValue::deserialize(deserializer)?;
26 let value = match json_value {
27 JsonValue::String(value) => value,
28 _ => {
29 return Err(serde::de::Error::custom("Expected a string"));
30 }
31 };
32
33 Ok(DynamicString {
34 lowercased_value: value.to_lowercase(),
35 value: value.to_string(),
36 })
37 }
38}
39
40impl From<&String> for DynamicString {
41 fn from(value: &String) -> Self {
42 DynamicString {
43 value: value.clone(),
44 lowercased_value: value.clone().to_lowercase(),
45 }
46 }
47}