in confidence/src/flag_schema_deserializer.rs [29:78]
fn visit_map<V>(self, mut map: V) -> Result<Self::Value, V::Error>
where
V: MapAccess<'de>,
{
let mut schema: HashMap<String, SchemaType> = HashMap::new();
if let Some((_, entry_value)) = map.next_entry::<String, Value>()? {
// "schema: {...}"
if let Value::Object(entry_map) = entry_value {
let entry_map: HashMap<String, Value> = entry_map.into_iter().collect();
for (key, value) in &entry_map {
if let Some(_) = value.get("boolSchema") {
schema.insert(key.into(), SchemaType::BoolType);
continue;
}
if let Some(_) = value.get("intSchema") {
schema.insert(key.into(), SchemaType::IntType);
continue;
}
if let Some(_) = value.get("stringSchema") {
schema.insert(key.into(), SchemaType::StringType);
continue;
}
if let Some(_) = value.get("doubleSchema") {
schema.insert(key.into(), SchemaType::DoubleType);
continue;
}
if let Some(Value::Object(struct_schema)) = value.get("structSchema") {
let struct_schema: HashMap<String, Value> =
struct_schema.clone().into_iter().collect();
let struct_type =
FlagSchema::deserialize(struct_schema.into_deserializer())
.map_err(serde::de::Error::custom)?;
schema.insert(
key.into(),
SchemaType::StructType(Box::new(struct_type.schema)),
);
continue;
}
}
}
}
Ok(FlagSchema { schema })
}