statsig_rust/specs_response/
explicit_params.rs1use 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}