Skip to content

Commit 00e0e9e

Browse files
authored
Add support for abstract dict and vector types (#41)
1 parent 7670325 commit 00e0e9e

File tree

2 files changed

+43
-17
lines changed

2 files changed

+43
-17
lines changed

src/schema.jl

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ function _recurse_get_element(schema::AbstractDict, element::String)
5555
return schema[element]
5656
end
5757

58-
function _recurse_get_element(schema::Vector, element::String)
58+
function _recurse_get_element(schema::AbstractVector, element::String)
5959
index = tryparse(Int, element) # Remember that `index` is 0-indexed!
6060
if index === nothing
6161
error("expected integer array index instead of '$(element)'.")
@@ -115,7 +115,7 @@ end
115115
resolve_refs!(::Any, ::URIs.URI, ::AbstractDict, ::String) = nothing
116116

117117
function resolve_refs!(
118-
schema::Vector,
118+
schema::AbstractVector,
119119
uri::URIs.URI,
120120
id_map::AbstractDict,
121121
parent_dir::String,
@@ -162,7 +162,11 @@ end
162162

163163
build_id_map!(::AbstractDict, ::Any, ::URIs.URI) = nothing
164164

165-
function build_id_map!(id_map::AbstractDict, schema::Vector, uri::URIs.URI)
165+
function build_id_map!(
166+
id_map::AbstractDict,
167+
schema::AbstractVector,
168+
uri::URIs.URI,
169+
)
166170
build_id_map!.(Ref(id_map), schema, Ref(uri))
167171
return
168172
end

src/validation.jl

Lines changed: 36 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ _validate(::Any, ::Any, ::Val, ::Any, ::String) = nothing
110110
###
111111

112112
# 9.2.1.1
113-
function _validate(x, schema, ::Val{:allOf}, val::Vector, path::String)
113+
function _validate(x, schema, ::Val{:allOf}, val::AbstractVector, path::String)
114114
for v in val
115115
ret = _validate(x, v, path)
116116
if ret !== nothing
@@ -121,7 +121,7 @@ function _validate(x, schema, ::Val{:allOf}, val::Vector, path::String)
121121
end
122122

123123
# 9.2.1.2
124-
function _validate(x, schema, ::Val{:anyOf}, val::Vector, path::String)
124+
function _validate(x, schema, ::Val{:anyOf}, val::AbstractVector, path::String)
125125
for v in val
126126
if _validate(x, v, path) === nothing
127127
return
@@ -131,7 +131,7 @@ function _validate(x, schema, ::Val{:anyOf}, val::Vector, path::String)
131131
end
132132

133133
# 9.2.1.3
134-
function _validate(x, schema, ::Val{:oneOf}, val::Vector, path::String)
134+
function _validate(x, schema, ::Val{:oneOf}, val::AbstractVector, path::String)
135135
found_match = false
136136
for v in val
137137
if _validate(x, v, path) === nothing
@@ -162,7 +162,7 @@ end
162162

163163
# 9.3.1.1
164164
function _validate(
165-
x::Vector,
165+
x::AbstractVector,
166166
schema,
167167
::Val{:items},
168168
val::AbstractDict,
@@ -180,7 +180,13 @@ function _validate(
180180
return _additional_items(x, schema, items, additionalItems, path)
181181
end
182182

183-
function _validate(x::Vector, schema, ::Val{:items}, val::Vector, path::String)
183+
function _validate(
184+
x::AbstractVector,
185+
schema,
186+
::Val{:items},
187+
val::AbstractVector,
188+
path::String,
189+
)
184190
items = fill(false, length(x))
185191
for (i, xi) in enumerate(x)
186192
if i > length(val)
@@ -196,7 +202,13 @@ function _validate(x::Vector, schema, ::Val{:items}, val::Vector, path::String)
196202
return _additional_items(x, schema, items, additionalItems, path)
197203
end
198204

199-
function _validate(x::Vector, schema, ::Val{:items}, val::Bool, path::String)
205+
function _validate(
206+
x::AbstractVector,
207+
schema,
208+
::Val{:items},
209+
val::Bool,
210+
path::String,
211+
)
200212
return val || (!val && length(x) == 0) ? nothing :
201213
SingleIssue(x, path, "items", val)
202214
end
@@ -223,7 +235,7 @@ _additional_items(x, schema, items, val::Nothing, path) = nothing
223235

224236
# 9.3.1.2
225237
function _validate(
226-
x::Vector,
238+
x::AbstractVector,
227239
schema,
228240
::Val{:additionalItems},
229241
val,
@@ -235,7 +247,13 @@ end
235247
# 9.3.1.3: unevaluatedProperties
236248

237249
# 9.3.1.4
238-
function _validate(x::Vector, schema, ::Val{:contains}, val, path::String)
250+
function _validate(
251+
x::AbstractVector,
252+
schema,
253+
::Val{:contains},
254+
val,
255+
path::String,
256+
)
239257
for (i, xi) in enumerate(x)
240258
ret = _validate(xi, val, path * "[$(i)]")
241259
if ret === nothing
@@ -365,7 +383,7 @@ function _validate(x, schema, ::Val{:type}, val::String, path::String)
365383
SingleIssue(x, path, "type", val) : nothing
366384
end
367385

368-
function _validate(x, schema, ::Val{:type}, val::Vector, path::String)
386+
function _validate(x, schema, ::Val{:type}, val::AbstractVector, path::String)
369387
if !any(v -> _is_type(x, Val{Symbol(v)}()), val)
370388
return SingleIssue(x, path, "type", val)
371389
end
@@ -528,7 +546,7 @@ end
528546

529547
# 6.4.1
530548
function _validate(
531-
x::Vector,
549+
x::AbstractVector,
532550
schema,
533551
::Val{:maxItems},
534552
val::Integer,
@@ -539,7 +557,7 @@ end
539557

540558
# 6.4.2
541559
function _validate(
542-
x::Vector,
560+
x::AbstractVector,
543561
schema,
544562
::Val{:minItems},
545563
val::Integer,
@@ -550,7 +568,7 @@ end
550568

551569
# 6.4.3
552570
function _validate(
553-
x::Vector,
571+
x::AbstractVector,
554572
schema,
555573
::Val{:uniqueItems},
556574
val::Bool,
@@ -600,7 +618,7 @@ function _validate(
600618
x::AbstractDict,
601619
schema,
602620
::Val{:required},
603-
val::Vector,
621+
val::AbstractVector,
604622
path::String,
605623
)
606624
return any(v -> !haskey(x, v), val) ?
@@ -625,7 +643,11 @@ function _validate(
625643
return
626644
end
627645

628-
function _dependencies(x::AbstractDict, path::String, val::Union{Bool,Dict})
646+
function _dependencies(
647+
x::AbstractDict,
648+
path::String,
649+
val::Union{Bool,AbstractDict},
650+
)
629651
return _validate(x, val, path) === nothing
630652
end
631653

0 commit comments

Comments
 (0)