summaryrefslogtreecommitdiff
path: root/third_party/googleapis/google/api/expr/v1alpha1/checked.proto
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/googleapis/google/api/expr/v1alpha1/checked.proto')
-rw-r--r--third_party/googleapis/google/api/expr/v1alpha1/checked.proto343
1 files changed, 343 insertions, 0 deletions
diff --git a/third_party/googleapis/google/api/expr/v1alpha1/checked.proto b/third_party/googleapis/google/api/expr/v1alpha1/checked.proto
new file mode 100644
index 0000000..930dc4f
--- /dev/null
+++ b/third_party/googleapis/google/api/expr/v1alpha1/checked.proto
@@ -0,0 +1,343 @@
+// Copyright 2022 Google LLC
+//
+// 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.
+
+syntax = "proto3";
+
+package google.api.expr.v1alpha1;
+
+import "google/api/expr/v1alpha1/syntax.proto";
+import "google/protobuf/empty.proto";
+import "google/protobuf/struct.proto";
+
+option cc_enable_arenas = true;
+option go_package = "google.golang.org/genproto/googleapis/api/expr/v1alpha1;expr";
+option java_multiple_files = true;
+option java_outer_classname = "DeclProto";
+option java_package = "com.google.api.expr.v1alpha1";
+
+// Protos for representing CEL declarations and typed checked expressions.
+
+// A CEL expression which has been successfully type checked.
+message CheckedExpr {
+ // A map from expression ids to resolved references.
+ //
+ // The following entries are in this table:
+ //
+ // - An Ident or Select expression is represented here if it resolves to a
+ // declaration. For instance, if `a.b.c` is represented by
+ // `select(select(id(a), b), c)`, and `a.b` resolves to a declaration,
+ // while `c` is a field selection, then the reference is attached to the
+ // nested select expression (but not to the id or or the outer select).
+ // In turn, if `a` resolves to a declaration and `b.c` are field selections,
+ // the reference is attached to the ident expression.
+ // - Every Call expression has an entry here, identifying the function being
+ // called.
+ // - Every CreateStruct expression for a message has an entry, identifying
+ // the message.
+ map<int64, Reference> reference_map = 2;
+
+ // A map from expression ids to types.
+ //
+ // Every expression node which has a type different than DYN has a mapping
+ // here. If an expression has type DYN, it is omitted from this map to save
+ // space.
+ map<int64, Type> type_map = 3;
+
+ // The source info derived from input that generated the parsed `expr` and
+ // any optimizations made during the type-checking pass.
+ SourceInfo source_info = 5;
+
+ // The expr version indicates the major / minor version number of the `expr`
+ // representation.
+ //
+ // The most common reason for a version change will be to indicate to the CEL
+ // runtimes that transformations have been performed on the expr during static
+ // analysis. In some cases, this will save the runtime the work of applying
+ // the same or similar transformations prior to evaluation.
+ string expr_version = 6;
+
+ // The checked expression. Semantically equivalent to the parsed `expr`, but
+ // may have structural differences.
+ Expr expr = 4;
+}
+
+// Represents a CEL type.
+message Type {
+ // List type with typed elements, e.g. `list<example.proto.MyMessage>`.
+ message ListType {
+ // The element type.
+ Type elem_type = 1;
+ }
+
+ // Map type with parameterized key and value types, e.g. `map<string, int>`.
+ message MapType {
+ // The type of the key.
+ Type key_type = 1;
+
+ // The type of the value.
+ Type value_type = 2;
+ }
+
+ // Function type with result and arg types.
+ message FunctionType {
+ // Result type of the function.
+ Type result_type = 1;
+
+ // Argument types of the function.
+ repeated Type arg_types = 2;
+ }
+
+ // Application defined abstract type.
+ message AbstractType {
+ // The fully qualified name of this abstract type.
+ string name = 1;
+
+ // Parameter types for this abstract type.
+ repeated Type parameter_types = 2;
+ }
+
+ // CEL primitive types.
+ enum PrimitiveType {
+ // Unspecified type.
+ PRIMITIVE_TYPE_UNSPECIFIED = 0;
+
+ // Boolean type.
+ BOOL = 1;
+
+ // Int64 type.
+ //
+ // Proto-based integer values are widened to int64.
+ INT64 = 2;
+
+ // Uint64 type.
+ //
+ // Proto-based unsigned integer values are widened to uint64.
+ UINT64 = 3;
+
+ // Double type.
+ //
+ // Proto-based float values are widened to double values.
+ DOUBLE = 4;
+
+ // String type.
+ STRING = 5;
+
+ // Bytes type.
+ BYTES = 6;
+ }
+
+ // Well-known protobuf types treated with first-class support in CEL.
+ enum WellKnownType {
+ // Unspecified type.
+ WELL_KNOWN_TYPE_UNSPECIFIED = 0;
+
+ // Well-known protobuf.Any type.
+ //
+ // Any types are a polymorphic message type. During type-checking they are
+ // treated like `DYN` types, but at runtime they are resolved to a specific
+ // message type specified at evaluation time.
+ ANY = 1;
+
+ // Well-known protobuf.Timestamp type, internally referenced as `timestamp`.
+ TIMESTAMP = 2;
+
+ // Well-known protobuf.Duration type, internally referenced as `duration`.
+ DURATION = 3;
+ }
+
+ // The kind of type.
+ oneof type_kind {
+ // Dynamic type.
+ google.protobuf.Empty dyn = 1;
+
+ // Null value.
+ google.protobuf.NullValue null = 2;
+
+ // Primitive types: `true`, `1u`, `-2.0`, `'string'`, `b'bytes'`.
+ PrimitiveType primitive = 3;
+
+ // Wrapper of a primitive type, e.g. `google.protobuf.Int64Value`.
+ PrimitiveType wrapper = 4;
+
+ // Well-known protobuf type such as `google.protobuf.Timestamp`.
+ WellKnownType well_known = 5;
+
+ // Parameterized list with elements of `list_type`, e.g. `list<timestamp>`.
+ ListType list_type = 6;
+
+ // Parameterized map with typed keys and values.
+ MapType map_type = 7;
+
+ // Function type.
+ FunctionType function = 8;
+
+ // Protocol buffer message type.
+ //
+ // The `message_type` string specifies the qualified message type name. For
+ // example, `google.plus.Profile`.
+ string message_type = 9;
+
+ // Type param type.
+ //
+ // The `type_param` string specifies the type parameter name, e.g. `list<E>`
+ // would be a `list_type` whose element type was a `type_param` type
+ // named `E`.
+ string type_param = 10;
+
+ // Type type.
+ //
+ // The `type` value specifies the target type. e.g. int is type with a
+ // target type of `Primitive.INT`.
+ Type type = 11;
+
+ // Error type.
+ //
+ // During type-checking if an expression is an error, its type is propagated
+ // as the `ERROR` type. This permits the type-checker to discover other
+ // errors present in the expression.
+ google.protobuf.Empty error = 12;
+
+ // Abstract, application defined type.
+ AbstractType abstract_type = 14;
+ }
+}
+
+// Represents a declaration of a named value or function.
+//
+// A declaration is part of the contract between the expression, the agent
+// evaluating that expression, and the caller requesting evaluation.
+message Decl {
+ // Identifier declaration which specifies its type and optional `Expr` value.
+ //
+ // An identifier without a value is a declaration that must be provided at
+ // evaluation time. An identifier with a value should resolve to a constant,
+ // but may be used in conjunction with other identifiers bound at evaluation
+ // time.
+ message IdentDecl {
+ // Required. The type of the identifier.
+ Type type = 1;
+
+ // The constant value of the identifier. If not specified, the identifier
+ // must be supplied at evaluation time.
+ Constant value = 2;
+
+ // Documentation string for the identifier.
+ string doc = 3;
+ }
+
+ // Function declaration specifies one or more overloads which indicate the
+ // function's parameter types and return type.
+ //
+ // Functions have no observable side-effects (there may be side-effects like
+ // logging which are not observable from CEL).
+ message FunctionDecl {
+ // An overload indicates a function's parameter types and return type, and
+ // may optionally include a function body described in terms of
+ // [Expr][google.api.expr.v1alpha1.Expr] values.
+ //
+ // Functions overloads are declared in either a function or method
+ // call-style. For methods, the `params[0]` is the expected type of the
+ // target receiver.
+ //
+ // Overloads must have non-overlapping argument types after erasure of all
+ // parameterized type variables (similar as type erasure in Java).
+ message Overload {
+ // Required. Globally unique overload name of the function which reflects
+ // the function name and argument types.
+ //
+ // This will be used by a [Reference][google.api.expr.v1alpha1.Reference]
+ // to indicate the `overload_id` that was resolved for the function
+ // `name`.
+ string overload_id = 1;
+
+ // List of function parameter [Type][google.api.expr.v1alpha1.Type]
+ // values.
+ //
+ // Param types are disjoint after generic type parameters have been
+ // replaced with the type `DYN`. Since the `DYN` type is compatible with
+ // any other type, this means that if `A` is a type parameter, the
+ // function types `int<A>` and `int<int>` are not disjoint. Likewise,
+ // `map<string, string>` is not disjoint from `map<K, V>`.
+ //
+ // When the `result_type` of a function is a generic type param, the
+ // type param name also appears as the `type` of on at least one params.
+ repeated Type params = 2;
+
+ // The type param names associated with the function declaration.
+ //
+ // For example, `function ex<K,V>(K key, map<K, V> map) : V` would yield
+ // the type params of `K, V`.
+ repeated string type_params = 3;
+
+ // Required. The result type of the function. For example, the operator
+ // `string.isEmpty()` would have `result_type` of `kind: BOOL`.
+ Type result_type = 4;
+
+ // Whether the function is to be used in a method call-style `x.f(...)`
+ // or a function call-style `f(x, ...)`.
+ //
+ // For methods, the first parameter declaration, `params[0]` is the
+ // expected type of the target receiver.
+ bool is_instance_function = 5;
+
+ // Documentation string for the overload.
+ string doc = 6;
+ }
+
+ // Required. List of function overloads, must contain at least one overload.
+ repeated Overload overloads = 1;
+ }
+
+ // The fully qualified name of the declaration.
+ //
+ // Declarations are organized in containers and this represents the full path
+ // to the declaration in its container, as in `google.api.expr.Decl`.
+ //
+ // Declarations used as
+ // [FunctionDecl.Overload][google.api.expr.v1alpha1.Decl.FunctionDecl.Overload]
+ // parameters may or may not have a name depending on whether the overload is
+ // function declaration or a function definition containing a result
+ // [Expr][google.api.expr.v1alpha1.Expr].
+ string name = 1;
+
+ // Required. The declaration kind.
+ oneof decl_kind {
+ // Identifier declaration.
+ IdentDecl ident = 2;
+
+ // Function declaration.
+ FunctionDecl function = 3;
+ }
+}
+
+// Describes a resolved reference to a declaration.
+message Reference {
+ // The fully qualified name of the declaration.
+ string name = 1;
+
+ // For references to functions, this is a list of `Overload.overload_id`
+ // values which match according to typing rules.
+ //
+ // If the list has more than one element, overload resolution among the
+ // presented candidates must happen at runtime because of dynamic types. The
+ // type checker attempts to narrow down this list as much as possible.
+ //
+ // Empty if this is not a reference to a
+ // [Decl.FunctionDecl][google.api.expr.v1alpha1.Decl.FunctionDecl].
+ repeated string overload_id = 3;
+
+ // For references to constants, this may contain the value of the
+ // constant if known at compile time.
+ Constant value = 4;
+}