//  Copyright 2016 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.

//  This package defines the Mixer API that the sidecar proxy uses to perform
//  precondition checks, manage quotas, and report telemetry.
package v1

import (
	"github.com/golang/protobuf/ptypes/duration"
	"google.golang.org/genproto/googleapis/rpc/status"
)

//  Used to get a thumbs-up/thumbs-down before performing an action.
CheckRequest: {

	//  The attributes to use for this request.
	// 
	//  Mixer's configuration determines how these attributes are used to
	//  establish the result returned in the response.
	attributes?: CompressedAttributes @protobuf(1,"(gogoproto.nullable)=false")

	//  The number of words in the global dictionary, used with to populate the attributes.
	//  This value is used as a quick way to determine whether the client is using a dictionary that
	//  the server understands.
	globalWordCount?: uint32 @protobuf(2,name=global_word_count)

	//  Used for deduplicating `Check` calls in the case of failed RPCs and retries. This should be a UUID
	//  per call, where the same UUID is used for retries of the same call.
	deduplicationId?: string @protobuf(3,name=deduplication_id)

	//  The individual quotas to allocate
	quotas <_>: CheckRequest_QuotaParams
}

//  parameters for a quota allocation
CheckRequest_QuotaParams: {
	//  Amount of quota to allocate
	amount?: int64 @protobuf(1)

	//  When true, supports returning less quota than what was requested.
	bestEffort?: bool @protobuf(2,name=best_effort)
}

//  The response generated by the Check method.
CheckResponse: {

	//  The precondition check results.
	precondition?: CheckResponse_PreconditionResult @protobuf(2,type=PreconditionResult,"(gogoproto.nullable)=false")

	//  The resulting quota, one entry per requested quota.
	quotas <_>: CheckResponse_QuotaResult
}

//  Expresses the result of a precondition check.
CheckResponse_PreconditionResult: {

	//  A status code of OK indicates all preconditions were satisfied. Any other code indicates not
	//  all preconditions were satisfied and details describe why.
	status?: __status.Status @protobuf(1,type=google.rpc.Status,"(gogoproto.nullable)=false")

	//  The amount of time for which this result can be considered valid.
	validDuration?: duration.Duration @protobuf(2,type=google.protobuf.Duration,name=valid_duration,"(gogoproto.nullable)=false","(gogoproto.stdduration)")

	//  The number of uses for which this result can be considered valid.
	validUseCount?: int32 @protobuf(3,name=valid_use_count)

	//  The total set of attributes that were used in producing the result
	//  along with matching conditions.
	referencedAttributes?: ReferencedAttributes @protobuf(5,name=referenced_attributes)

	//  An optional routing directive, used to manipulate the traffic metadata
	//  whenever all preconditions are satisfied.
	routeDirective?: RouteDirective @protobuf(6,name=route_directive)
}
__status = status

//  Expresses the result of a quota allocation.
CheckResponse_QuotaResult: {
	//  The amount of time for which this result can be considered valid.
	validDuration?: duration.Duration @protobuf(1,type=google.protobuf.Duration,name=valid_duration,"(gogoproto.nullable)=false","(gogoproto.stdduration)")

	//  The amount of granted quota. When `QuotaParams.best_effort` is true, this will be >= 0.
	//  If `QuotaParams.best_effort` is false, this will be either 0 or >= `QuotaParams.amount`.
	grantedAmount?: int64 @protobuf(2,name=granted_amount)

	//  The total set of attributes that were used in producing the result
	//  along with matching conditions.
	referencedAttributes?: ReferencedAttributes @protobuf(5,name=referenced_attributes,"(gogoproto.nullable)=false")
}

//  Describes the attributes that were used to determine the response.
//  This can be used to construct a response cache.
ReferencedAttributes: {

	//  The message-level dictionary. Refer to [CompressedAttributes][istio.mixer.v1.CompressedAttributes] for information
	//  on using dictionaries.
	words?: [...string] @protobuf(1)

	//  Describes a set of attributes.
	attributeMatches?: [...ReferencedAttributes_AttributeMatch] @protobuf(2,type=AttributeMatch,name=attribute_matches,"(gogoproto.nullable)=false")
}

//  How an attribute's value was matched
ReferencedAttributes_Condition:
	*"CONDITION_UNSPECIFIED" | //  should not occur
	"ABSENCE" | //  match when attribute doesn't exist
	"EXACT" | //  match when attribute value is an exact byte-for-byte match
	"REGEX" //  match when attribute value matches the included regex

ReferencedAttributes_Condition_value: {
	"CONDITION_UNSPECIFIED": 0
	"ABSENCE":               1
	"EXACT":                 2
	"REGEX":                 3
}

