removed initial / in validator making paths consistent across validate merger and queryer

This commit is contained in:
2026-03-26 22:27:59 -04:00
parent eb91b65e65
commit c4e8e0309f
9 changed files with 83 additions and 39 deletions

View File

@ -41,6 +41,14 @@ impl<'a> ValidationContext<'a> {
}
}
pub fn join_path(&self, key: &str) -> String {
if self.path.is_empty() {
key.to_string()
} else {
format!("{}/{}", self.path, key)
}
}
pub fn derive(
&self,
schema: &'a Schema,

View File

@ -92,10 +92,10 @@ impl<'a> ValidationContext<'a> {
for (i, sub_schema) in prefix.iter().enumerate() {
if i < len {
if let Some(child_instance) = arr.get(i) {
let mut item_path = format!("{}/{}", self.path, i);
let mut item_path = self.join_path(&i.to_string());
if let Some(obj) = child_instance.as_object() {
if let Some(id_str) = obj.get("id").and_then(|v| v.as_str()) {
item_path = format!("{}/{}", self.path, id_str);
item_path = self.join_path(id_str);
}
}
let derived = self.derive(
@ -118,10 +118,10 @@ impl<'a> ValidationContext<'a> {
if let Some(ref items_schema) = self.schema.items {
for i in validation_index..len {
if let Some(child_instance) = arr.get(i) {
let mut item_path = format!("{}/{}", self.path, i);
let mut item_path = self.join_path(&i.to_string());
if let Some(obj) = child_instance.as_object() {
if let Some(id_str) = obj.get("id").and_then(|v| v.as_str()) {
item_path = format!("{}/{}", self.path, id_str);
item_path = self.join_path(id_str);
}
}
let derived = self.derive(

View File

@ -44,7 +44,7 @@ impl<'a> ValidationContext<'a> {
result.errors.push(ValidationError {
code: "STRICT_PROPERTY_VIOLATION".to_string(),
message: format!("Unexpected property '{}'", key),
path: format!("{}/{}", self.path, key),
path: self.join_path(key),
});
}
}
@ -53,11 +53,11 @@ impl<'a> ValidationContext<'a> {
if let Some(arr) = self.instance.as_array() {
for i in 0..arr.len() {
if !result.evaluated_indices.contains(&i) {
let mut item_path = format!("{}/{}", self.path, i);
let mut item_path = self.join_path(&i.to_string());
if let Some(child_instance) = arr.get(i) {
if let Some(obj) = child_instance.as_object() {
if let Some(id_str) = obj.get("id").and_then(|v| v.as_str()) {
item_path = format!("{}/{}", self.path, id_str);
item_path = self.join_path(id_str);
}
}
}

View File

@ -32,7 +32,7 @@ impl<'a> ValidationContext<'a> {
"Type '{}' is not a valid descendant for this entity bound schema",
type_str
),
path: format!("{}/type", self.path),
path: self.join_path("type"),
});
}
} else {
@ -70,7 +70,7 @@ impl<'a> ValidationContext<'a> {
result.errors.push(ValidationError {
code: "REQUIRED_FIELD_MISSING".to_string(),
message: format!("Missing {}", field),
path: format!("{}/{}", self.path, field),
path: self.join_path(field),
});
}
}
@ -109,7 +109,7 @@ impl<'a> ValidationContext<'a> {
}
if let Some(child_instance) = obj.get(key) {
let new_path = format!("{}/{}", self.path, key);
let new_path = self.join_path(key);
let is_ref = sub_schema.r#ref.is_some();
let next_extensible = if is_ref { false } else { self.extensible };
@ -147,7 +147,7 @@ impl<'a> ValidationContext<'a> {
for (compiled_re, sub_schema) in compiled_pp {
for (key, child_instance) in obj {
if compiled_re.0.is_match(key) {
let new_path = format!("{}/{}", self.path, key);
let new_path = self.join_path(key);
let is_ref = sub_schema.r#ref.is_some();
let next_extensible = if is_ref { false } else { self.extensible };
@ -186,7 +186,7 @@ impl<'a> ValidationContext<'a> {
}
if !locally_matched {
let new_path = format!("{}/{}", self.path, key);
let new_path = self.join_path(key);
let is_ref = additional_schema.r#ref.is_some();
let next_extensible = if is_ref { false } else { self.extensible };
@ -207,7 +207,7 @@ impl<'a> ValidationContext<'a> {
if let Some(ref property_names) = self.schema.property_names {
for key in obj.keys() {
let _new_path = format!("{}/propertyNames/{}", self.path, key);
let _new_path = self.join_path(&format!("propertyNames/{}", key));
let val_str = Value::String(key.to_string());
let ctx = ValidationContext::new(