Stranger6667/jsonschema-rs

Can't resolve local url schema

Opened this issue · 2 comments

I have two json schemas, both placed inside resources/schema directory. Root dir is a cargo project dir. Main schema (extracted and simplified from my project):

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "file://resources/programSegment.schema.json",
  "$defs": {
    "portType": {
      "type": "array",
      "description": "Port list",
      "items": {
        "type": "string"
      }
    }
  },
  "type": "object",
  "properties": {
    "a": {
      "type": "string"
    },
    "b": {
      "$ref": "file://resources/schema/ports.schema.json#/$defs/portType"
    }
  }
}

Second schema:

{
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "$id": "file://resources/ports.schema.json",
    "$defs": {
      "portType": {
        "type": "array",
        "description": "Port list",
        "items": {
          "type": "string"
        }
      }
    }
}

When I create Json example, if portType is placed in the same file with the rest of the schema, everything works with local $ref. If I try to reference to another file, like in the example, validation fails.

After some debugging, I found that the issue may lie inside resolver.rs file. The current code simply tries to open an absolute path. As I work on Windows, it can't work, because of Windows path format. Also, that approach is not portable. Currently, I wrote my own resolver, who finds schemas inside directory inside cargo project. It would be nice to have such feature implemented.

Code clearly shows, that it's possible to set custom resolver instead of a default