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(crate) fn from_interned(parameters: Vec<InternedString>) -> Self {
14 Self {
15 inner: Arc::new(parameters),
16 }
17 }
18
19 pub fn from_vec(parameters: Vec<String>) -> Self {
20 Self::from_interned(
21 parameters
22 .into_iter()
23 .map(InternedString::from_string)
24 .collect(),
25 )
26 }
27
28 pub fn contains(&self, parameter: &str) -> bool {
29 self.inner.iter().any(|p| p.as_str() == parameter)
30 }
31
32 pub fn unperformant_to_vec(&self) -> Vec<String> {
33 self.inner
34 .iter()
35 .map(|p| p.unperformant_to_string())
36 .collect()
37 }
38
39 pub fn to_vec_interned(&self) -> Vec<&InternedString> {
40 self.inner.as_ref().iter().collect()
41 }
42
43 pub fn as_slice(&self) -> &[InternedString] {
44 self.inner.as_ref()
45 }
46}
47
48impl<'de> Deserialize<'de> for ExplicitParameters {
49 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
50 where
51 D: Deserializer<'de>,
52 {
53 let parameters = Vec::<InternedString>::deserialize(deserializer)?;
54 Ok(ExplicitParameters {
55 inner: Arc::new(parameters),
56 })
57 }
58}
59
60impl Serialize for ExplicitParameters {
61 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
62 where
63 S: Serializer,
64 {
65 self.inner.serialize(serializer)
66 }
67}