diff --git a/Package.swift b/Package.swift index cf0befa..cf668d5 100644 --- a/Package.swift +++ b/Package.swift @@ -5,7 +5,7 @@ import PackageDescription let package = Package( name: "JSONSchema", platforms: [ - .macOS(.v10_13), + .macOS(.v10_13), .iOS(.v11), .tvOS(.v11) ], products: [ .library(name: "JSONSchema", targets: ["JSONSchema"]), diff --git a/Sources/RefResolver.swift b/Sources/RefResolver.swift index f268ea0..8bbd6e5 100644 --- a/Sources/RefResolver.swift +++ b/Sources/RefResolver.swift @@ -1,9 +1,15 @@ import Foundation func urlSplitFragment(url: String) -> (String, String) { + #if swift(>=5.0) + guard let hashIndex = url.firstIndex(of: "#") else { + return (url, "") + } + #else guard let hashIndex = url.index(of: "#") else { return (url, "") } + #endif return ( String(url.prefix(upTo: hashIndex)), diff --git a/Sources/Validation/required.swift b/Sources/Validation/required.swift index b75153a..51c86de 100644 --- a/Sources/Validation/required.swift +++ b/Sources/Validation/required.swift @@ -10,6 +10,8 @@ func required(context: Context, required: Any, instance: Any, schema: [String: A return AnySequence(required.compactMap { key -> ValidationError? in guard !instance.keys.contains(key) else { return nil } + context.instanceLocation.push(key) + defer { context.instanceLocation.pop() } return ValidationError( "Required property '\(key)' is missing", instanceLocation: context.instanceLocation, diff --git a/Tests/JSONSchemaTests/Validation/TestRequired.swift b/Tests/JSONSchemaTests/Validation/TestRequired.swift index e90ad75..9f3eecb 100644 --- a/Tests/JSONSchemaTests/Validation/TestRequired.swift +++ b/Tests/JSONSchemaTests/Validation/TestRequired.swift @@ -21,7 +21,7 @@ public let testRequired: ((ContextType) -> Void) = { let error = errors[0] try expect(error.description) == "Required property 'test' is missing" - try expect(error.instanceLocation.path) == "/0" + try expect(error.instanceLocation.path) == "/0/test" try expect(error.keywordLocation.path) == "#/items/required" } }