Skip to main content

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    pub fn to_vec_interned(&self) -> Vec<&InternedString> {
36        self.inner.as_ref().iter().collect()
37    }
38}
39
40impl<'de> Deserialize<'de> for ExplicitParameters {
41    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
42    where
43        D: Deserializer<'de>,
44    {
45        let parameters = Vec::<InternedString>::deserialize(deserializer)?;
46        Ok(ExplicitParameters {
47            inner: Arc::new(parameters),
48        })
49    }
50}
51
52impl Serialize for ExplicitParameters {
53    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
54    where
55        S: Serializer,
56    {
57        self.inner.serialize(serializer)
58    }
59}