chore: Update jsonschema
This commit is contained in:
parent
99369ca588
commit
f6655d00ee
3 changed files with 29 additions and 55 deletions
12
Cargo.lock
generated
12
Cargo.lock
generated
|
|
@ -729,7 +729,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c"
|
checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"windows-sys 0.48.0",
|
"windows-sys 0.59.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
@ -2157,9 +2157,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "jsonschema"
|
name = "jsonschema"
|
||||||
version = "0.26.2"
|
version = "0.28.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "26a960f0c34d5423581d858ce94815cc11f0171b09939409097969ed269ede1b"
|
checksum = "c2303ef9ebb6acd7afe7c48cbc06ab807349c429d4e47c4cde8b35400503198f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ahash 0.8.11",
|
"ahash 0.8.11",
|
||||||
"base64 0.22.1",
|
"base64 0.22.1",
|
||||||
|
|
@ -3476,9 +3476,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "referencing"
|
name = "referencing"
|
||||||
version = "0.26.2"
|
version = "0.28.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "fb8e15af8558cb157432dd3d88c1d1e982d0a5755cf80ce593b6499260aebc49"
|
checksum = "2fb7a1f338d8e32357ad1d7078454c248e5fdd2188fbb6966b400c2fa4d4f566"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ahash 0.8.11",
|
"ahash 0.8.11",
|
||||||
"fluent-uri",
|
"fluent-uri",
|
||||||
|
|
@ -5278,7 +5278,7 @@ version = "0.1.9"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
|
checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"windows-sys 0.48.0",
|
"windows-sys 0.59.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
|
||||||
|
|
@ -70,7 +70,7 @@ blue-build-process-management = { version = "=0.9.1", path = "./process" }
|
||||||
clap-verbosity-flag = "3"
|
clap-verbosity-flag = "3"
|
||||||
clap_complete = "4"
|
clap_complete = "4"
|
||||||
fuzzy-matcher = "0.3"
|
fuzzy-matcher = "0.3"
|
||||||
jsonschema = { version = "0.26", optional = true }
|
jsonschema = { version = "0.28", optional = true }
|
||||||
open = "5"
|
open = "5"
|
||||||
os_info = "3"
|
os_info = "3"
|
||||||
rayon = { version = "1", optional = true }
|
rayon = { version = "1", optional = true }
|
||||||
|
|
|
||||||
|
|
@ -1,31 +1,37 @@
|
||||||
use std::sync::Arc;
|
use jsonschema::paths::{LazyLocation, Location as JsonLocation};
|
||||||
|
|
||||||
use jsonschema::paths::{LazyLocation, Location as JsonLocation, LocationSegment};
|
#[derive(Debug, Default, Clone, PartialEq, Eq)]
|
||||||
|
pub struct Location(JsonLocation);
|
||||||
|
|
||||||
#[derive(Debug, Default, Clone, Hash, PartialEq, Eq)]
|
impl std::ops::Deref for Location {
|
||||||
pub struct Location(Arc<String>);
|
type Target = JsonLocation;
|
||||||
|
|
||||||
impl Location {
|
fn deref(&self) -> &Self::Target {
|
||||||
pub fn as_str(&self) -> &str {
|
&self.0
|
||||||
self.0.as_str()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<&JsonLocation> for Location {
|
impl std::ops::DerefMut for Location {
|
||||||
fn from(value: &JsonLocation) -> Self {
|
fn deref_mut(&mut self) -> &mut Self::Target {
|
||||||
Self(Arc::new(value.as_str().into()))
|
&mut self.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl std::hash::Hash for Location {
|
||||||
|
fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
|
||||||
|
self.0.as_str().hash(state);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<JsonLocation> for Location {
|
impl From<JsonLocation> for Location {
|
||||||
fn from(value: JsonLocation) -> Self {
|
fn from(value: JsonLocation) -> Self {
|
||||||
Self(Arc::new(value.as_str().into()))
|
Self(value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl std::fmt::Display for Location {
|
impl From<&JsonLocation> for Location {
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
fn from(value: &JsonLocation) -> Self {
|
||||||
write!(f, "{}", &self.0)
|
Self(value.clone())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -38,7 +44,7 @@ impl TryFrom<&str> for Location {
|
||||||
I: Iterator<Item = &'c str>,
|
I: Iterator<Item = &'c str>,
|
||||||
{
|
{
|
||||||
let Some(path) = path_iter.next() else {
|
let Some(path) = path_iter.next() else {
|
||||||
return JsonLocation::from(location).into();
|
return Location(JsonLocation::from(location));
|
||||||
};
|
};
|
||||||
let location = build(path, location);
|
let location = build(path, location);
|
||||||
child(path_iter, &location)
|
child(path_iter, &location)
|
||||||
|
|
@ -61,7 +67,7 @@ impl TryFrom<&str> for Location {
|
||||||
}
|
}
|
||||||
|
|
||||||
let Some(path) = path_iter.next() else {
|
let Some(path) = path_iter.next() else {
|
||||||
return Ok(Self::from(JsonLocation::from(&LazyLocation::new())));
|
return Ok(Self(JsonLocation::from(&LazyLocation::new())));
|
||||||
};
|
};
|
||||||
|
|
||||||
let location = LazyLocation::new();
|
let location = LazyLocation::new();
|
||||||
|
|
@ -86,35 +92,3 @@ impl TryFrom<String> for Location {
|
||||||
Self::try_from(value.as_str())
|
Self::try_from(value.as_str())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct LocationSegmentIterator<'a> {
|
|
||||||
iter: std::vec::IntoIter<LocationSegment<'a>>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'a> Iterator for LocationSegmentIterator<'a> {
|
|
||||||
type Item = LocationSegment<'a>;
|
|
||||||
|
|
||||||
fn next(&mut self) -> Option<Self::Item> {
|
|
||||||
self.iter.next()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'a> IntoIterator for &'a Location {
|
|
||||||
type Item = LocationSegment<'a>;
|
|
||||||
type IntoIter = LocationSegmentIterator<'a>;
|
|
||||||
|
|
||||||
fn into_iter(self) -> Self::IntoIter {
|
|
||||||
Self::IntoIter {
|
|
||||||
iter: self
|
|
||||||
.as_str()
|
|
||||||
.split('/')
|
|
||||||
.filter(|p| !p.is_empty())
|
|
||||||
.map(|p| {
|
|
||||||
p.parse::<usize>()
|
|
||||||
.map_or_else(|_| LocationSegment::Property(p), LocationSegment::Index)
|
|
||||||
})
|
|
||||||
.collect::<Vec<_>>()
|
|
||||||
.into_iter(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue