Package dev.cel.expr

Class Expr.Comprehension

  • All Implemented Interfaces:
    com.google.protobuf.Message, com.google.protobuf.MessageLite, com.google.protobuf.MessageLiteOrBuilder, com.google.protobuf.MessageOrBuilder, Expr.ComprehensionOrBuilder, java.io.Serializable
    Enclosing class:
    Expr

    public static final class Expr.Comprehension
    extends com.google.protobuf.GeneratedMessage
    implements Expr.ComprehensionOrBuilder
     A comprehension expression applied to a list or map.
    
     Comprehensions are not part of the core syntax, but enabled with macros.
     A macro matches a specific call signature within a parsed AST and replaces
     the call with an alternate AST block. Macro expansion happens at parse
     time.
    
     The following macros are supported within CEL:
    
     Aggregate type macros may be applied to all elements in a list or all keys
     in a map:
    
     *  `all`, `exists`, `exists_one` -  test a predicate expression against
     the inputs and return `true` if the predicate is satisfied for all,
     any, or only one value `list.all(x, x < 10)`.
     *  `filter` - test a predicate expression against the inputs and return
     the subset of elements which satisfy the predicate:
     `payments.filter(p, p > 1000)`.
     *  `map` - apply an expression to all elements in the input and return the
     output aggregate type: `[1, 2, 3].map(i, i * i)`.
    
     The `has(m.x)` macro tests whether the property `x` is present in struct
     `m`. The semantics of this macro depend on the type of `m`. For proto2
     messages `has(m.x)` is defined as 'defined, but not set`. For proto3, the
     macro tests whether the property is set to its default. For map and struct
     types, the macro tests whether the property `x` is defined on `m`.
    
     Comprehensions for the standard environment macros evaluation can be best
     visualized as the following pseudocode:
    
     ```
     let `accu_var` = `accu_init`
     for (let `iter_var` in `iter_range`) {
     if (!`loop_condition`) {
     break
     }
     `accu_var` = `loop_step`
     }
     return `result`
     ```
    
     Comprehensions for the optional V2 macros which support map-to-map
     translation differ slightly from the standard environment macros in that
     they expose both the key or index in addition to the value for each list
     or map entry:
    
     ```
     let `accu_var` = `accu_init`
     for (let `iter_var`, `iter_var2` in `iter_range`) {
     if (!`loop_condition`) {
     break
     }
     `accu_var` = `loop_step`
     }
     return `result`
     ```
     
    Protobuf type cel.expr.Expr.Comprehension
    See Also:
    Serialized Form
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      static class  Expr.Comprehension.Builder
      A comprehension expression applied to a list or map.
      • Nested classes/interfaces inherited from class com.google.protobuf.GeneratedMessage

        com.google.protobuf.GeneratedMessage.ExtendableBuilder<MessageT extends com.google.protobuf.GeneratedMessage.ExtendableMessage<MessageT>,​BuilderT extends com.google.protobuf.GeneratedMessage.ExtendableBuilder<MessageT,​BuilderT>>, com.google.protobuf.GeneratedMessage.ExtendableMessage<MessageT extends com.google.protobuf.GeneratedMessage.ExtendableMessage<MessageT>>, com.google.protobuf.GeneratedMessage.ExtendableMessageOrBuilder<MessageT extends com.google.protobuf.GeneratedMessage.ExtendableMessage<MessageT>>, com.google.protobuf.GeneratedMessage.FieldAccessorTable, com.google.protobuf.GeneratedMessage.GeneratedExtension<ContainingT extends com.google.protobuf.Message,​T extends java.lang.Object>, com.google.protobuf.GeneratedMessage.UnusedPrivateParameter
      • Nested classes/interfaces inherited from class com.google.protobuf.AbstractMessage

        com.google.protobuf.AbstractMessage.BuilderParent
      • Nested classes/interfaces inherited from class com.google.protobuf.AbstractMessageLite

        com.google.protobuf.AbstractMessageLite.InternalOneOfEnum
    • Method Detail

      • getDescriptor

        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor()
      • internalGetFieldAccessorTable

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable()
        Specified by:
        internalGetFieldAccessorTable in class com.google.protobuf.GeneratedMessage
      • getIterVar

        public java.lang.String getIterVar()
         The name of the first iteration variable.
         For the single iteration variable macros, when iter_range is a list, this
         variable is the list element and when the iter_range is a map, this
         variable is the map key.
         
        string iter_var = 1;
        Specified by:
        getIterVar in interface Expr.ComprehensionOrBuilder
        Returns:
        The iterVar.
      • getIterVarBytes

        public com.google.protobuf.ByteString getIterVarBytes()
         The name of the first iteration variable.
         For the single iteration variable macros, when iter_range is a list, this
         variable is the list element and when the iter_range is a map, this
         variable is the map key.
         
        string iter_var = 1;
        Specified by:
        getIterVarBytes in interface Expr.ComprehensionOrBuilder
        Returns:
        The bytes for iterVar.
      • getIterVar2

        public java.lang.String getIterVar2()
         The name of the second iteration variable, empty if not set.
         This field is only set for comprehension v2 macros.
         
        string iter_var2 = 8;
        Specified by:
        getIterVar2 in interface Expr.ComprehensionOrBuilder
        Returns:
        The iterVar2.
      • getIterVar2Bytes

        public com.google.protobuf.ByteString getIterVar2Bytes()
         The name of the second iteration variable, empty if not set.
         This field is only set for comprehension v2 macros.
         
        string iter_var2 = 8;
        Specified by:
        getIterVar2Bytes in interface Expr.ComprehensionOrBuilder
        Returns:
        The bytes for iterVar2.
      • hasIterRange

        public boolean hasIterRange()
         The range over which the comprehension iterates.
         
        .cel.expr.Expr iter_range = 2;
        Specified by:
        hasIterRange in interface Expr.ComprehensionOrBuilder
        Returns:
        Whether the iterRange field is set.
      • getIterRange

        public Expr getIterRange()
         The range over which the comprehension iterates.
         
        .cel.expr.Expr iter_range = 2;
        Specified by:
        getIterRange in interface Expr.ComprehensionOrBuilder
        Returns:
        The iterRange.
      • getAccuVar

        public java.lang.String getAccuVar()
         The name of the variable used for accumulation of the result.
         
        string accu_var = 3;
        Specified by:
        getAccuVar in interface Expr.ComprehensionOrBuilder
        Returns:
        The accuVar.
      • getAccuVarBytes

        public com.google.protobuf.ByteString getAccuVarBytes()
         The name of the variable used for accumulation of the result.
         
        string accu_var = 3;
        Specified by:
        getAccuVarBytes in interface Expr.ComprehensionOrBuilder
        Returns:
        The bytes for accuVar.
      • hasAccuInit

        public boolean hasAccuInit()
         The initial value of the accumulator.
         
        .cel.expr.Expr accu_init = 4;
        Specified by:
        hasAccuInit in interface Expr.ComprehensionOrBuilder
        Returns:
        Whether the accuInit field is set.
      • hasLoopCondition

        public boolean hasLoopCondition()
         An expression which can contain iter_var, iter_var2, and accu_var.
        
         Returns false when the result has been computed and may be used as
         a hint to short-circuit the remainder of the comprehension.
         
        .cel.expr.Expr loop_condition = 5;
        Specified by:
        hasLoopCondition in interface Expr.ComprehensionOrBuilder
        Returns:
        Whether the loopCondition field is set.
      • getLoopCondition

        public Expr getLoopCondition()
         An expression which can contain iter_var, iter_var2, and accu_var.
        
         Returns false when the result has been computed and may be used as
         a hint to short-circuit the remainder of the comprehension.
         
        .cel.expr.Expr loop_condition = 5;
        Specified by:
        getLoopCondition in interface Expr.ComprehensionOrBuilder
        Returns:
        The loopCondition.
      • getLoopConditionOrBuilder

        public ExprOrBuilder getLoopConditionOrBuilder()
         An expression which can contain iter_var, iter_var2, and accu_var.
        
         Returns false when the result has been computed and may be used as
         a hint to short-circuit the remainder of the comprehension.
         
        .cel.expr.Expr loop_condition = 5;
        Specified by:
        getLoopConditionOrBuilder in interface Expr.ComprehensionOrBuilder
      • hasLoopStep

        public boolean hasLoopStep()
         An expression which can contain iter_var, iter_var2, and accu_var.
        
         Computes the next value of accu_var.
         
        .cel.expr.Expr loop_step = 6;
        Specified by:
        hasLoopStep in interface Expr.ComprehensionOrBuilder
        Returns:
        Whether the loopStep field is set.
      • getLoopStep

        public Expr getLoopStep()
         An expression which can contain iter_var, iter_var2, and accu_var.
        
         Computes the next value of accu_var.
         
        .cel.expr.Expr loop_step = 6;
        Specified by:
        getLoopStep in interface Expr.ComprehensionOrBuilder
        Returns:
        The loopStep.
      • hasResult

        public boolean hasResult()
         An expression which can contain accu_var.
        
         Computes the result.
         
        .cel.expr.Expr result = 7;
        Specified by:
        hasResult in interface Expr.ComprehensionOrBuilder
        Returns:
        Whether the result field is set.
      • getResult

        public Expr getResult()
         An expression which can contain accu_var.
        
         Computes the result.
         
        .cel.expr.Expr result = 7;
        Specified by:
        getResult in interface Expr.ComprehensionOrBuilder
        Returns:
        The result.
      • isInitialized

        public final boolean isInitialized()
        Specified by:
        isInitialized in interface com.google.protobuf.MessageLiteOrBuilder
        Overrides:
        isInitialized in class com.google.protobuf.GeneratedMessage
      • writeTo

        public void writeTo​(com.google.protobuf.CodedOutputStream output)
                     throws java.io.IOException
        Specified by:
        writeTo in interface com.google.protobuf.MessageLite
        Overrides:
        writeTo in class com.google.protobuf.GeneratedMessage
        Throws:
        java.io.IOException
      • getSerializedSize

        public int getSerializedSize()
        Specified by:
        getSerializedSize in interface com.google.protobuf.MessageLite
        Overrides:
        getSerializedSize in class com.google.protobuf.GeneratedMessage
      • equals

        public boolean equals​(java.lang.Object obj)
        Specified by:
        equals in interface com.google.protobuf.Message
        Overrides:
        equals in class com.google.protobuf.AbstractMessage
      • hashCode

        public int hashCode()
        Specified by:
        hashCode in interface com.google.protobuf.Message
        Overrides:
        hashCode in class com.google.protobuf.AbstractMessage
      • parseFrom

        public static Expr.Comprehension parseFrom​(java.nio.ByteBuffer data)
                                            throws com.google.protobuf.InvalidProtocolBufferException
        Throws:
        com.google.protobuf.InvalidProtocolBufferException
      • parseFrom

        public static Expr.Comprehension parseFrom​(java.nio.ByteBuffer data,
                                                   com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                                            throws com.google.protobuf.InvalidProtocolBufferException
        Throws:
        com.google.protobuf.InvalidProtocolBufferException
      • parseFrom

        public static Expr.Comprehension parseFrom​(com.google.protobuf.ByteString data)
                                            throws com.google.protobuf.InvalidProtocolBufferException
        Throws:
        com.google.protobuf.InvalidProtocolBufferException
      • parseFrom

        public static Expr.Comprehension parseFrom​(com.google.protobuf.ByteString data,
                                                   com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                                            throws com.google.protobuf.InvalidProtocolBufferException
        Throws:
        com.google.protobuf.InvalidProtocolBufferException
      • parseFrom

        public static Expr.Comprehension parseFrom​(byte[] data)
                                            throws com.google.protobuf.InvalidProtocolBufferException
        Throws:
        com.google.protobuf.InvalidProtocolBufferException
      • parseFrom

        public static Expr.Comprehension parseFrom​(byte[] data,
                                                   com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                                            throws com.google.protobuf.InvalidProtocolBufferException
        Throws:
        com.google.protobuf.InvalidProtocolBufferException
      • parseFrom

        public static Expr.Comprehension parseFrom​(java.io.InputStream input)
                                            throws java.io.IOException
        Throws:
        java.io.IOException
      • parseFrom

        public static Expr.Comprehension parseFrom​(java.io.InputStream input,
                                                   com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                                            throws java.io.IOException
        Throws:
        java.io.IOException
      • parseDelimitedFrom

        public static Expr.Comprehension parseDelimitedFrom​(java.io.InputStream input)
                                                     throws java.io.IOException
        Throws:
        java.io.IOException
      • parseDelimitedFrom

        public static Expr.Comprehension parseDelimitedFrom​(java.io.InputStream input,
                                                            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                                                     throws java.io.IOException
        Throws:
        java.io.IOException
      • parseFrom

        public static Expr.Comprehension parseFrom​(com.google.protobuf.CodedInputStream input)
                                            throws java.io.IOException
        Throws:
        java.io.IOException
      • parseFrom

        public static Expr.Comprehension parseFrom​(com.google.protobuf.CodedInputStream input,
                                                   com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                                            throws java.io.IOException
        Throws:
        java.io.IOException
      • newBuilderForType

        public Expr.Comprehension.Builder newBuilderForType()
        Specified by:
        newBuilderForType in interface com.google.protobuf.Message
        Specified by:
        newBuilderForType in interface com.google.protobuf.MessageLite
      • toBuilder

        public Expr.Comprehension.Builder toBuilder()
        Specified by:
        toBuilder in interface com.google.protobuf.Message
        Specified by:
        toBuilder in interface com.google.protobuf.MessageLite
      • newBuilderForType

        protected Expr.Comprehension.Builder newBuilderForType​(com.google.protobuf.AbstractMessage.BuilderParent parent)
        Overrides:
        newBuilderForType in class com.google.protobuf.AbstractMessage
      • getParserForType

        public com.google.protobuf.Parser<Expr.Comprehension> getParserForType()
        Specified by:
        getParserForType in interface com.google.protobuf.Message
        Specified by:
        getParserForType in interface com.google.protobuf.MessageLite
        Overrides:
        getParserForType in class com.google.protobuf.GeneratedMessage
      • getDefaultInstanceForType

        public Expr.Comprehension getDefaultInstanceForType()
        Specified by:
        getDefaultInstanceForType in interface com.google.protobuf.MessageLiteOrBuilder
        Specified by:
        getDefaultInstanceForType in interface com.google.protobuf.MessageOrBuilder