diff --git a/crates/doc/src/reduce/schema.rs b/crates/doc/src/reduce/schema.rs index 9f1a564729..2c54ff13d0 100644 --- a/crates/doc/src/reduce/schema.rs +++ b/crates/doc/src/reduce/schema.rs @@ -31,18 +31,20 @@ pub fn json_schema_merge<'alloc, L: AsNode, R: AsNode>( let left = shape_from_node(lhs).map_err(|e| Error::with_location(e, loc))?; let right = shape_from_node(rhs).map_err(|e| Error::with_location(e, loc))?; + let mut merged_shape = Shape::union(left, right); + merged_shape.enforce_field_count_limits(json::Location::Root); + // Union together the LHS and RHS, and convert back from `Shape` into `HeapNode`. - let merged_doc = - serde_json::to_value(&SchemaBuilder::new(Shape::union(left, right)).root_schema()) - .and_then(|value| HeapNode::from_serde(value, alloc)) - .map_err(|e| { - Error::with_location( - Error::JsonSchemaMergeWrongType { - detail: Some(e.to_string()), - }, - loc, - ) - })?; + let merged_doc = serde_json::to_value(&SchemaBuilder::new(merged_shape).root_schema()) + .and_then(|value| HeapNode::from_serde(value, alloc)) + .map_err(|e| { + Error::with_location( + Error::JsonSchemaMergeWrongType { + detail: Some(e.to_string()), + }, + loc, + ) + })?; Ok(merged_doc) }