{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "type": "object",
    "required": [
        "extracted",
        "files"
    ],
    "properties": {
        "extracted": {
            "type": "boolean"
        },
        "files": {
            "type": "array",
            "items": {
                "type": "object",
                "required": [
                    "name",
                    "package_name",
                    "package_version"
                ],
                "properties": {
                    "name": {
                        "type": "string"
                    },
                    "package_name": {
                        "type": "string",
                        "minLength": 1
                    },
                    "package_version": {
                        "type": "string",
                        "minLength": 1
                    }
                },
                "oneOf": [
                    {
                        "$ref": "#/definitions/file_changed"
                    },
                    {
                        "$ref": "#/definitions/file_error"
                    }
                ]
            }
        }
    },
    "definitions": {
        "file_changed": {
            "required": [
                "status"
            ],
            "properties": {
                "status": {
                    "enum": [
                        "changed"
                    ]
                }
            },
            "oneOf": [
                {
                    "$ref": "#/definitions/file_changed_modified"
                },
                {
                    "$ref": "#/definitions/link_changed_modified"
                },
                {
                    "$ref": "#/definitions/file_changed_deleted"
                }
            ]
        },
        "file_changed_modified": {
            "required": [
                "changes",
                "mode",
                "user",
                "group",
                "type"
            ],
            "properties": {
                "changes": {
                    "type": "array",
                    "items": {
                        "enum": [
                            "size",
                            "mode",
                            "md5",
                            "device_number",
                            "link_path",
                            "user",
                            "group",
                            "time",
                            "capabilities",
                            "replaced",
                            "other_rpm_changes"
                        ]
                    },
                    "minItems": 1
                },
                "mode": {
                    "type": "string",
                    "pattern": "^[0-7]{3,4}$"
                },
                "user": {
                    "type": "string",
                    "minLength": 1
                },
                "group": {
                    "type": "string",
                    "minLength": 1
                },
                "type": {
                    "enum": [
                        "file",
                        "dir"
                    ]
                }
            }
        },
        "link_changed_modified": {
            "required": [
                "target",
                "changes",
                "mode",
                "user",
                "group",
                "type"
            ],
            "properties": {
                "changes": {
                    "type": "array",
                    "items": {
                        "enum": [
                            "size",
                            "mode",
                            "md5",
                            "device_number",
                            "link_path",
                            "user",
                            "group",
                            "time",
                            "capabilities",
                            "replaced",
                            "other_rpm_changes"
                        ]
                    },
                    "minItems": 1
                },
                "mode": {
                    "type": "string",
                    "pattern": "^[0-7]{3,4}$"
                },
                "user": {
                    "type": "string",
                    "minLength": 1
                },
                "group": {
                    "type": "string",
                    "minLength": 1
                },
                "type": {
                    "enum": [
                        "link"
                    ]
                },
                "target": {
                    "type": "string"
                }
            }
        },
        "file_changed_deleted": {
            "required": [
                "changes"
            ],
            "properties": {
                "changes": {
                    "enum": [
                        [
                            "deleted"
                        ]
                    ]
                }
            }
        },
        "file_error": {
            "required": [
                "status",
                "error_message"
            ],
            "properties": {
                "status": {
                    "enum": [
                        "error"
                    ]
                },
                "error_message": {
                    "type": "string"
                }
            }
        }
    }
}