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  }