github.com/joomcode/cue@v0.4.4-0.20221111115225-539fe3512047/cue/testdata/disjunctions/embed.txtar (about)

     1  -- in.cue --
     2  // Given the existence of this field, embedDefault is a struct. This
     3  // means that embedding this conjunction into `embedDefault` itself should
     4  // make it resolve to `{a: 2}`.
     5  
     6  default: {
     7  	y: *1 | {a: 2}
     8  	y
     9  }
    10  
    11  unambiguous: {
    12  	y: 1 | {a: 2}
    13  	y
    14  }
    15  
    16  forDefault: {
    17  	y: *1 | {a: 2}
    18  	for x in [1] {y}
    19  }
    20  
    21  // Carry over default to first disjunct.
    22  openDefault: {
    23  	#y: *1 | {a: 2}
    24  	#y
    25  }
    26  
    27  openAmbiguous: {
    28  	#y: 1 | {a: 2}
    29  	#y
    30  }
    31  
    32  forceStruct: {
    33  	#y: 1 | {a: 2}
    34  	#y
    35  	{}
    36  }
    37  
    38  defaultsMulti: {
    39  	a: {
    40  		#def: {
    41  			*{} | {a: string} | {b: string}
    42  			*{} | {c: string} | {d: string}
    43  		}
    44  
    45  		a: #def & {a: "foo"}
    46  	}
    47  
    48  	b: {
    49  		#def: {
    50  			*{} | {a: string} | {b: string}
    51  			*{} | {c: string} | {d: string}
    52  			*{} | {d: string} | {e: string}
    53  		}
    54  
    55  		a: #def & {a: "foo", e: "bar"}
    56  	}
    57  }
    58  
    59  nested: {
    60  	a: 1 | 2 | *(
    61  		(3 | 4 | *( 5 | 6 | *7)) & ( 3 | 4 | ( *7 | 8 )))
    62  }
    63  -- out/eval --
    64  (struct){
    65    default: (struct){
    66      y: ((int|struct)){ |(*(int){ 1 }, (struct){
    67          a: (int){ 2 }
    68        }) }
    69      a: (int){ 2 }
    70    }
    71    unambiguous: (struct){
    72      y: ((int|struct)){ |((int){ 1 }, (struct){
    73          a: (int){ 2 }
    74        }) }
    75      a: (int){ 2 }
    76    }
    77    forDefault: (struct){
    78      y: ((int|struct)){ |(*(int){ 1 }, (struct){
    79          a: (int){ 2 }
    80        }) }
    81      a: (int){ 2 }
    82    }
    83    openDefault: ((int|struct)){ |(*(int){
    84        1
    85        #y: ((int|struct)){ |(*(int){ 1 }, (#struct){
    86            a: (int){ 2 }
    87          }) }
    88      }, (#struct){
    89        #y: ((int|struct)){ |(*(int){ 1 }, (#struct){
    90            a: (int){ 2 }
    91          }) }
    92        a: (int){ 2 }
    93      }) }
    94    openAmbiguous: ((int|struct)){ |((int){
    95        1
    96        #y: ((int|struct)){ |((int){ 1 }, (#struct){
    97            a: (int){ 2 }
    98          }) }
    99      }, (#struct){
   100        #y: ((int|struct)){ |((int){ 1 }, (#struct){
   101            a: (int){ 2 }
   102          }) }
   103        a: (int){ 2 }
   104      }) }
   105    forceStruct: (#struct){
   106      #y: ((int|struct)){ |((int){ 1 }, (#struct){
   107          a: (int){ 2 }
   108        }) }
   109      a: (int){ 2 }
   110    }
   111    defaultsMulti: (struct){
   112      a: (struct){
   113        #def: (#struct){ |(*(#struct){
   114          }, (#struct){
   115            c: (string){ string }
   116          }, (#struct){
   117            d: (string){ string }
   118          }, (#struct){
   119            a: (string){ string }
   120          }, (#struct){
   121            a: (string){ string }
   122            c: (string){ string }
   123          }, (#struct){
   124            a: (string){ string }
   125            d: (string){ string }
   126          }, (#struct){
   127            b: (string){ string }
   128          }, (#struct){
   129            b: (string){ string }
   130            c: (string){ string }
   131          }, (#struct){
   132            b: (string){ string }
   133            d: (string){ string }
   134          }) }
   135        a: (#struct){ |(*(#struct){
   136            a: (string){ "foo" }
   137          }, (#struct){
   138            a: (string){ "foo" }
   139            c: (string){ string }
   140          }, (#struct){
   141            a: (string){ "foo" }
   142            d: (string){ string }
   143          }) }
   144      }
   145      b: (struct){
   146        #def: (#struct){ |(*(#struct){
   147          }, (#struct){
   148            d: (string){ string }
   149          }, (#struct){
   150            e: (string){ string }
   151          }, (#struct){
   152            c: (string){ string }
   153          }, (#struct){
   154            c: (string){ string }
   155            d: (string){ string }
   156          }, (#struct){
   157            c: (string){ string }
   158            e: (string){ string }
   159          }, (#struct){
   160            d: (string){ string }
   161            e: (string){ string }
   162          }, (#struct){
   163            a: (string){ string }
   164          }, (#struct){
   165            a: (string){ string }
   166            d: (string){ string }
   167          }, (#struct){
   168            a: (string){ string }
   169            e: (string){ string }
   170          }, (#struct){
   171            a: (string){ string }
   172            c: (string){ string }
   173          }, (#struct){
   174            a: (string){ string }
   175            c: (string){ string }
   176            d: (string){ string }
   177          }, (#struct){
   178            a: (string){ string }
   179            c: (string){ string }
   180            e: (string){ string }
   181          }, (#struct){
   182            a: (string){ string }
   183            d: (string){ string }
   184            e: (string){ string }
   185          }, (#struct){
   186            b: (string){ string }
   187          }, (#struct){
   188            b: (string){ string }
   189            d: (string){ string }
   190          }, (#struct){
   191            b: (string){ string }
   192            e: (string){ string }
   193          }, (#struct){
   194            b: (string){ string }
   195            c: (string){ string }
   196          }, (#struct){
   197            b: (string){ string }
   198            c: (string){ string }
   199            d: (string){ string }
   200          }, (#struct){
   201            b: (string){ string }
   202            c: (string){ string }
   203            e: (string){ string }
   204          }, (#struct){
   205            b: (string){ string }
   206            d: (string){ string }
   207            e: (string){ string }
   208          }) }
   209        a: (#struct){ |(*(#struct){
   210            a: (string){ "foo" }
   211            e: (string){ "bar" }
   212          }, (#struct){
   213            a: (string){ "foo" }
   214            e: (string){ "bar" }
   215            c: (string){ string }
   216          }, (#struct){
   217            a: (string){ "foo" }
   218            e: (string){ "bar" }
   219            d: (string){ string }
   220          }) }
   221      }
   222    }
   223    nested: (struct){
   224      a: (int){ |(*(int){ 7 }, (int){ 2 }, (int){ 3 }, (int){ 4 }, (int){ 1 }) }
   225    }
   226  }
   227  -- out/compile --
   228  --- in.cue
   229  {
   230    default: {
   231      y: (*1|{
   232        a: 2
   233      })
   234      〈0;y〉
   235    }
   236    unambiguous: {
   237      y: (1|{
   238        a: 2
   239      })
   240      〈0;y〉
   241    }
   242    forDefault: {
   243      y: (*1|{
   244        a: 2
   245      })
   246      for _, x in [
   247        1,
   248      ] {
   249        〈2;y〉
   250      }
   251    }
   252    openDefault: {
   253      #y: (*1|{
   254        a: 2
   255      })
   256      〈0;#y〉
   257    }
   258    openAmbiguous: {
   259      #y: (1|{
   260        a: 2
   261      })
   262      〈0;#y〉
   263    }
   264    forceStruct: {
   265      #y: (1|{
   266        a: 2
   267      })
   268      〈0;#y〉
   269      {}
   270    }
   271    defaultsMulti: {
   272      a: {
   273        #def: {
   274          (*{}|{
   275            a: string
   276          }|{
   277            b: string
   278          })
   279          (*{}|{
   280            c: string
   281          }|{
   282            d: string
   283          })
   284        }
   285        a: (〈0;#def〉 & {
   286          a: "foo"
   287        })
   288      }
   289      b: {
   290        #def: {
   291          (*{}|{
   292            a: string
   293          }|{
   294            b: string
   295          })
   296          (*{}|{
   297            c: string
   298          }|{
   299            d: string
   300          })
   301          (*{}|{
   302            d: string
   303          }|{
   304            e: string
   305          })
   306        }
   307        a: (〈0;#def〉 & {
   308          a: "foo"
   309          e: "bar"
   310        })
   311      }
   312    }
   313    nested: {
   314      a: (1|2|*((3|4|*(5|6|*7)) & (3|4|(*7|8))))
   315    }
   316  }