cuelang.org/go@v0.13.0/encoding/openapi/testdata/oneof.txtar (about) 1 #skip-v3 2 #skip-v3-noshare 3 -- in.cue -- 4 // OpenAPI title. 5 6 $version: "v1alpha1" 7 8 #T: { 9 shared: int 10 } 11 #T: {} | { 12 exact: string 13 } | { 14 regex: string 15 } 16 #T: {} | { 17 count: int 18 } | { 19 amount: int 20 } 21 #T: { 22 shared2: int 23 } 24 25 // This should be dedupped. 26 #T: {} | { 27 count: int 28 } | { 29 amount: int 30 } 31 32 #MyInt: int 33 34 #Foo: { 35 include: #T 36 exclude: [...#T] 37 count: #MyInt 38 } 39 40 #Incompatible: { 41 shared: int 42 } | { 43 shared: int 44 extra1: int 45 } | { 46 shared: int 47 extra2: int 48 } 49 50 #WithMap: { 51 shared: [string]: int 52 } | { 53 shared: [string]: int 54 extra: int 55 } | { 56 shared: string // incompatible 57 extra: int 58 } 59 60 #Embed: { 61 a?: int 62 63 close({}) | 64 close({b: #T}) | 65 close({c: int}) 66 67 #T: {b?: int} 68 69 close({}) | 70 close({d: #T}) | 71 close({e: int}) 72 73 // TODO: maybe support builtin to write this as 74 // oneof({}, 75 // {b: int}, 76 // {c: int}) 77 } 78 79 -- out/TestGenerateOpenAPI/out.json -- 80 { 81 "openapi": "3.0.0", 82 "info": { 83 "title": "OpenAPI title.", 84 "version": "v1alpha1" 85 }, 86 "paths": {}, 87 "components": { 88 "schemas": { 89 "Embed": { 90 "type": "object", 91 "properties": { 92 "a": { 93 "type": "integer" 94 } 95 }, 96 "allOf": [ 97 { 98 "oneOf": [ 99 { 100 "not": { 101 "anyOf": [ 102 { 103 "required": [ 104 "b" 105 ], 106 "properties": { 107 "b": { 108 "$ref": "#/components/schemas/Embed.T" 109 } 110 } 111 }, 112 { 113 "required": [ 114 "c" 115 ], 116 "properties": { 117 "c": { 118 "type": "integer" 119 } 120 } 121 } 122 ] 123 } 124 }, 125 { 126 "required": [ 127 "b" 128 ], 129 "properties": { 130 "b": { 131 "$ref": "#/components/schemas/Embed.T" 132 } 133 } 134 }, 135 { 136 "required": [ 137 "c" 138 ], 139 "properties": { 140 "c": { 141 "type": "integer" 142 } 143 } 144 } 145 ] 146 }, 147 { 148 "oneOf": [ 149 { 150 "not": { 151 "anyOf": [ 152 { 153 "required": [ 154 "d" 155 ], 156 "properties": { 157 "d": { 158 "$ref": "#/components/schemas/Embed.T" 159 } 160 } 161 }, 162 { 163 "required": [ 164 "e" 165 ], 166 "properties": { 167 "e": { 168 "type": "integer" 169 } 170 } 171 } 172 ] 173 } 174 }, 175 { 176 "required": [ 177 "d" 178 ], 179 "properties": { 180 "d": { 181 "$ref": "#/components/schemas/Embed.T" 182 } 183 } 184 }, 185 { 186 "required": [ 187 "e" 188 ], 189 "properties": { 190 "e": { 191 "type": "integer" 192 } 193 } 194 } 195 ] 196 } 197 ] 198 }, 199 "Embed.T": { 200 "type": "object", 201 "properties": { 202 "b": { 203 "type": "integer" 204 } 205 } 206 }, 207 "Foo": { 208 "type": "object", 209 "required": [ 210 "include", 211 "exclude", 212 "count" 213 ], 214 "properties": { 215 "include": { 216 "$ref": "#/components/schemas/T" 217 }, 218 "exclude": { 219 "type": "array", 220 "items": { 221 "$ref": "#/components/schemas/T" 222 } 223 }, 224 "count": { 225 "$ref": "#/components/schemas/MyInt" 226 } 227 } 228 }, 229 "Incompatible": { 230 "type": "object", 231 "oneOf": [ 232 { 233 "allOf": [ 234 { 235 "required": [ 236 "shared" 237 ], 238 "properties": { 239 "shared": { 240 "type": "integer" 241 } 242 } 243 }, 244 { 245 "not": { 246 "anyOf": [ 247 { 248 "required": [ 249 "shared", 250 "extra1" 251 ], 252 "properties": { 253 "shared": { 254 "type": "integer" 255 }, 256 "extra1": { 257 "type": "integer" 258 } 259 } 260 }, 261 { 262 "required": [ 263 "shared", 264 "extra2" 265 ], 266 "properties": { 267 "shared": { 268 "type": "integer" 269 }, 270 "extra2": { 271 "type": "integer" 272 } 273 } 274 } 275 ] 276 } 277 } 278 ] 279 }, 280 { 281 "required": [ 282 "shared", 283 "extra1" 284 ], 285 "properties": { 286 "shared": { 287 "type": "integer" 288 }, 289 "extra1": { 290 "type": "integer" 291 } 292 } 293 }, 294 { 295 "required": [ 296 "shared", 297 "extra2" 298 ], 299 "properties": { 300 "shared": { 301 "type": "integer" 302 }, 303 "extra2": { 304 "type": "integer" 305 } 306 } 307 } 308 ] 309 }, 310 "MyInt": { 311 "type": "integer" 312 }, 313 "T": { 314 "description": "This should be dedupped.", 315 "type": "object", 316 "properties": { 317 "shared": { 318 "type": "integer" 319 }, 320 "shared2": { 321 "type": "integer" 322 } 323 }, 324 "allOf": [ 325 { 326 "required": [ 327 "shared" 328 ], 329 "oneOf": [ 330 { 331 "not": { 332 "anyOf": [ 333 { 334 "required": [ 335 "exact" 336 ], 337 "properties": { 338 "exact": { 339 "type": "string" 340 } 341 } 342 }, 343 { 344 "required": [ 345 "regex" 346 ], 347 "properties": { 348 "regex": { 349 "type": "string" 350 } 351 } 352 } 353 ] 354 } 355 }, 356 { 357 "required": [ 358 "exact" 359 ], 360 "properties": { 361 "exact": { 362 "type": "string" 363 } 364 } 365 }, 366 { 367 "required": [ 368 "regex" 369 ], 370 "properties": { 371 "regex": { 372 "type": "string" 373 } 374 } 375 } 376 ] 377 }, 378 { 379 "oneOf": [ 380 { 381 "not": { 382 "anyOf": [ 383 { 384 "required": [ 385 "count" 386 ], 387 "properties": { 388 "count": { 389 "type": "integer" 390 } 391 } 392 }, 393 { 394 "required": [ 395 "amount" 396 ], 397 "properties": { 398 "amount": { 399 "type": "integer" 400 } 401 } 402 } 403 ] 404 } 405 }, 406 { 407 "required": [ 408 "count" 409 ], 410 "properties": { 411 "count": { 412 "type": "integer" 413 } 414 } 415 }, 416 { 417 "required": [ 418 "amount" 419 ], 420 "properties": { 421 "amount": { 422 "type": "integer" 423 } 424 } 425 } 426 ], 427 "required": [ 428 "shared2" 429 ] 430 } 431 ] 432 }, 433 "WithMap": { 434 "type": "object", 435 "oneOf": [ 436 { 437 "allOf": [ 438 { 439 "required": [ 440 "shared" 441 ], 442 "properties": { 443 "shared": { 444 "type": "object", 445 "additionalProperties": { 446 "type": "integer" 447 } 448 } 449 } 450 }, 451 { 452 "not": { 453 "anyOf": [ 454 { 455 "required": [ 456 "shared", 457 "extra" 458 ], 459 "properties": { 460 "shared": { 461 "type": "object", 462 "additionalProperties": { 463 "type": "integer" 464 } 465 }, 466 "extra": { 467 "type": "integer" 468 } 469 } 470 } 471 ] 472 } 473 } 474 ] 475 }, 476 { 477 "allOf": [ 478 { 479 "required": [ 480 "shared", 481 "extra" 482 ], 483 "properties": { 484 "shared": { 485 "type": "object", 486 "additionalProperties": { 487 "type": "integer" 488 } 489 }, 490 "extra": { 491 "type": "integer" 492 } 493 } 494 }, 495 { 496 "not": { 497 "anyOf": [ 498 { 499 "required": [ 500 "shared" 501 ], 502 "properties": { 503 "shared": { 504 "type": "object", 505 "additionalProperties": { 506 "type": "integer" 507 } 508 } 509 } 510 } 511 ] 512 } 513 } 514 ] 515 }, 516 { 517 "required": [ 518 "shared", 519 "extra" 520 ], 521 "properties": { 522 "shared": { 523 "type": "string" 524 }, 525 "extra": { 526 "type": "integer" 527 } 528 } 529 } 530 ] 531 } 532 } 533 } 534 }