feat(import): resolve references and schema composition
This commit is contained in:
@@ -32,8 +32,33 @@ pub fn schema_from_openapi(
|
||||
let Some(value) = value else {
|
||||
return primitive(SchemaKind::String, required, description);
|
||||
};
|
||||
// NormalizedIR keeps composition typed; the legacy preview adapter retains
|
||||
// its historical first-branch projection for pending v1 jobs.
|
||||
// Only v3 NormalizedIR emits the private marker. Pending legacy-v1 jobs
|
||||
// retain their historical first-branch behavior, while modern oneOf/anyOf
|
||||
// is projected losslessly through crank-schema's existing Oneof shape.
|
||||
if value
|
||||
.get("x-crank-lossless-composition")
|
||||
.and_then(Value::as_bool)
|
||||
== Some(true)
|
||||
&& let Some(items) = value
|
||||
.get("oneOf")
|
||||
.or_else(|| value.get("anyOf"))
|
||||
.and_then(Value::as_array)
|
||||
{
|
||||
return Schema {
|
||||
kind: SchemaKind::Oneof,
|
||||
description: description.or_else(|| text(value, "description")),
|
||||
required,
|
||||
nullable: nullable(value),
|
||||
default_value: value.get("default").cloned(),
|
||||
fields: BTreeMap::new(),
|
||||
items: None,
|
||||
enum_values: Vec::new(),
|
||||
variants: items
|
||||
.iter()
|
||||
.map(|item| schema_from_openapi(Some(item), true, None))
|
||||
.collect(),
|
||||
};
|
||||
}
|
||||
let resolved = collapse_composition(value);
|
||||
|
||||
if let Some(values) = resolved.get("enum").and_then(Value::as_array) {
|
||||
|
||||
Reference in New Issue
Block a user