statsig_rust/specs_response/
explicit_params.rs

1use std::sync::Arc;
2
3use serde::{Deserialize, Deserializer, Serialize, Serializer};
4
5use crate::interned_string::InternedString;
6
7#[derive(Clone, PartialEq, Debug, Default)]
8pub struct ExplicitParameters {
9    inner: Arc<Vec<InternedString>>,
10}
11
12impl ExplicitParameters {
13    pub fn from_vec(parameters: Vec<String>) -> Self {
14        Self {
15            inner: Arc::new(
16                parameters
17                    .into_iter()
18                    .map(InternedString::from_string)
19                    .collect(),
20            ),
21        }
22    }
23
24    pub fn contains(&self, parameter: &str) -> bool {
25        self.inner.iter().any(|p| p.as_str() == parameter)
26    }
27
28    pub fn unperformant_to_vec(&self) -> Vec<String> {
29        self.inner
30            .iter()
31            .map(|p| p.unperformant_to_string())
32            .collect()
33    }
34}
35
36impl<'de> Deserialize<'de> for ExplicitParameters {
37    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
38    where
39        D: Deserializer<'de>,
40    {
41        let parameters = Vec::<InternedString>::deserialize(deserializer)?;
42        Ok(ExplicitParameters {
43            inner: Arc::new(parameters),
44        })
45    }
46}
47
48impl Serialize for ExplicitParameters {
49    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
50    where
51        S: Serializer,
52    {
53        self.inner.serialize(serializer)
54    }
55}