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 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 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 NewJSONList(adapter Adapter, l *structpb.ListValue) traits.Lister
- func NewJSONStruct(adapter Adapter, value *structpb.Struct) traits.Mapper
- func NewMutableList(adapter Adapter) traits.MutableLister
- 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 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) 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) 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 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 (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
- 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") // 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 adapts canonical CEL types from their equivalent Go values.
DefaultTypeAdapter = &defaultTypeAdapter{}
)
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 provides a map from the protoreflect Kind to the equivalent CEL type. 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, } )
Functions ¶
func DurationGetHours ¶ added in v0.17.0
DurationGetHours returns the duration in hours.
func DurationGetMilliseconds ¶ added in v0.17.0
DurationGetMilliseconds returns duration in milliseconds.
func DurationGetMinutes ¶ added in v0.17.0
DurationGetMinutes returns duration in minutes.
func DurationGetSeconds ¶ added in v0.17.0
DurationGetSeconds returns duration in seconds.
func Equal ¶ added in v0.10.0
Equal returns whether the two ref.Value are heterogeneously equivalent.
func IndexOrError ¶ added in v0.13.0
IndexOrError converts an input index value into either a lossless integer index or an error.
func IsError ¶
IsError returns whether the input element ref.Type or ref.Val is equal to the ErrType singleton.
func IsPrimitiveType ¶ added in v0.3.0
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 MaybeNoSuchOverloadErr ¶ added in v0.4.0
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 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 ¶ added in v0.10.0
func NewMutableList(adapter Adapter) traits.MutableLister
NewMutableList creates a new mutable list whose internal state can be modified.
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 ¶ added in v0.7.0
func NewProtoList(adapter Adapter, list protoreflect.List) traits.Lister
NewProtoList returns a traits.Lister based on a pb.List instance.
func NewProtoMap ¶ added in v0.7.0
NewProtoMap returns a specialized traits.Mapper for handling protobuf map values.
func NewRefValList ¶ added in v0.7.0
NewRefValList returns a traits.Lister with ref.Val elements.
This type specialization is used with list literals within CEL expressions.
func NewRefValMap ¶ added in v0.7.0
NewRefValMap returns a specialized traits.Mapper with CEL valued keys and values.
func NewStringInterfaceMap ¶ added in v0.7.0
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 ¶ added in v0.4.0
NoSuchOverloadErr returns a new types.Err instance with a no such overload message.
func StringContains ¶ added in v0.17.0
StringContains returns whether the string contains a substring.
func StringEndsWith ¶ added in v0.17.0
StringEndsWith returns whether the target string contains the input suffix.
func StringStartsWith ¶ added in v0.17.0
StringStartsWith returns whether the target string contains the input prefix.
func TypeToExprType ¶ added in v0.17.0
TypeToExprType converts a CEL-native type representation to a protobuf CEL Type representation.
func UnsupportedRefValConversionErr ¶ added in v0.7.0
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 ¶ added in v0.17.0
type Adapter = ref.TypeAdapter
Adapter converts native Go values of varying type and complexity to equivalent CEL values.
type AttributeQualifier ¶ added in v0.17.0
AttributeQualifier constrains the possible types which may be used to qualify an attribute.
type AttributeTrail ¶ added in v0.17.0
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 ¶ added in v0.17.0
func NewAttributeTrail(variable string) *AttributeTrail
NewAttributeTrail creates a new simple attribute from a variable name.
func QualifyAttribute ¶ added in v0.17.0
func QualifyAttribute[T AttributeQualifier](attr *AttributeTrail, qualifier T) *AttributeTrail
QualifyAttribute qualifies an attribute using a valid AttributeQualifier type.
func (*AttributeTrail) Equal ¶ added in v0.17.0
func (a *AttributeTrail) Equal(other *AttributeTrail) bool
Equal returns whether two attribute values have the same variable name and qualifier paths.
func (*AttributeTrail) QualifierPath ¶ added in v0.17.0
func (a *AttributeTrail) QualifierPath() []any
QualifierPath returns the optional set of qualifying fields or indices applied to the variable.
func (*AttributeTrail) String ¶ added in v0.17.0
func (a *AttributeTrail) String() string
String returns the string representation of the Attribute.
func (*AttributeTrail) Variable ¶ added in v0.17.0
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 ¶ added in v0.13.0
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 ¶ added in v0.13.0
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 ¶ added in v0.13.0
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 ¶ added in v0.13.0
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 Error ¶ added in v0.14.0
Error interface which allows types types.Err values to be treated as error values.
type FieldType ¶ added in v0.17.0
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 ¶ added in v0.13.0
IsZeroValue returns true if integer is equal to 0
type Kind ¶ added in v0.17.0
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 ¶ added in v0.13.0
IsZeroValue returns true as null always represents an absent value.
type Optional ¶ added in v0.13.0
type Optional struct {
// contains filtered or unexported fields
}
Optional value which points to a value if non-empty.
func OptionalOf ¶ added in v0.13.0
OptionalOf returns an optional value which wraps a concrete CEL value.
func (*Optional) ConvertToNative ¶ added in v0.13.0
ConvertToNative implements the ref.Val interface method.
func (*Optional) ConvertToType ¶ added in v0.13.0
ConvertToType implements the ref.Val interface method.
func (*Optional) Equal ¶ added in v0.13.0
Equal determines whether the values contained by two optional values are equal.
func (*Optional) GetValue ¶ added in v0.13.0
GetValue returns the wrapped value contained in the optional.
type Provider ¶ added in v0.17.0
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) // 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 ¶ added in v0.17.0
type Registry struct {
// contains filtered or unexported fields
}
Registry provides type information for a set of registered types.
func NewEmptyRegistry ¶ added in v0.4.0
func NewEmptyRegistry() *Registry
NewEmptyRegistry returns a registry which is completely unconfigured.
func NewRegistry ¶ added in v0.2.0
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) Copy ¶ added in v0.17.0
Copy copies the current state of the registry into its own memory space.
func (*Registry) EnumValue ¶ added in v0.17.0
EnumValue returns the numeric value of the given enum value name.
func (*Registry) FindIdent ¶ added in v0.17.0
FindIdent takes a qualified identifier name and returns a ref.Val if one exists.
func (*Registry) FindStructFieldType ¶ added in v0.17.0
FieldStructFieldType returns the field type for a checked type value. Returns false if the field could not be found.
func (*Registry) FindStructType ¶ added in v0.17.0
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 ¶ added in v0.17.0
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 ¶ added in v0.17.0
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 ¶ added in v0.17.0
func (p *Registry) RegisterDescriptor(fileDesc protoreflect.FileDescriptor) error
RegisterDescriptor registers the contents of a protocol buffer `FileDescriptor`.
func (*Registry) RegisterMessage ¶ added in v0.17.0
RegisterMessage registers a protocol buffer message and its dependencies.
func (*Registry) RegisterType ¶ added in v0.17.0
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 ¶ added in v0.13.0
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 ¶ added in v0.13.0
IsZeroValue returns true if the timestamp is epoch 0.
type Type ¶ added in v0.17.0
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 ExprTypeToType ¶ added in v0.17.0
ExprTypeToType converts a protobuf CEL type representation to a CEL-native type representation.
func NewListType ¶ added in v0.17.0
NewListType creates an instances of a list type value with the provided element type.
func NewMapType ¶ added in v0.17.0
NewMapType creates an instance of a map type value with the provided key and value types.
func NewNullableType ¶ added in v0.17.0
NewNullableType creates an instance of a nullable type with the provided wrapped type.
Note: only primitive types are supported as wrapped types.
func NewObjectType ¶ added in v0.17.0
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 ¶ added in v0.17.0
NewOpaqueType creates an abstract parameterized type with a given name.
func NewOptionalType ¶ added in v0.17.0
NewOptionalType creates an abstract parameterized type instance corresponding to CEL's notion of optional.
func NewTypeParamType ¶ added in v0.17.0
NewTypeParamType creates a parameterized type instance.
func NewTypeTypeWithParam ¶ added in v0.17.0
NewTypeTypeWithParam creates a type with a type parameter. Used for type-checking purposes, but equivalent to TypeType otherwise.
func NewTypeValue
deprecated
func (*Type) ConvertToNative ¶ added in v0.17.0
ConvertToNative implements ref.Val.ConvertToNative.
func (*Type) ConvertToType ¶ added in v0.17.0
ConvertToType implements ref.Val.ConvertToType.
func (*Type) DeclaredTypeName ¶ added in v0.17.0
DeclaredTypeName indicates the fully qualified and parameterized type-check type name.
func (*Type) Equal ¶ added in v0.17.0
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 ¶ added in v0.17.0
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 ¶ added in v0.17.0
IsAssignableType determines whether the current type is type-check assignable from the input fromType.
func (*Type) IsEquivalentType ¶ added in v0.17.0
IsEquivalentType indicates whether two types are equivalent. This check ignores type parameter type names.
func (*Type) IsExactType ¶ added in v0.17.0
IsExactType indicates whether the two types are exactly the same. This check also verifies type parameter type names.
func (*Type) Parameters ¶ added in v0.17.0
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.
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 ¶ added in v0.13.0
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 ¶ added in v0.17.0
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 ¶ added in v0.17.0
MergeUnknowns combines two unknown values into a new unknown value.
func NewUnknown ¶ added in v0.17.0
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 ¶ added in v0.17.0
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 ¶ added in v0.17.1
func (u *Unknown) GetAttributeTrails(id int64) ([]*AttributeTrail, bool)
GetAttributeTrails returns the attribute trails, if present, missing for a given expression id.
func (*Unknown) IDs ¶ added in v0.17.1
IDs returns the set of unknown expression ids contained by this value.
Numeric identifiers are guaranteed to be in sorted order.
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. |