use serde::{Deserialize, Deserializer};
use std::collections::HashMap;
#[derive(Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
pub(crate) struct FeatureFlag {
key: String,
rollout_id: String,
experiment_ids: Vec<String>,
}
impl FeatureFlag {
#[allow(dead_code)]
pub fn key(&self) -> &str {
&self.key
}
pub fn rollout_id(&self) -> &str {
&self.rollout_id
}
pub fn experiments_ids(&self) -> &[String] {
&self.experiment_ids
}
}
#[derive(Debug)]
pub(crate) struct FeatureFlagMap(HashMap<String, FeatureFlag>);
impl<'de> Deserialize<'de> for FeatureFlagMap {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'de>,
{
let mut map = HashMap::new();
for flag in Vec::<FeatureFlag>::deserialize(deserializer)? {
map.insert(flag.key.clone(), flag);
}
Ok(Self(map))
}
}
impl FeatureFlagMap {
pub fn get(&self, key: &str) -> Option<&FeatureFlag> {
self.0.get(key)
}
}