diff options
Diffstat (limited to 'third_party/googleapis/google/api/expr/v1alpha1/checked.proto')
| -rw-r--r-- | third_party/googleapis/google/api/expr/v1alpha1/checked.proto | 343 | 
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; +}  | 
