swaxios
swaxios copied to clipboard
Support for "x-enumNames" in enum definitions
I found this StackOverflow question which wants to create an interface for Color based on the following JSON input:
{
// ...
"definitions": {
"Color": {
"description": "",
"enum": [
0,
1,
2
],
"type": "integer",
"x-enumNames": [
"RED",
"GREEN",
"BLUE"
]
}
}
}
The expected result is:
export enum Color {
RED = 0,
GREEN = 1,
BLUE = 2,
}
But swaxios 0.1.2 generates:
/* tslint:disable */
/**
* This file was automatically generated by "Swaxios".
* It should not be modified by hand.
*/
export type Color = number;
Complete input file:
{
"consumes": [
"application/json"
],
"definitions": {
"Bar": {
"additionalProperties": false,
"properties": {
"A": {
"type": "string"
},
"B": {
"format": "int32",
"type": "integer"
},
"Baz": {
"$ref": "#/definitions/Baz"
},
"C": {
"format": "date-time",
"type": "string"
}
},
"required": [
"B",
"C"
],
"type": "object"
},
"Baz": {
"additionalProperties": false,
"properties": {
"Color": {
"$ref": "#/definitions/Color"
},
"D": {
"format": "decimal",
"type": "number"
}
},
"required": [
"D",
"Color"
],
"type": "object"
},
"Color": {
"description": "",
"enum": [
0,
1,
2
],
"type": "integer",
"x-enumNames": [
"RED",
"GREEN",
"BLUE"
]
}
},
"info": {
"title": "",
"version": ""
},
"parameters": {},
"paths": {
"/api/Foo/GetBar": {
"get": {
"operationId": "Foo_GetBar",
"parameters": [
{
"format": "int32",
"in": "query",
"name": "id",
"required": true,
"type": "integer",
"x-nullable": false
}
],
"responses": {
"200": {
"description": "",
"schema": {
"$ref": "#/definitions/Bar"
},
"x-nullable": true
}
},
"tags": [
"Foo"
]
}
},
"/api/Foo/GetBarDescriptions": {
"get": {
"operationId": "Foo_GetBarDescriptions",
"parameters": [],
"responses": {
"200": {
"description": "",
"schema": {
"items": {
"type": "string"
},
"type": "array"
},
"x-nullable": true
}
},
"tags": [
"Foo"
]
}
},
"/api/Foo/SetBar": {
"post": {
"operationId": "Foo_SetBar",
"parameters": [
{
"in": "body",
"name": "value",
"required": true,
"schema": {
"$ref": "#/definitions/Bar"
},
"x-nullable": true
}
],
"responses": {
"204": {
"description": ""
}
},
"tags": [
"Foo"
]
}
}
},
"produces": [
"application/json"
],
"responses": {},
"schemes": [],
"securityDefinitions": {},
"swagger": "2.0",
"x-generator": "NSwag v11.14.0.0 (NJsonSchema v9.10.24.0 (Newtonsoft.Json v9.0.0.0))"
}
The x-enumNames property is a custom property (indicated by the leading x-) but it seems to be very popular because it has been asked for in many other projects before:
- https://github.com/Redocly/redoc/issues/234
- https://github.com/RicoSuter/NSwag/issues/1993
- https://github.com/bootprint/bootprint-openapi/issues/94
- https://github.com/domaindrivendev/Swashbuckle/issues/1287
- https://github.com/json-schema-org/json-schema-spec/issues/57
- https://github.com/swagger-api/swagger-ui/issues/5272
Doc on enum flag:
- https://github.com/RicoSuter/NJsonSchema/wiki/Enums#flags-enums
I am sorry. I don't have time at the moment to care for this project too much. If you want to open PR for this issue, please had over to the bootprint-monorepo repository. It contains the latest versions of all bootprint projects.
The issue in bootprint-openapi describes the location where to fix it.