//  Describes a single attribute match.
ReferencedAttributes_AttributeMatch: {
	//  The name of the attribute. This is a dictionary index encoded in a manner identical
	//  to all strings in the [CompressedAttributes][istio.mixer.v1.CompressedAttributes] message.
	name?: int32 @protobuf(1,type=sint32)

	//  The kind of match against the attribute value.
	condition?: ReferencedAttributes_Condition @protobuf(2,type=Condition)

	//  If a REGEX condition is provided for a STRING_MAP attribute,
	//  clients should use the regex value to match against map keys.
	regex?: string @protobuf(3)

	//  A key in a STRING_MAP. When multiple keys from a STRING_MAP
	//  attribute were referenced, there will be multiple AttributeMatch
	//  messages with different map_key values. Values for map_key SHOULD
	//  be ignored for attributes that are not STRING_MAP.
	// 
	//  Indices for the keys are used (taken either from the
	//  message dictionary from the `words` field or the global dictionary).
	// 
	//  If no map_key value is provided for a STRING_MAP attribute, the
	//  entire STRING_MAP will be used.
	mapKey?: int32 @protobuf(4,type=sint32,name=map_key)
}

//  Operation on HTTP headers to replace, append, or remove a header. Header
//  names are normalized to lower-case with dashes, e.g.  "x-request-id".
//  Pseudo-headers ":path", ":authority", and ":method" are supported to modify
//  the request headers.
HeaderOperation: {

	//  Header name.
	name?: string @protobuf(1)

	//  Header value.
	value?: string @protobuf(2)

	//  Header operation.
	operation?: HeaderOperation_Operation @protobuf(3,type=Operation)
}

//  Operation type.
HeaderOperation_Operation:
	*"REPLACE" | //  replaces the header with the given name
	"REMOVE" | //  removes the header with the given name (the value is ignored)
	"APPEND" //  appends the value to the header value, or sets it if not present

HeaderOperation_Operation_value: {
	"REPLACE": 0
	"REMOVE":  1
	"APPEND":  2
}

//  Expresses the routing manipulation actions to be performed on behalf of
//  Mixer in response to a precondition check.
RouteDirective: {
	//  Operations on the request headers.
	requestHeaderOperations?: [...HeaderOperation] @protobuf(1,name=request_header_operations,"(gogoproto.nullable)=false")

	//  Operations on the response headers.
	responseHeaderOperations?: [...HeaderOperation] @protobuf(2,name=response_header_operations,"(gogoproto.nullable)=false")

	//  If set, enables a direct response without proxying the request to the routing
	//  destination. Required to be a value in the 2xx or 3xx range.
	directResponseCode?: uint32 @protobuf(3,name=direct_response_code)

	//  Supplies the response body for the direct response.
	//  If this setting is omitted, no body is included in the generated response.
	directResponseBody?: string @protobuf(4,name=direct_response_body)
}

//  Used to report telemetry after performing one or more actions.
ReportRequest: {

	//  next value: 5

	//  The attributes to use for this request.
	// 
	//  Each `Attributes` element represents the state of a single action. Multiple actions
	//  can be provided in a single message in order to improve communication efficiency. The
	//  client can accumulate a set of actions and send them all in one single message.
	attributes?: [...CompressedAttributes] @protobuf(1,"(gogoproto.nullable)=false")

	//  Indicates how to decode the attributes sets in this request.
	repeatedAttributesSemantics?: ReportRequest_RepeatedAttributesSemantics @protobuf(4,type=RepeatedAttributesSemantics,name=repeated_attributes_semantics)

	//  The default message-level dictionary for all the attributes.
	//  Individual attribute messages can have their own dictionaries, but if they don't
	//  then this set of words, if it is provided, is used instead.
	// 
	//  This makes it possible to share the same dictionary for all attributes in this
	//  request, which can substantially reduce the overall request size.
	defaultWords?: [...string] @protobuf(2,name=default_words)

	//  The number of words in the global dictionary.
	//  To detect global dictionary out of sync between client and server.
	globalWordCount?: uint32 @protobuf(3,name=global_word_count)
}

//  Used to signal how the sets of compressed attributes should be reconstitued server-side.
ReportRequest_RepeatedAttributesSemantics:
	//  Use delta encoding between sets of compressed attributes to reduce the overall on-wire
	//  request size. Each individual set of attributes is used to modify the previous set.
	//  NOTE: There is no way with this encoding to specify attribute value deletion. This 
	//  option should be used with extreme caution.
	*"DELTA_ENCODING" |

	//  Treat each set of compressed attributes as complete - independent from other sets
	//  in this request. This will result in on-wire duplication of attributes and values, but
	//  will allow for proper accounting of absent values in overall encoding.
	"INDEPENDENT_ENCODING"

ReportRequest_RepeatedAttributesSemantics_value: {
	"DELTA_ENCODING":       0
	"INDEPENDENT_ENCODING": 1
}

//  Used to carry responses to telemetry reports
ReportResponse: {
}
