//  Copyright 2017 Istio Authors
// 
//    Licensed under the Apache License, Version 2.0 (the "License");
//    you may not use this file except in compliance with the License.
//    You may obtain a copy of the License at
// 
//        http://www.apache.org/licenses/LICENSE-2.0
// 
//    Unless required by applicable law or agreed to in writing, software
//    distributed under the License is distributed on an "AS IS" BASIS,
//    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//    See the License for the specific language governing permissions and
//    limitations under the License.

//  Specifies runtime quota rules.
//   * Uses Istio attributes to match individual requests
//   * Specifies list of quotas to use for matched requests.
// 
//  Example1:
//  Charge "request_count" quota with 1 amount for all requests.
// 
//    QuotaSpec:
//      - rules
//        - quotas:
//            quota: request_count
//            charge: 1
// 
//  Example2:
//  For HTTP POST requests with path are prefixed with /books or
//  api.operation is create_books, charge two quotas:
//  * write_count of 1 amount
//  * request_count of 5 amount.
// 
//  ```yaml
//  QuotaSpec:
//    - rules:
//      - match:
//          clause:
//            request.path:
//              string_prefix: /books
//            request.http_method:
//              string_exact: POST
//      - match:
//          clause:
//            api.operation:
//              string_exact: create_books
//      - quotas:
//          quota: write_count
//          charge: 1
//      - quotas:
//          quota: request_count
//          charge: 5
//  ```
package client

//  Determines the quotas used for individual requests.
QuotaSpec: {
	//  A list of Quota rules.
	rules?: [...QuotaRule] @protobuf(1)
}

//  Specifies a rule with list of matches and list of quotas.
//  If any clause matched, the list of quotas will be used.
QuotaRule: {
	//  If empty, match all request.
	//  If any of match is true, it is matched.
	match?: [...AttributeMatch] @protobuf(1)

	//  The list of quotas to charge.
	quotas?: [...Quota] @protobuf(2)
}

//  Describes how to match a given string in HTTP headers. Match is
//  case-sensitive.
StringMatch: {
}
StringMatch: {
	//  exact string match
	exact: string @protobuf(1)
} | {
	//  prefix-based match
	prefix: string @protobuf(2)
} | {
	//  ECMAscript style regex-based match
	regex: string @protobuf(3)
}

//  Specifies a match clause to match Istio attributes
AttributeMatch: {
	//  Map of attribute names to StringMatch type.
	//  Each map element specifies one condition to match.
	// 
	//  Example:
	// 
	//    clause:
	//      source.uid:
	//        exact: SOURCE_UID
	//      request.http_method:
	//        exact: POST
	clause: {
		<_>: StringMatch
	} @protobuf(1,type=map<string,StringMatch>)
}

//  Specifies a quota to use with quota name and amount.
Quota: {
	//  The quota name to charge
	quota?: string @protobuf(1)

	//  The quota amount to charge
	charge?: int64 @protobuf(2)
}

//  QuotaSpecBinding defines the binding between QuotaSpecs and one or more
//  IstioService.
QuotaSpecBinding: {
	//  REQUIRED. One or more services to map the listed QuotaSpec onto.
	services?: [...IstioService] @protobuf(1)

	//  REQUIRED. One or more QuotaSpec references that should be mapped to
	//  the specified service(s). The aggregate collection of match
	//  conditions defined in the QuotaSpecs should not overlap.
	quotaSpecs?: [...QuotaSpecBinding_QuotaSpecReference] @protobuf(2,type=QuotaSpecReference,name=quota_specs)
}

//  QuotaSpecReference uniquely identifies the QuotaSpec used in the
//  Binding.
QuotaSpecBinding_QuotaSpecReference: {
	//  REQUIRED. The short name of the QuotaSpec. This is the resource
	//  name defined by the metadata name field.
	name?: string @protobuf(1)

	//  Optional namespace of the QuotaSpec. Defaults to the value of the
	//  metadata namespace field.
	namespace?: string @protobuf(2)
}
