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 }