| { |
| "$schema": "http://json-schema.org/draft-07/schema#", |
| "$id": "https://something/app_schema.json", |
| "definitions": { |
| "app_id": {"type": "string", "enum": ["0F5096E8", "85CDB22F"]} |
| }, |
| "type": "object", |
| "properties": { |
| "availability": { |
| "type": "object", |
| "patternProperties": { |
| "[0-9a-fA-F]": { |
| "type": "string", |
| "enum": ["APP_AVAILABLE", "APP_UNAVAILABLE"] |
| } |
| }, |
| "additionalProperties": false |
| }, |
| "type": { |
| "type": "string", |
| "enum": ["LAUNCH", "STOP", "GET_APP_AVAILABILITY"] |
| }, |
| "responseType": {"type": "string", "enum": ["GET_APP_AVAILABILITY"]}, |
| "requestId": {"type": "integer", "minimum": 0}, |
| "language": {"type": "string", "minLength": 2}, |
| "supportedAppTypes": { |
| "type": "array", |
| "items": {"type": "string", "enum": ["ANDROID_TV", "WEB"]} |
| } |
| }, |
| "required": ["requestId"], |
| "allOf": [ |
| { |
| "if": { |
| "properties": {"type": {"const": "GET_APP_AVAILABILITY"}}, |
| "required": ["type"] |
| }, |
| "then": { |
| "properties": { |
| "appId": {"type": "array", "items": {"$ref": "#/definitions/app_id"}} |
| }, |
| "required": ["appId"] |
| }, |
| "else": {"properties": {"appId": {"$ref": "#/definitions/app_id"}}} |
| }, |
| { |
| "if": { |
| "properties": {"responseType": {"const": "GET_APP_AVAILABILITY"}}, |
| "required": ["responseType"] |
| }, |
| "then": {"required": ["availability"]} |
| }, |
| { |
| "if": {"properties": {"type": {"const": "LAUNCH"}}, "required": ["type"]}, |
| "then": {"required": ["supportedAppTypes", "language", "appId"]} |
| }, |
| { |
| "if": {"properties": {"type": {"const": "STOP"}}, "required": ["type"]}, |
| "then": {"required": ["sessionId"]} |
| } |
| ] |
| } |