mod vocabulary;
pub(super) use vocabulary::{
ChannelWaitOutcomeSchema, OptionScopeSchema, ResizeDirectionSchema, SelectPaneDirectionSchema,
SelectWindowDirectionSchema, SplitDirectionSchema, resize_direction, resize_direction_words,
split_direction, split_direction_words, words_or,
};
pub(super) fn strip_unknown_formats(schema: &mut serde_json::Map<String, serde_json::Value>) {
const KNOWN: &[&str] = &[
"date-time",
"date",
"time",
"duration",
"email",
"idn-email",
"hostname",
"idn-hostname",
"ipv4",
"ipv6",
"uri",
"uri-reference",
"iri",
"iri-reference",
"uuid",
"uri-template",
"json-pointer",
"relative-json-pointer",
"regex",
"int32",
"int64",
"float",
"double",
];
if schema
.get("format")
.and_then(serde_json::Value::as_str)
.is_some_and(|format| !KNOWN.contains(&format))
{
schema.remove("format");
}
for value in schema.values_mut() {
strip_value(value);
}
}
fn strip_value(value: &mut serde_json::Value) {
match value {
serde_json::Value::Object(map) => strip_unknown_formats(map),
serde_json::Value::Array(items) => items.iter_mut().for_each(strip_value),
_ => {}
}
}