use serde_json::{Map, Value};
pub(crate) fn escape(segment: &str) -> String {
segment.replace('~', "~0").replace('/', "~1")
}
pub(crate) fn object_mut<'a>(
map: &'a mut Map<String, Value>,
key: &str,
) -> Option<&'a mut Map<String, Value>> {
map.get_mut(key).and_then(Value::as_object_mut)
}
pub(crate) fn column_styles(
token: &mut Map<String, Value>,
) -> impl Iterator<Item = (&String, &mut Map<String, Value>)> {
object_mut(token, "columns_config")
.into_iter()
.flat_map(|config| config.iter_mut())
.filter_map(|(name, style)| style.as_object_mut().map(|style| (name, style)))
}
pub(crate) fn rename(map: &mut Map<String, Value>, from: &str, to: &str) -> Option<Value> {
let value = map.shift_remove(from)?;
if map.contains_key(to) {
Some(value)
} else {
map.insert(to.to_owned(), value);
None
}
}