{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "definitions": {
    "artist": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": { "type": "string", "enum": [ "artist" ] },
        "name": { "type": "string" },
        "url": {
          "type": "string",
          "format": "uri"
        },
        "imageUrl": {
          "type": "string",
          "format": "uri"
        },
        "tags": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "genre": { "type": "string" },
        "location": { "type": "string" }
      },
      "required": [ "type", "name", "url", "imageUrl", "tags", "location" ]
    },
    "album": {
      "additionalProperties": false,
      "properties": {
        "type": { "type": "string", "enum": [ "album" ] },
        "name": { "type": "string" },
        "url": {
          "type": "string",
          "format": "uri"
        },
        "imageUrl": {
          "type": "string",
          "format": "uri"
        },
        "tags": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "releaseDate": { "type": "string" },
        "artist": { "type": "string" },
        "numTracks": { "type": "integer" },
        "numMinutes": { "type": "integer" }
      },
      "required": [ "type", "name", "url", "imageUrl", "tags", "releaseDate", "artist", "numTracks", "numMinutes" ]
    },
    "track": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": { "type": "string", "enum": [ "track" ] },
        "name": { "type": "string" },
        "url": {
          "type": "string",
          "format": "uri"
        },
        "imageUrl": {
          "type": "string",
          "format": "uri"
        },
        "tags": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "releaseDate": { "type": "string" },
        "album": { "type": "string" },
        "artist": { "type": "string" }
      },
      "required": [ "type", "name", "url", "imageUrl", "tags", "releaseDate", "album", "artist" ]
    },
    "fan": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": { "type": "string", "enum": [ "fan" ] },
        "name": { "type": "string" },
        "url": {
          "type": "string",
          "format": "uri"
        },
        "imageUrl": {
          "type": "string",
          "format": "uri"
        },
        "tags": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "genre": { "type": "string" }
      },
      "required": [ "type", "name", "url", "imageUrl", "tags", "genre" ]
    },
    "label": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": { "type": "string" },
        "name": { "type": "string" },
        "url": {
          "type": "string",
          "format": "uri"
        },
        "imageUrl": {
          "type": "string",
          "format": "uri"
        },
        "tags": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "required": [ "type", "name", "url", "imageUrl", "tags" ]
    }
  },
  "title" : "search-result",
  "description" : "The JSON schema that matches a search result.",
  "id": "https://mastert.github.io/bandcamp-scraper/schemas/search-result.json",
  "#/oneOf": [
    { "$ref": "definitions/artist" },
    { "$ref": "definitions/album" },
    { "$ref": "definitions/track" },
    { "$ref": "definitions/fan" },
    { "$ref": "definitions/label" }
  ]
}
