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
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}