Documentation ¶
Overview ¶
Package types contains the types, traits, and utilities common to all components of expression handling.
Index ¶
- Constants
- Variables
- func DurationGetHours(val ref.Val) ref.Val
- func DurationGetMilliseconds(val ref.Val) ref.Val
- func DurationGetMinutes(val ref.Val) ref.Val
- func DurationGetSeconds(val ref.Val) ref.Val
- func Equal(lhs ref.Val, rhs ref.Val) ref.Val
- func IndexOrError(index ref.Val) (int, error)
- func InsertMapKeyValue(m traits.Mapper, k, v ref.Val) ref.Val
- func IsBool(elem ref.Val) bool
- func IsError(val ref.Val) bool
- func IsPrimitiveType(val ref.Val) bool
- func IsUnknown(val ref.Val) bool
- func IsUnknownOrError(val ref.Val) bool
- func LabelErrNode(id int64, val ref.Val) ref.Val
- func MaybeNoSuchOverloadErr(val ref.Val) ref.Val
- func NewDynamicList(adapter Adapter, value any) traits.Lister
- func NewDynamicMap(adapter Adapter, value any) traits.Mapper
- func NewErr(format string, args ...any) ref.Val
- func NewErrWithNodeID(id int64, format string, args ...any) ref.Val
- func NewJSONList(adapter Adapter, l *structpb.ListValue) traits.Lister
- func NewJSONStruct(adapter Adapter, value *structpb.Struct) traits.Mapper
- func NewMutableList(adapter Adapter) traits.MutableLister
- func NewMutableMap(adapter Adapter, mutableValues map[ref.Val]ref.Val) traits.MutableMapper
- func NewObject(adapter Adapter, typeDesc *pb.TypeDescription, typeValue ref.Val, ...) ref.Val
- func NewProtoList(adapter Adapter, list protoreflect.List) traits.Lister
- func NewProtoMap(adapter Adapter, value *pb.Map) traits.Mapper
- func NewRefValList(adapter Adapter, elems []ref.Val) traits.Lister
- func NewRefValMap(adapter Adapter, value map[ref.Val]ref.Val) traits.Mapper
- func NewStringInterfaceMap(adapter Adapter, value map[string]any) traits.Mapper
- func NewStringList(adapter Adapter, elems []string) traits.Lister
- func NewStringStringMap(adapter Adapter, value map[string]string) traits.Mapper
- func NoSuchOverloadErr() ref.Val
- func StringContains(s, sub ref.Val) ref.Val
- func StringEndsWith(s, suf ref.Val) ref.Val
- func StringStartsWith(s, pre ref.Val) ref.Val
- func ToFoldableList(l traits.Lister) traits.Foldable
- func ToFoldableMap(m traits.Mapper) traits.Foldable
- func TypeToExprType(t *Type) (*exprpb.Type, error)
- func UnsupportedRefValConversionErr(val any) ref.Val
- func ValOrErr(val ref.Val, format string, args ...any) ref.Val
- func WrapErr(err error) ref.Val
- type Adapter
- type AttributeQualifier
- type AttributeTrail
- type Bool
- func (b Bool) Compare(other ref.Val) ref.Val
- func (b Bool) ConvertToNative(typeDesc reflect.Type) (any, error)
- func (b Bool) ConvertToType(typeVal ref.Type) ref.Val
- func (b Bool) Equal(other ref.Val) ref.Val
- func (b Bool) IsZeroValue() bool
- func (b Bool) Negate() ref.Val
- func (b Bool) Type() ref.Type
- func (b Bool) Value() any
- type Bytes
- func (b Bytes) Add(other ref.Val) ref.Val
- func (b Bytes) Compare(other ref.Val) ref.Val
- func (b Bytes) ConvertToNative(typeDesc reflect.Type) (any, error)
- func (b Bytes) ConvertToType(typeVal ref.Type) ref.Val
- func (b Bytes) Equal(other ref.Val) ref.Val
- func (b Bytes) IsZeroValue() bool
- func (b Bytes) Size() ref.Val
- func (b Bytes) Type() ref.Type
- func (b Bytes) Value() any
- type Double
- func (d Double) Add(other ref.Val) ref.Val
- func (d Double) Compare(other ref.Val) ref.Val
- func (d Double) ConvertToNative(typeDesc reflect.Type) (any, error)
- func (d Double) ConvertToType(typeVal ref.Type) ref.Val
- func (d Double) Divide(other ref.Val) ref.Val
- func (d Double) Equal(other ref.Val) ref.Val
- func (d Double) IsZeroValue() bool
- func (d Double) Multiply(other ref.Val) ref.Val
- func (d Double) Negate() ref.Val
- func (d Double) Subtract(subtrahend ref.Val) ref.Val
- func (d Double) Type() ref.Type
- func (d Double) Value() any
- type Duration
- func (d Duration) Add(other ref.Val) ref.Val
- func (d Duration) Compare(other ref.Val) ref.Val
- func (d Duration) ConvertToNative(typeDesc reflect.Type) (any, error)
- func (d Duration) ConvertToType(typeVal ref.Type) ref.Val
- func (d Duration) Equal(other ref.Val) ref.Val
- func (d Duration) IsZeroValue() bool
- func (d Duration) Negate() ref.Val
- func (d Duration) Receive(function string, overload string, args []ref.Val) ref.Val
- func (d Duration) Subtract(subtrahend ref.Val) ref.Val
- func (d Duration) Type() ref.Type
- func (d Duration) Value() any
- type Err
- func (e *Err) ConvertToNative(typeDesc reflect.Type) (any, error)
- func (e *Err) ConvertToType(typeVal ref.Type) ref.Val
- func (e *Err) Equal(other ref.Val) ref.Val
- func (e *Err) Is(target error) bool
- func (e *Err) NodeID() int64
- func (e *Err) String() string
- func (e *Err) Type() ref.Type
- func (e *Err) Unwrap() error
- func (e *Err) Value() any
- type Error
- type FieldType
- type Int
- func (i Int) Add(other ref.Val) ref.Val
- func (i Int) Compare(other ref.Val) ref.Val
- func (i Int) ConvertToNative(typeDesc reflect.Type) (any, error)
- func (i Int) ConvertToType(typeVal ref.Type) ref.Val
- func (i Int) Divide(other ref.Val) ref.Val
- func (i Int) Equal(other ref.Val) ref.Val
- func (i Int) IsZeroValue() bool
- func (i Int) Modulo(other ref.Val) ref.Val
- func (i Int) Multiply(other ref.Val) ref.Val
- func (i Int) Negate() ref.Val
- func (i Int) Subtract(subtrahend ref.Val) ref.Val
- func (i Int) Type() ref.Type
- func (i Int) Value() any
- type Kind
- type Null
- type Optional
- func (o *Optional) ConvertToNative(typeDesc reflect.Type) (any, error)
- func (o *Optional) ConvertToType(typeVal ref.Type) ref.Val
- func (o *Optional) Equal(other ref.Val) ref.Val
- func (o *Optional) GetValue() ref.Val
- func (o *Optional) HasValue() bool
- func (o *Optional) String() string
- func (o *Optional) Type() ref.Type
- func (o *Optional) Value() any
- type Provider
- type Registry
- func (p *Registry) Copy() *Registry
- func (p *Registry) EnumValue(enumName string) ref.Val
- func (p *Registry) FindFieldType(structType, fieldName string) (*ref.FieldType, bool)deprecated
- func (p *Registry) FindIdent(identName string) (ref.Val, bool)
- func (p *Registry) FindStructFieldNames(structType string) ([]string, bool)
- func (p *Registry) FindStructFieldType(structType, fieldName string) (*FieldType, bool)
- func (p *Registry) FindStructType(structType string) (*Type, bool)
- func (p *Registry) FindType(structType string) (*exprpb.Type, bool)deprecated
- func (p *Registry) NativeToValue(value any) ref.Val
- func (p *Registry) NewValue(structType string, fields map[string]ref.Val) ref.Val
- func (p *Registry) RegisterDescriptor(fileDesc protoreflect.FileDescriptor) error
- func (p *Registry) RegisterMessage(message proto.Message) error
- func (p *Registry) RegisterType(types ...ref.Type) error
- type String
- func (s String) Add(other ref.Val) ref.Val
- func (s String) Compare(other ref.Val) ref.Val
- func (s String) ConvertToNative(typeDesc reflect.Type) (any, error)
- func (s String) ConvertToType(typeVal ref.Type) ref.Val
- func (s String) Equal(other ref.Val) ref.Val
- func (s String) IsZeroValue() bool
- func (s String) Match(pattern ref.Val) ref.Val
- func (s String) Receive(function string, overload string, args []ref.Val) ref.Val
- func (s String) Size() ref.Val
- func (s String) Type() ref.Type
- func (s String) Value() any
- type Timestamp
- func (t Timestamp) Add(other ref.Val) ref.Val
- func (t Timestamp) Compare(other ref.Val) ref.Val
- func (t Timestamp) ConvertToNative(typeDesc reflect.Type) (any, error)
- func (t Timestamp) ConvertToType(typeVal ref.Type) ref.Val
- func (t Timestamp) Equal(other ref.Val) ref.Val
- func (t Timestamp) IsZeroValue() bool
- func (t Timestamp) Receive(function string, overload string, args []ref.Val) ref.Val
- func (t Timestamp) Subtract(subtrahend ref.Val) ref.Val
- func (t Timestamp) Type() ref.Type
- func (t Timestamp) Value() any
- type Type
- func AlphaProtoAsType(t *exprpb.Type) (*Type, error)
- func ExprTypeToType(t *exprpb.Type) (*Type, error)
- func NewListType(elemType *Type) *Type
- func NewMapType(keyType, valueType *Type) *Type
- func NewNullableType(wrapped *Type) *Type
- func NewObjectType(typeName string, traits ...int) *Type
- func NewObjectTypeValue(typeName string) *Typedeprecated
- func NewOpaqueType(name string, params ...*Type) *Type
- func NewOptionalType(param *Type) *Type
- func NewTypeParamType(paramName string) *Type
- func NewTypeTypeWithParam(param *Type) *Type
- func NewTypeValue(typeName string, traits ...int) *Typedeprecated
- func ProtoAsType(t *celpb.Type) (*Type, error)
- func (t *Type) ConvertToNative(typeDesc reflect.Type) (any, error)
- func (t *Type) ConvertToType(typeVal ref.Type) ref.Val
- func (t *Type) DeclaredTypeName() string
- func (t *Type) Equal(other ref.Val) ref.Val
- func (t *Type) HasTrait(trait int) bool
- func (t *Type) IsAssignableRuntimeType(val ref.Val) bool
- func (t *Type) IsAssignableType(fromType *Type) bool
- func (t *Type) IsEquivalentType(other *Type) bool
- func (t *Type) IsExactType(other *Type) bool
- func (t *Type) Kind() Kind
- func (t *Type) Parameters() []*Type
- func (t *Type) String() string
- func (t *Type) Type() ref.Type
- func (t *Type) TypeName() string
- func (t *Type) Value() any
- func (t *Type) WithTraits(traits int) *Type
- type Uint
- func (i Uint) Add(other ref.Val) ref.Val
- func (i Uint) Compare(other ref.Val) ref.Val
- func (i Uint) ConvertToNative(typeDesc reflect.Type) (any, error)
- func (i Uint) ConvertToType(typeVal ref.Type) ref.Val
- func (i Uint) Divide(other ref.Val) ref.Val
- func (i Uint) Equal(other ref.Val) ref.Val
- func (i Uint) IsZeroValue() bool
- func (i Uint) Modulo(other ref.Val) ref.Val
- func (i Uint) Multiply(other ref.Val) ref.Val
- func (i Uint) Subtract(subtrahend ref.Val) ref.Val
- func (i Uint) Type() ref.Type
- func (i Uint) Value() any
- type Unknown
- func (u *Unknown) Contains(other *Unknown) bool
- func (u *Unknown) ConvertToNative(typeDesc reflect.Type) (any, error)
- func (u *Unknown) ConvertToType(typeVal ref.Type) ref.Val
- func (u *Unknown) Equal(other ref.Val) ref.Val
- func (u *Unknown) GetAttributeTrails(id int64) ([]*AttributeTrail, bool)
- func (u *Unknown) IDs() []int64
- func (u *Unknown) String() string
- func (u *Unknown) Type() ref.Type
- func (u *Unknown) Value() any
Constants ¶
const ( False = Bool(false) True = Bool(true) )
Boolean constants
const ( // IntZero is the zero-value for Int IntZero = Int(0) IntOne = Int(1) IntNegOne = Int(-1) )
Int constants used for comparison results.
Variables ¶
var ( // OptionalType indicates the runtime type of an optional value. OptionalType = NewOpaqueType("optional_type") // OptionalNone is a sentinel value which is used to indicate an empty optional value. OptionalNone = &Optional{} )
var ( // AnyType represents the google.protobuf.Any type. AnyType = &Type{ kind: AnyKind, runtimeTypeName: "google.protobuf.Any", traitMask: traits.FieldTesterType | traits.IndexerType, } // BoolType represents the bool type. BoolType = &Type{ kind: BoolKind, runtimeTypeName: "bool", traitMask: traits.ComparerType | traits.NegatorType, } // BytesType represents the bytes type. BytesType = &Type{ kind: BytesKind, runtimeTypeName: "bytes", traitMask: traits.AdderType | traits.ComparerType | traits.SizerType, } // DoubleType represents the double type. DoubleType = &Type{ kind: DoubleKind, runtimeTypeName: "double", traitMask: traits.AdderType | traits.ComparerType | traits.DividerType | traits.MultiplierType | traits.NegatorType | traits.SubtractorType, } // DurationType represents the CEL duration type. DurationType = &Type{ kind: DurationKind, runtimeTypeName: "google.protobuf.Duration", traitMask: traits.AdderType | traits.ComparerType | traits.NegatorType | traits.ReceiverType | traits.SubtractorType, } // DynType represents a dynamic CEL type whose type will be determined at runtime from context. DynType = &Type{ kind: DynKind, runtimeTypeName: "dyn", } // ErrorType represents a CEL error value. ErrorType = &Type{ kind: ErrorKind, runtimeTypeName: "error", } // IntType represents the int type. IntType = &Type{ kind: IntKind, runtimeTypeName: "int", traitMask: traits.AdderType | traits.ComparerType | traits.DividerType | traits.ModderType | traits.MultiplierType | traits.NegatorType | traits.SubtractorType, } // ListType represents the runtime list type. ListType = NewListType(nil) // MapType represents the runtime map type. MapType = NewMapType(nil, nil) // NullType represents the type of a null value. NullType = &Type{ kind: NullTypeKind, runtimeTypeName: "null_type", } // StringType represents the string type. StringType = &Type{ kind: StringKind, runtimeTypeName: "string", traitMask: traits.AdderType | traits.ComparerType | traits.MatcherType | traits.ReceiverType | traits.SizerType, } // TimestampType represents the time type. TimestampType = &Type{ kind: TimestampKind, runtimeTypeName: "google.protobuf.Timestamp", traitMask: traits.AdderType | traits.ComparerType | traits.ReceiverType | traits.SubtractorType, } // TypeType represents a CEL type TypeType = &Type{ kind: TypeKind, runtimeTypeName: "type", } // UintType represents a uint type. UintType = &Type{ kind: UintKind, runtimeTypeName: "uint", traitMask: traits.AdderType | traits.ComparerType | traits.DividerType | traits.ModderType | traits.MultiplierType | traits.SubtractorType, } // UnknownType represents an unknown value type. UnknownType = &Type{ kind: UnknownKind, runtimeTypeName: "unknown", } )
var DefaultTypeAdapter = &defaultTypeAdapter{}
DefaultTypeAdapter adapts canonical CEL types from their equivalent Go values.
var ( // ErrType singleton. ErrType = NewOpaqueType("error") )
var ( // IteratorType singleton. IteratorType = NewObjectType("iterator", traits.IteratorType) )
var ( // NullValue singleton. NullValue = Null(structpb.NullValue_NULL_VALUE) )
var ProtoCELPrimitives = map[protoreflect.Kind]*Type{ protoreflect.BoolKind: BoolType, protoreflect.BytesKind: BytesType, protoreflect.DoubleKind: DoubleType, protoreflect.FloatKind: DoubleType, protoreflect.Int32Kind: IntType, protoreflect.Int64Kind: IntType, protoreflect.Sint32Kind: IntType, protoreflect.Sint64Kind: IntType, protoreflect.Uint32Kind: UintType, protoreflect.Uint64Kind: UintType, protoreflect.Fixed32Kind: UintType, protoreflect.Fixed64Kind: UintType, protoreflect.Sfixed32Kind: IntType, protoreflect.Sfixed64Kind: IntType, protoreflect.StringKind: StringType, }
ProtoCELPrimitives provides a map from the protoreflect Kind to the equivalent CEL type.
Functions ¶
func DurationGetHours ¶
DurationGetHours returns the duration in hours.
func DurationGetMilliseconds ¶
DurationGetMilliseconds returns duration in milliseconds.
func DurationGetMinutes ¶
DurationGetMinutes returns duration in minutes.
func DurationGetSeconds ¶
DurationGetSeconds returns duration in seconds.
func IndexOrError ¶
IndexOrError converts an input index value into either a lossless integer index or an error.
func InsertMapKeyValue ¶
InsertMapKeyValue inserts a key, value pair into the target map if the target map does not already contain the given key.
If the map is mutable, it is modified in-place per the MutableMapper contract. If the map is not mutable, a copy containing the new key, value pair is made.
func IsError ¶
IsError returns whether the input element ref.Type or ref.Val is equal to the ErrType singleton.
func IsPrimitiveType ¶
IsPrimitiveType returns whether the input element ref.Val is a primitive type. Note, primitive types do not include well-known types such as Duration and Timestamp.
func IsUnknownOrError ¶
IsUnknownOrError returns whether the input element ref.Val is an ErrType or UnknownType.
func LabelErrNode ¶
LabelErrNode returns val unaltered it is not an Err or if the error has a non-zero AST node ID already present. Otherwise the id is added to the error for recovery with the Err.NodeID method.
func MaybeNoSuchOverloadErr ¶
MaybeNoSuchOverloadErr returns the error or unknown if the input ref.Val is one of these types, else a new no such overload error.
func NewDynamicList ¶
NewDynamicList returns a traits.Lister with heterogenous elements. value should be an array of "native" types, i.e. any type that NativeToValue() can convert to a ref.Val.
func NewDynamicMap ¶
NewDynamicMap returns a traits.Mapper value with dynamic key, value pairs.
func NewErr ¶
NewErr creates a new Err described by the format string and args. TODO: Audit the use of this function and standardize the error messages and codes.
func NewErrWithNodeID ¶
NewErrWithNodeID creates a new Err described by the format string and args. TODO: Audit the use of this function and standardize the error messages and codes.
func NewJSONList ¶
NewJSONList returns a traits.Lister based on structpb.ListValue instance.
func NewJSONStruct ¶
NewJSONStruct creates a traits.Mapper implementation backed by a JSON struct that has been encoded in protocol buffer form.
The `adapter` argument provides type adaptation capabilities from proto to CEL.
func NewMutableList ¶
func NewMutableList(adapter Adapter) traits.MutableLister
NewMutableList creates a new mutable list whose internal state can be modified.
func NewMutableMap ¶
NewMutableMap constructs a mutable map from an adapter and a set of map values.
func NewObject ¶
func NewObject(adapter Adapter, typeDesc *pb.TypeDescription, typeValue ref.Val, value proto.Message, ) ref.Val
NewObject returns an object based on a proto.Message value which handles conversion between protobuf type values and expression type values. Objects support indexing and iteration.
Note: the type value is pulled from the list of registered types within the type provider. If the proto type is not registered within the type provider, then this will result in an error within the type adapter / provider.
func NewProtoList ¶
func NewProtoList(adapter Adapter, list protoreflect.List) traits.Lister
NewProtoList returns a traits.Lister based on a pb.List instance.
func NewProtoMap ¶
NewProtoMap returns a specialized traits.Mapper for handling protobuf map values.
func NewRefValList ¶
NewRefValList returns a traits.Lister with ref.Val elements.
This type specialization is used with list literals within CEL expressions.
func NewRefValMap ¶
NewRefValMap returns a specialized traits.Mapper with CEL valued keys and values.
func NewStringInterfaceMap ¶
NewStringInterfaceMap returns a specialized traits.Mapper with string keys and interface values.
func NewStringList ¶
NewStringList returns a traits.Lister containing only strings.
func NewStringStringMap ¶
NewStringStringMap returns a specialized traits.Mapper with string keys and values.
func NoSuchOverloadErr ¶
NoSuchOverloadErr returns a new types.Err instance with a no such overload message.
func StringContains ¶
StringContains returns whether the string contains a substring.
func StringEndsWith ¶
StringEndsWith returns whether the target string contains the input suffix.
func StringStartsWith ¶
StringStartsWith returns whether the target string contains the input prefix.
func ToFoldableList ¶
ToFoldableList will create a Foldable version of a list suitable for key-value pair iteration.
For values which are already Foldable, this call is a no-op. For all other values, the fold is driven via the Size() and Get() calls which means that the folding will function, but take a performance hit.
func ToFoldableMap ¶
ToFoldableMap will create a Foldable version of a map suitable for key-value pair iteration.
For values which are already Foldable, this call is a no-op. For all other values, the fold is driven via the Iterator HasNext() and Next() calls as well as the map's Get() method which means that the folding will function, but take a performance hit.
func TypeToExprType ¶
TypeToExprType converts a CEL-native type representation to a protobuf CEL Type representation.
func UnsupportedRefValConversionErr ¶
UnsupportedRefValConversionErr returns a types.NewErr instance with a no such conversion message that indicates that the native value could not be converted to a CEL ref.Val.
Types ¶
type Adapter ¶
type Adapter = ref.TypeAdapter
Adapter converts native Go values of varying type and complexity to equivalent CEL values.
type AttributeQualifier ¶
AttributeQualifier constrains the possible types which may be used to qualify an attribute.
type AttributeTrail ¶
type AttributeTrail struct {
// contains filtered or unexported fields
}
AttributeTrail specifies a variable with an optional qualifier path. An attribute value is expected to correspond to an AbsoluteAttribute, meaning a field selection which starts with a top-level variable.
The qualifer path elements adhere to the AttributeQualifier type constraint.
func NewAttributeTrail ¶
func NewAttributeTrail(variable string) *AttributeTrail
NewAttributeTrail creates a new simple attribute from a variable name.
func QualifyAttribute ¶
func QualifyAttribute[T AttributeQualifier](attr *AttributeTrail, qualifier T) *AttributeTrail
QualifyAttribute qualifies an attribute using a valid AttributeQualifier type.
func (*AttributeTrail) Equal ¶
func (a *AttributeTrail) Equal(other *AttributeTrail) bool
Equal returns whether two attribute values have the same variable name and qualifier paths.
func (*AttributeTrail) QualifierPath ¶
func (a *AttributeTrail) QualifierPath() []any
QualifierPath returns the optional set of qualifying fields or indices applied to the variable.
func (*AttributeTrail) String ¶
func (a *AttributeTrail) String() string
String returns the string representation of the Attribute.
func (*AttributeTrail) Variable ¶
func (a *AttributeTrail) Variable() string
Variable returns the variable name associated with the attribute.
type Bool ¶
type Bool bool
Bool type that implements ref.Val and supports comparison and negation.
func (Bool) ConvertToNative ¶
ConvertToNative implements the ref.Val interface method.
func (Bool) ConvertToType ¶
ConvertToType implements the ref.Val interface method.
func (Bool) IsZeroValue ¶
IsZeroValue returns true if the boolean value is false.
type Bytes ¶
type Bytes []byte
Bytes type that implements ref.Val and supports add, compare, and size operations.
func (Bytes) Compare ¶
Compare implements traits.Comparer interface method by lexicographic ordering.
func (Bytes) ConvertToNative ¶
ConvertToNative implements the ref.Val interface method.
func (Bytes) ConvertToType ¶
ConvertToType implements the ref.Val interface method.
func (Bytes) IsZeroValue ¶
IsZeroValue returns true if the byte array is empty.
type Double ¶
type Double float64
Double type that implements ref.Val, comparison, and mathematical operations.
func (Double) ConvertToNative ¶
ConvertToNative implements ref.Val.ConvertToNative.
func (Double) ConvertToType ¶
ConvertToType implements ref.Val.ConvertToType.
func (Double) IsZeroValue ¶
IsZeroValue returns true if double value is 0.0
type Duration ¶
Duration type that implements ref.Val and supports add, compare, negate, and subtract operators. This type is also a receiver which means it can participate in dispatch to receiver functions.
func (Duration) ConvertToNative ¶
ConvertToNative implements ref.Val.ConvertToNative.
func (Duration) ConvertToType ¶
ConvertToType implements ref.Val.ConvertToType.
func (Duration) IsZeroValue ¶
IsZeroValue returns true if the duration value is zero
type Err ¶
type Err struct {
// contains filtered or unexported fields
}
Err type which extends the built-in go error and implements ref.Val.
func (*Err) ConvertToNative ¶
ConvertToNative implements ref.Val.ConvertToNative.
func (*Err) ConvertToType ¶
ConvertToType implements ref.Val.ConvertToType.
type FieldType ¶
type FieldType struct { // Type of the field as a CEL native type value. Type *Type // IsSet indicates whether the field is set on an input object. IsSet ref.FieldTester // GetFrom retrieves the field value on the input object, if set. GetFrom ref.FieldGetter }
FieldType represents a field's type value and whether that field supports presence detection.
type Int ¶
type Int int64
Int type that implements ref.Val as well as comparison and math operators.
func (Int) ConvertToNative ¶
ConvertToNative implements ref.Val.ConvertToNative.
func (Int) ConvertToType ¶
ConvertToType implements ref.Val.ConvertToType.
func (Int) IsZeroValue ¶
IsZeroValue returns true if integer is equal to 0
type Kind ¶
type Kind uint
Kind indicates a CEL type's kind which is used to differentiate quickly between simple and complex types.
const ( // UnspecifiedKind is returned when the type is nil or its kind is not specified. UnspecifiedKind Kind = iota // DynKind represents a dynamic type. This kind only exists at type-check time. DynKind // AnyKind represents a google.protobuf.Any type. This kind only exists at type-check time. // Prefer DynKind to AnyKind as AnyKind has a specific meaning which is based on protobuf // well-known types. AnyKind // BoolKind represents a boolean type. BoolKind // BytesKind represents a bytes type. BytesKind // DoubleKind represents a double type. DoubleKind // DurationKind represents a CEL duration type. DurationKind // ErrorKind represents a CEL error type. ErrorKind // IntKind represents an integer type. IntKind // ListKind represents a list type. ListKind // MapKind represents a map type. MapKind // NullTypeKind represents a null type. NullTypeKind // OpaqueKind represents an abstract type which has no accessible fields. OpaqueKind // StringKind represents a string type. StringKind // StructKind represents a structured object with typed fields. StructKind // TimestampKind represents a a CEL time type. TimestampKind // TypeKind represents the CEL type. TypeKind // TypeParamKind represents a parameterized type whose type name will be resolved at type-check time, if possible. TypeParamKind // UintKind represents a uint type. UintKind // UnknownKind represents an unknown value type. UnknownKind )
type Null ¶
Null type implementation.
func (Null) ConvertToNative ¶
ConvertToNative implements ref.Val.ConvertToNative.
func (Null) ConvertToType ¶
ConvertToType implements ref.Val.ConvertToType.
func (Null) IsZeroValue ¶
IsZeroValue returns true as null always represents an absent value.
type Optional ¶
type Optional struct {
// contains filtered or unexported fields
}
Optional value which points to a value if non-empty.
func OptionalOf ¶
OptionalOf returns an optional value which wraps a concrete CEL value.
func (*Optional) ConvertToNative ¶
ConvertToNative implements the ref.Val interface method.
func (*Optional) ConvertToType ¶
ConvertToType implements the ref.Val interface method.
func (*Optional) Equal ¶
Equal determines whether the values contained by two optional values are equal.
type Provider ¶
type Provider interface { // EnumValue returns the numeric value of the given enum value name. EnumValue(enumName string) ref.Val // FindIdent takes a qualified identifier name and returns a ref.Val if one exists. FindIdent(identName string) (ref.Val, bool) // FindStructType returns the Type give a qualified type name. // // For historical reasons, only struct types are expected to be returned through this // method, and the type values are expected to be wrapped in a TypeType instance using // TypeTypeWithParam(<structType>). // // Returns false if not found. FindStructType(structType string) (*Type, bool) // FindStructFieldNames returns thet field names associated with the type, if the type // is found. FindStructFieldNames(structType string) ([]string, bool) // FieldStructFieldType returns the field type for a checked type value. Returns // false if the field could not be found. FindStructFieldType(structType, fieldName string) (*FieldType, bool) // NewValue creates a new type value from a qualified name and map of field // name to value. // // Note, for each value, the Val.ConvertToNative function will be invoked // to convert the Val to the field's native type. If an error occurs during // conversion, the NewValue will be a types.Err. NewValue(structType string, fields map[string]ref.Val) ref.Val }
Provider specifies functions for creating new object instances and for resolving enum values by name.
type Registry ¶
type Registry struct {
// contains filtered or unexported fields
}
Registry provides type information for a set of registered types.
func NewEmptyRegistry ¶
func NewEmptyRegistry() *Registry
NewEmptyRegistry returns a registry which is completely unconfigured.
func NewRegistry ¶
NewRegistry accepts a list of proto message instances and returns a type provider which can create new instances of the provided message or any message that proto depends upon in its FileDescriptor.
func (*Registry) FindIdent ¶
FindIdent takes a qualified identifier name and returns a ref.Val if one exists.
func (*Registry) FindStructFieldNames ¶
FindStructFieldNames returns the set of field names for the given struct type, if the type exists in the registry.
func (*Registry) FindStructFieldType ¶
FindStructFieldType returns the field type for a checked type value. Returns false if the field could not be found.
func (*Registry) FindStructType ¶
FindStructType returns the Type give a qualified type name.
For historical reasons, only struct types are expected to be returned through this method, and the type values are expected to be wrapped in a TypeType instance using TypeTypeWithParam(<structType>).
Returns false if not found.
func (*Registry) NativeToValue ¶
NativeToValue converts various "native" types to ref.Val with this specific implementation providing support for custom proto-based types.
This method should be the inverse of ref.Val.ConvertToNative.
func (*Registry) NewValue ¶
NewValue creates a new type value from a qualified name and map of field name to value.
Note, for each value, the Val.ConvertToNative function will be invoked to convert the Val to the field's native type. If an error occurs during conversion, the NewValue will be a types.Err.
func (*Registry) RegisterDescriptor ¶
func (p *Registry) RegisterDescriptor(fileDesc protoreflect.FileDescriptor) error
RegisterDescriptor registers the contents of a protocol buffer `FileDescriptor`.
func (*Registry) RegisterMessage ¶
RegisterMessage registers a protocol buffer message and its dependencies.
func (*Registry) RegisterType ¶
RegisterType registers a type value with the provider which ensures the provider is aware of how to map the type to an identifier.
If the `ref.Type` value is a `*types.Type` it will be registered directly by its runtime type name. If the `ref.Type` value is not a `*types.Type` instance, a `*types.Type` instance which reflects the traits present on the input and the runtime type name. By default this foreign type will be treated as a types.StructKind. To avoid potential issues where the `ref.Type` values does not match the generated `*types.Type` instance, consider always using the `*types.Type` to represent type extensions to CEL, even when they're not based on protobuf types.
type String ¶
type String string
String type implementation which supports addition, comparison, matching, and size functions.
func (String) ConvertToNative ¶
ConvertToNative implements ref.Val.ConvertToNative.
func (String) ConvertToType ¶
ConvertToType implements ref.Val.ConvertToType.
func (String) IsZeroValue ¶
IsZeroValue returns true if the string is empty.
type Timestamp ¶
Timestamp type implementation which supports add, compare, and subtract operations. Timestamps are also capable of participating in dynamic function dispatch to instance methods.
func (Timestamp) ConvertToNative ¶
ConvertToNative implements ref.Val.ConvertToNative.
func (Timestamp) ConvertToType ¶
ConvertToType implements ref.Val.ConvertToType.
func (Timestamp) IsZeroValue ¶
IsZeroValue returns true if the timestamp is epoch 0.
type Type ¶
type Type struct {
// contains filtered or unexported fields
}
Type holds a reference to a runtime type with an optional type-checked set of type parameters.
func AlphaProtoAsType ¶
AlphaProtoAsType converts a CEL v1alpha1.Type protobuf type to a CEL-native type representation.
func ExprTypeToType ¶
ExprTypeToType converts a protobuf CEL type representation to a CEL-native type representation.
func NewListType ¶
NewListType creates an instances of a list type value with the provided element type.
func NewMapType ¶
NewMapType creates an instance of a map type value with the provided key and value types.
func NewNullableType ¶
NewNullableType creates an instance of a nullable type with the provided wrapped type.
Note: only primitive types are supported as wrapped types.
func NewObjectType ¶
NewObjectType creates a type reference to an externally defined type, e.g. a protobuf message type.
An object type is assumed to support field presence testing and field indexing. Additionally, the type may also indicate additional traits through the use of the optional traits vararg argument.
func NewObjectTypeValue
deprecated
func NewOpaqueType ¶
NewOpaqueType creates an abstract parameterized type with a given name.
func NewOptionalType ¶
NewOptionalType creates an abstract parameterized type instance corresponding to CEL's notion of optional.
func NewTypeParamType ¶
NewTypeParamType creates a parameterized type instance.
func NewTypeTypeWithParam ¶
NewTypeTypeWithParam creates a type with a type parameter. Used for type-checking purposes, but equivalent to TypeType otherwise.
func NewTypeValue
deprecated
func ProtoAsType ¶
ProtoAsType converts a canonical CEL celpb.Type protobuf type to a CEL-native type representation.
func (*Type) ConvertToNative ¶
ConvertToNative implements ref.Val.ConvertToNative.
func (*Type) ConvertToType ¶
ConvertToType implements ref.Val.ConvertToType.
func (*Type) DeclaredTypeName ¶
DeclaredTypeName indicates the fully qualified and parameterized type-check type name.
func (*Type) Equal ¶
Equal indicates whether two types have the same runtime type name.
The name Equal is a bit of a misnomer, but for historical reasons, this is the runtime behavior. For a more accurate definition see IsType().
func (*Type) IsAssignableRuntimeType ¶
IsAssignableRuntimeType determines whether the current type is runtime assignable from the input runtimeType.
At runtime, parameterized types are erased and so a function which type-checks to support a map(string, string) will have a runtime assignable type of a map.
func (*Type) IsAssignableType ¶
IsAssignableType determines whether the current type is type-check assignable from the input fromType.
func (*Type) IsEquivalentType ¶
IsEquivalentType indicates whether two types are equivalent. This check ignores type parameter type names.
func (*Type) IsExactType ¶
IsExactType indicates whether the two types are exactly the same. This check also verifies type parameter type names.
func (*Type) Parameters ¶
Parameters returns the list of type parameters if set.
For ListKind, Parameters()[0] represents the list element type For MapKind, Parameters()[0] represents the map key type, and Parameters()[1] represents the map value type.
func (*Type) TypeName ¶
TypeName returns the type-erased fully qualified runtime type name.
TypeName implements the ref.Type interface method.
func (*Type) WithTraits ¶
WithTraits creates a copy of the current Type and sets the trait mask to the traits parameter.
This method should be used with Opaque types where the type acts like a container, e.g. vector.
type Uint ¶
type Uint uint64
Uint type implementation which supports comparison and math operators.
func (Uint) ConvertToNative ¶
ConvertToNative implements ref.Val.ConvertToNative.
func (Uint) ConvertToType ¶
ConvertToType implements ref.Val.ConvertToType.
func (Uint) IsZeroValue ¶
IsZeroValue returns true if the uint is zero.
type Unknown ¶
type Unknown struct {
// contains filtered or unexported fields
}
Unknown type which collects expression ids which caused the current value to become unknown.
func MaybeMergeUnknowns ¶
MaybeMergeUnknowns determines whether an input value and another, possibly nil, unknown will produce an unknown result.
If the input `val` is another Unknown, then the result will be the merge of the `val` and the input `unk`. If the `val` is not unknown, then the result will depend on whether the input `unk` is nil. If both values are non-nil and unknown, then the return value will be a merge of both unknowns.
func MergeUnknowns ¶
MergeUnknowns combines two unknown values into a new unknown value.
func NewUnknown ¶
func NewUnknown(id int64, attr *AttributeTrail) *Unknown
NewUnknown creates a new unknown at a given expression id for an attribute.
If the attribute is nil, the attribute value will be the `unspecifiedAttribute`.
func (*Unknown) Contains ¶
Contains returns true if the input unknown is a subset of the current unknown.
func (*Unknown) ConvertToNative ¶
ConvertToNative implements ref.Val.ConvertToNative.
func (*Unknown) ConvertToType ¶
ConvertToType is an identity function since unknown values cannot be modified.
func (*Unknown) GetAttributeTrails ¶
func (u *Unknown) GetAttributeTrails(id int64) ([]*AttributeTrail, bool)
GetAttributeTrails returns the attribute trails, if present, missing for a given expression id.
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
Package pb reflects over protocol buffer descriptors to generate objects that simplify type, enum, and field lookup.
|
Package pb reflects over protocol buffer descriptors to generate objects that simplify type, enum, and field lookup. |
Package ref contains the reference interfaces used throughout the types components.
|
Package ref contains the reference interfaces used throughout the types components. |
Package traits defines interfaces that a type may implement to participate in operator overloads and function dispatch.
|
Package traits defines interfaces that a type may implement to participate in operator overloads and function dispatch. |