use std::collections::BTreeSet;
use serde_json::Value;
use super::{build_example_value, merge_example_value};
pub(super) fn merge_all_of_examples(
object: &serde_json::Map<String, Value>,
root: &Value,
visited_refs: &mut BTreeSet<String>,
reserved_keys: &BTreeSet<String>,
merged: &mut Option<Value>,
) {
let Some(values) = object.get("allOf").and_then(Value::as_array) else {
return;
};
for child in values {
let Some(example) = build_example_value(child, root, visited_refs, Some(reserved_keys))
else {
continue;
};
merge_example_value(merged, example);
}
}
pub(super) fn merge_first_non_null_branch_example(
keyword: &str,
object: &serde_json::Map<String, Value>,
root: &Value,
visited_refs: &mut BTreeSet<String>,
reserved_keys: &BTreeSet<String>,
merged: &mut Option<Value>,
) {
let Some(values) = object.get(keyword).and_then(Value::as_array) else {
return;
};
for candidate in values {
if schema_is_null(candidate) {
continue;
}
if let Some(example) =
build_example_value(candidate, root, visited_refs, Some(reserved_keys))
{
merge_example_value(merged, example);
break;
}
}
}
fn schema_is_null(schema: &Value) -> bool {
schema
.get("type")
.and_then(Value::as_str)
.is_some_and(|ty| ty == "null")
}