use serde::{Deserialize, Deserializer};
use std::collections::HashMap;
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Variation {
id: String,
key: String,
feature_enabled: bool,
}
impl Variation {
pub fn id(&self) -> &str {
&self.id
}
pub fn key(&self) -> &str {
&self.key
}
pub fn is_feature_enabled(&self) -> bool {
self.feature_enabled
}
}
#[derive(Debug)]
pub struct VariationMap(HashMap<String, Variation>);
impl<'de> Deserialize<'de> for VariationMap {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'de>,
{
let mut map = HashMap::new();
for variation in Vec::<Variation>::deserialize(deserializer)? {
map.insert(variation.id.clone(), variation);
}
Ok(Self(map))
}
}
impl VariationMap {
pub fn get(&self, id: &str) -> Option<&Variation> {
self.0.get(id)
}
}