{
  "kind": "discovery#describeItem",
  "name": "test",
  "version": "v1",
  "id": "test:v1",
  "description": "Discovery doc API used for testing the code generator",
  "basePath": "/test/",
  "rootUrl": "https://www.googleapis.com/",
  "servicePath": "test/v1/",
  "batchPath": "batch/test/v1",
  "rpcPath": "/rpc",
  "auth": {
    "oauth2": {
     "scopes": {
      "https://www.googleapis.com/auth/test": {
       "description": "View and manage things"
      },
      "https://www.googleapis.com/auth/test.readonly": {
       "description": "View things"
      }
     }
    }
   },
   "parameters": {
    "alt": {
      "type": "string",
      "description": "Data format for the response.",
      "default": "json",
      "enum": [
        "json"
      ],
      "enumDescriptions": [
        "Responses with Content-Type of application/json"
      ],
      "location": "query"
    },
    "fields": {
      "type": "string",
      "description": "Selector specifying which fields to include in a partial response.",
      "location": "query"
    },
    "key": {
      "type": "string",
      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
      "location": "query"
    },
    "oauth_token": {
      "type": "string",
      "description": "OAuth 2.0 token for the current user.",
      "location": "query"
    },
    "prettyPrint": {
      "type": "boolean",
      "description": "Returns response with indentations and line breaks.",
      "default": "true",
      "location": "query"
    },
    "quotaUser": {
      "type": "string",
      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.",
      "location": "query"
    },
    "userIp": {
      "type": "string",
      "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.",
      "location": "query"
    }
  },
  "schemas": {
    "Thing": {
      "id": "Thing",
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "etag": {
          "type": "string"
        },
        "kind": {
          "type": "string",
          "default": "test#thing"
        },
        "name": {
          "type": "string"
        },
        "enabled": {
          "type": "boolean"
        },
        "hat": {
          "$ref": "Hat"
        },
        "recursiveHat": {
          "$ref": "RecursiveHat"
        },
        "properties": {
          "$ref": "HashLikeThing"
        },
        "photo": {
          "type": "object",
          "properties": {
            "filename": {
              "type": "string"
            },
            "hash": {
              "type": "string"
            },
            "hashAlgorithm": {
              "type": "string"
            },
            "size": {
              "type": "integer"
            },
            "type": {
              "type": "string"
            }
          }
        }
      }
    },
    "Hat": {
      "type": "object",
      "variant": {
        "discriminant": "type",
        "map": [
          {
            "type_value": "topHat",
            "$ref": "TopHat"
          },
          {
            "type_value": "baseballHat",
            "$ref": "BaseballHat"
          }
        ]
      }
    },
    "RecursiveHat": {
      "id": "RecursiveHat",
      "type": "object",
      "properties": {
        "bool": {
          "type": "boolean",
          "description": "The bool value."
        },
        "double": {
          "type": "number",
          "description": "The double value.",
          "format": "double"
        },
        "image": {
          "$ref": "Image",
          "description": "The image value."
        },
        "int": {
          "type": "integer",
          "description": "The int value.",
          "format": "int32"
        },
        "kind": {
          "type": "string",
          "description": "The kind, fixed to \"test#recursiveHat\".",
          "default": "test#recursiveHat"
        },
        "list": {
          "type": "array",
          "description": "The list of typed values.",
          "items": {
            "$ref": "RecursiveHat"
          }
        },
        "string": {
          "type": "string",
          "description": "The string value."
        }
      },
      "additionalProperties": {
        "$ref": "RecursiveHat"
      }
    },
    "TopHat": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string"
        },
        "height": {
          "type": "number"
        }
      }
    },
    "BaseballHat": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string"
        },
        "color": {
          "type": "string"
        }
      }
    },
    "HashLikeThing": {
      "id": "HashLikeThing",
      "type": "object",
      "additionalProperties": {
        "type": "string",
        "description": "A mapping from export format to URL"
      }
    },
    "TestThing": {
      "id": "TestThing",
      "type": "object",
      "properties" :{}
    },
    "TestAnotherThing": {
      "id": "TestAnotherThing",
      "type": "object",
      "properties" :{}
    },
    "ThingList": {
      "id": "ThingList",
      "type": "object",
      "properties": {
        "items": {
          "type": "array",
          "description": "The actual list of files.",
          "items": {
            "$ref": "Thing"
          }
        },
        "kind": {
          "type": "string",
          "default": "test#thinglist"
        }
      }
    },
    "QueryResults": {
      "id": "QueryResults",
      "type": "object",
      "properties": {
        "rows": {
          "$ref": "Rows"
        }
      }
    },
    "Rows": {
      "id": "QueryResults",
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "value": {
            "type": "string"
          }
        }
      }
    }
  },
  "methods": {
    "query": {
      "path": "query",
      "id": "test.query",
      "httpMethod": "GET",
      "response": {
        "$ref": "QueryResults"
        //"$ref": "Rows" TODO: Support naked collections as a return value
      },
      "parameters": {
        "s": {
          "type": "string",
          "location": "query",
          "required": false,
          "repeated": false
        },
        "i": {
          "type": "integer",
          "location": "query",
          "required": false,
          "repeated": false,
          "minimum": "0",
          "maximum": "4294967295",
          "default": "20"
        },
        "n": {
          "type": "number",
          "location": "query",
          "required": false,
          "repeated": false
        },
        "b": {
          "type": "boolean",
          "location": "query",
          "required": false,
          "repeated": false
        },
        "a": {
          "type": "any",
          "location": "query",
          "required": false,
          "repeated": false
        },
        "e": {
          "type": "string",
          "location": "query",
          "required": false,
          "repeated": false,
          "enum": [
            "foo",
            "bar"
          ]
        },
        "er": {
          "type": "string",
          "location": "query",
          "required": false,
          "repeated": true,
          "enum": [
            "one",
            "two",
            "three"
          ]
        },
        "sr": {
          "type": "string",
          "location": "query",
          "required": false,
          "repeated": true,
          "pattern": "[a-z]+"
        },
        "do": {
          "type": "string",
          "location": "query",
          "required": false
        }
      }
    }
  },
  "resources": {
    "things": {
      "resources": {
        "subthings": {
          "methods": {
            "list": {
              "path": "things",
              "id": "test.things.subthings.list",
              "httpMethod": "GET",
              "parameters": {
                "max-results": {
                  "type": "number",
                  "location": "query",
                  "required": false
                }
              },
              "response": {
                "$ref": "ThingList"
              }
            }
          }
        }
      },
      "methods": {
        "list": {
          "path": "things",
          "id": "test.things.list",
          "httpMethod": "GET",
          "parameters": {
            "max-results": {
              "type": "number",
              "location": "query",
              "required": false
            }
          },
          "response": {
            "$ref": "ThingList"
          }
        },
        "delete": {
          "path": "things/{id}",
          "id": "test.things.delete",
          "httpMethod": "DELETE",
          "description": "Delete things",
          "parameters": {
            "id": {
              "location": "path",
              "required": true,
              "description": "ID of the thing to delete",
              "type": "string"
            }
          },
          "parameterOrder": [
            "id"
          ]
        },
        "get": {
          "path": "things/{id}",
          "id": "test.things.get",
          "httpMethod": "GET",
          "description": "Get things",
          "supportsMediaDownload": true,
          "parameters": {
            "id": {
              "location": "path",
              "required": true,
              "description": "ID of the thing to get",
              "type": "string"
            }
          },
          "supportsMediaDownload": true,
          "parameterOrder": [
            "id"
          ],
          "response": {
            "$ref": "Thing"
          }
        },
        "create": {
          "path": "things",
          "id": "test.things.create",
          "httpMethod": "POST",
          "description": "Create things",
          "request": {
            "$ref": "Thing"
          },
          "response": {
            "$ref": "Thing"
          },
          "supportsMediaUpload": true,
          "mediaUpload": {
            "accept": [
              "*/*"
            ],
            "maxSize": "1KB",
            "protocols": {
              "simple": {
                "multipart": true,
                "path": "upload/things/{id}"
              },
              "resumable": {
                "multipart": true,
                "path": "/resumable/upload/things/{id}"
              }
            }
          }
        },
        "update": {
          "path": "things/{id}",
          "id": "test.things.update",
          "httpMethod": "PUT",
          "description": "Update things",
          "parameters": {
            "id": {
              "location": "path",
              "description": "ID of the thing to update",
              "type": "string"
            }
          },
          "parameterOrder": [
            "id"
          ],
          "request": {
            "$ref": "Thing"
          },
          "response": {
            "$ref": "Thing"
          },
          "supportsMediaUpload": true,
          "mediaUpload": {
            "accept": [
              "*/*"
            ],
            "maxSize": "1KB",
            "protocols": {
              "simple": {
                "multipart": true,
                "path": "upload/things/{id}"
              },
              "resumable": {
                "multipart": true,
                "path": "/resumable/upload/things/{id}"
              }
            }
          }
        }
      }
    }
  }
}
