Use string union for enums

This commit is contained in:
Tino Fuhrmann 2019-03-04 00:12:07 +01:00
parent a00e342505
commit e11a5a9395
9 changed files with 56 additions and 70 deletions

View File

@ -546,14 +546,14 @@ public class TypeScriptClientCodegen extends DefaultCodegen implements CodegenCo
// name enum with model name, e.g. StatusEnum => Pet.StatusEnum
for (CodegenProperty var : cm.vars) {
if (Boolean.TRUE.equals(var.isEnum)) {
var.datatypeWithEnum = var.datatypeWithEnum.replace(var.enumName, cm.classname + "." + var.enumName);
var.datatypeWithEnum = var.datatypeWithEnum.replace(var.enumName, cm.classname + var.enumName);
}
}
if (cm.parent != null) {
for (CodegenProperty var : cm.allVars) {
if (Boolean.TRUE.equals(var.isEnum)) {
var.datatypeWithEnum = var.datatypeWithEnum
.replace(var.enumName, cm.classname + "." + var.enumName);
.replace(var.enumName, cm.classname + var.enumName);
}
}
}

View File

@ -6,7 +6,7 @@ export * from './{{{ classFilename }}}';
{{#models}}
{{#model}}
import { {{classname}} } from './{{{ classFilename }}}';
import { {{classname}}{{#hasEnums}}{{#vars}}{{#isEnum}}, {{classname}}{{enumName}} {{/isEnum}} {{/vars}}{{/hasEnums}} } from './{{{ classFilename }}}';
{{/model}}
{{/models}}
@ -22,19 +22,19 @@ let primitives = [
"any"
];
let enumsMap: {[index: string]: any} = {
let enumsMap: Set<string> = new Set<string>([
{{#models}}
{{#model}}
{{#hasEnums}}
{{#vars}}
{{#isEnum}}
{{#isContainer}}"{{classname}}.{{enumName}}": {{classname}}.{{enumName}}{{/isContainer}}{{#isNotContainer}}"{{datatypeWithEnum}}": {{datatypeWithEnum}}{{/isNotContainer}},
"{{classname}}{{enumName}}",
{{/isEnum}}
{{/vars}}
{{/hasEnums}}
{{/model}}
{{/models}}
}
]);
let typeMap: {[index: string]: any} = {
{{#models}}
@ -53,7 +53,7 @@ export class ObjectSerializer {
} else if (expectedType === "Date") {
return expectedType;
} else {
if (enumsMap[expectedType]) {
if (enumsMap.has(expectedType)) {
return expectedType;
}
@ -97,7 +97,7 @@ export class ObjectSerializer {
} else if (type === "Date") {
return data.toISOString();
} else {
if (enumsMap[type]) {
if (enumsMap.has(type)) {
return data;
}
if (!typeMap[type]) { // in case we dont know the type
@ -137,7 +137,7 @@ export class ObjectSerializer {
} else if (type === "Date") {
return new Date(data);
} else {
if (enumsMap[type]) {// is Enum
if (enumsMap.has(type)) {// is Enum
return data;
}

View File

@ -51,19 +51,13 @@ export class {{classname}} {{#parent}}extends {{{parent}}} {{/parent}}{
}
{{#hasEnums}}
export namespace {{classname}} {
{{#vars}}
{{#isEnum}}
export enum {{enumName}} {
{{#allowableValues}}
{{#enumVars}}
{{name}} = <any> {{{value}}}{{^-last}},{{/-last}}
{{/enumVars}}
{{/allowableValues}}
}
export type {{classname}}{{enumName}} ={{#allowableValues}}{{#values}} "{{.}}" {{^-last}}|{{/-last}}{{/values}}{{/allowableValues}};
{{/isEnum}}
{{/vars}}
}
{{/hasEnums}}
{{/model}}
{{/models}}

View File

@ -19,7 +19,7 @@ export class PetApi {
this.responseProcessor = new PetApiResponseProcessor();
}
public addPet(pet: Pet, options?: any): Promise<void> {
public addPet(pet: Pet, options?: Configuration): Promise<void> {
const requestContext = this.requestFactory.addPet(pet, options);
// build promise chain
@ -38,7 +38,7 @@ export class PetApi {
});
}
public deletePet(petId: number, apiKey?: string, options?: any): Promise<void> {
public deletePet(petId: number, apiKey?: string, options?: Configuration): Promise<void> {
const requestContext = this.requestFactory.deletePet(petId, apiKey, options);
// build promise chain
@ -57,7 +57,7 @@ export class PetApi {
});
}
public findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, options?: any): Promise<Array<Pet>> {
public findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, options?: Configuration): Promise<Array<Pet>> {
const requestContext = this.requestFactory.findPetsByStatus(status, options);
// build promise chain
@ -76,7 +76,7 @@ export class PetApi {
});
}
public findPetsByTags(tags: Array<string>, options?: any): Promise<Array<Pet>> {
public findPetsByTags(tags: Array<string>, options?: Configuration): Promise<Array<Pet>> {
const requestContext = this.requestFactory.findPetsByTags(tags, options);
// build promise chain
@ -95,7 +95,7 @@ export class PetApi {
});
}
public getPetById(petId: number, options?: any): Promise<Pet> {
public getPetById(petId: number, options?: Configuration): Promise<Pet> {
const requestContext = this.requestFactory.getPetById(petId, options);
// build promise chain
@ -114,7 +114,7 @@ export class PetApi {
});
}
public updatePet(pet: Pet, options?: any): Promise<void> {
public updatePet(pet: Pet, options?: Configuration): Promise<void> {
const requestContext = this.requestFactory.updatePet(pet, options);
// build promise chain
@ -133,7 +133,7 @@ export class PetApi {
});
}
public updatePetWithForm(petId: number, name?: string, status?: string, options?: any): Promise<void> {
public updatePetWithForm(petId: number, name?: string, status?: string, options?: Configuration): Promise<void> {
const requestContext = this.requestFactory.updatePetWithForm(petId, name, status, options);
// build promise chain
@ -152,7 +152,7 @@ export class PetApi {
});
}
public uploadFile(petId: number, additionalMetadata?: string, file?: HttpFile, options?: any): Promise<ApiResponse> {
public uploadFile(petId: number, additionalMetadata?: string, file?: HttpFile, options?: Configuration): Promise<ApiResponse> {
const requestContext = this.requestFactory.uploadFile(petId, additionalMetadata, file, options);
// build promise chain
@ -187,7 +187,7 @@ export class StoreApi {
this.responseProcessor = new StoreApiResponseProcessor();
}
public deleteOrder(orderId: string, options?: any): Promise<void> {
public deleteOrder(orderId: string, options?: Configuration): Promise<void> {
const requestContext = this.requestFactory.deleteOrder(orderId, options);
// build promise chain
@ -206,7 +206,7 @@ export class StoreApi {
});
}
public getInventory(options?: any): Promise<{ [key: string]: number; }> {
public getInventory(options?: Configuration): Promise<{ [key: string]: number; }> {
const requestContext = this.requestFactory.getInventory(options);
// build promise chain
@ -225,7 +225,7 @@ export class StoreApi {
});
}
public getOrderById(orderId: number, options?: any): Promise<Order> {
public getOrderById(orderId: number, options?: Configuration): Promise<Order> {
const requestContext = this.requestFactory.getOrderById(orderId, options);
// build promise chain
@ -244,7 +244,7 @@ export class StoreApi {
});
}
public placeOrder(order: Order, options?: any): Promise<Order> {
public placeOrder(order: Order, options?: Configuration): Promise<Order> {
const requestContext = this.requestFactory.placeOrder(order, options);
// build promise chain
@ -279,7 +279,7 @@ export class UserApi {
this.responseProcessor = new UserApiResponseProcessor();
}
public createUser(user: User, options?: any): Promise<void> {
public createUser(user: User, options?: Configuration): Promise<void> {
const requestContext = this.requestFactory.createUser(user, options);
// build promise chain
@ -298,7 +298,7 @@ export class UserApi {
});
}
public createUsersWithArrayInput(user: Array<User>, options?: any): Promise<void> {
public createUsersWithArrayInput(user: Array<User>, options?: Configuration): Promise<void> {
const requestContext = this.requestFactory.createUsersWithArrayInput(user, options);
// build promise chain
@ -317,7 +317,7 @@ export class UserApi {
});
}
public createUsersWithListInput(user: Array<User>, options?: any): Promise<void> {
public createUsersWithListInput(user: Array<User>, options?: Configuration): Promise<void> {
const requestContext = this.requestFactory.createUsersWithListInput(user, options);
// build promise chain
@ -336,7 +336,7 @@ export class UserApi {
});
}
public deleteUser(username: string, options?: any): Promise<void> {
public deleteUser(username: string, options?: Configuration): Promise<void> {
const requestContext = this.requestFactory.deleteUser(username, options);
// build promise chain
@ -355,7 +355,7 @@ export class UserApi {
});
}
public getUserByName(username: string, options?: any): Promise<User> {
public getUserByName(username: string, options?: Configuration): Promise<User> {
const requestContext = this.requestFactory.getUserByName(username, options);
// build promise chain
@ -374,7 +374,7 @@ export class UserApi {
});
}
public loginUser(username: string, password: string, options?: any): Promise<string> {
public loginUser(username: string, password: string, options?: Configuration): Promise<string> {
const requestContext = this.requestFactory.loginUser(username, password, options);
// build promise chain
@ -393,7 +393,7 @@ export class UserApi {
});
}
public logoutUser(options?: any): Promise<void> {
public logoutUser(options?: Configuration): Promise<void> {
const requestContext = this.requestFactory.logoutUser(options);
// build promise chain
@ -412,7 +412,7 @@ export class UserApi {
});
}
public updateUser(username: string, user: User, options?: any): Promise<void> {
public updateUser(username: string, user: User, options?: Configuration): Promise<void> {
const requestContext = this.requestFactory.updateUser(username, user, options);
// build promise chain

View File

@ -7,8 +7,8 @@ export * from './User';
import { ApiResponse } from './ApiResponse';
import { Category } from './Category';
import { Order } from './Order';
import { Pet } from './Pet';
import { Order , OrderStatusEnum } from './Order';
import { Pet , PetStatusEnum } from './Pet';
import { Tag } from './Tag';
import { User } from './User';
@ -24,10 +24,10 @@ let primitives = [
"any"
];
let enumsMap: {[index: string]: any} = {
"Order.StatusEnum": Order.StatusEnum,
"Pet.StatusEnum": Pet.StatusEnum,
}
let enumsMap: Set<string> = new Set<string>([
"OrderStatusEnum",
"PetStatusEnum",
]);
let typeMap: {[index: string]: any} = {
"ApiResponse": ApiResponse,
@ -47,7 +47,7 @@ export class ObjectSerializer {
} else if (expectedType === "Date") {
return expectedType;
} else {
if (enumsMap[expectedType]) {
if (enumsMap.has(expectedType)) {
return expectedType;
}
@ -91,7 +91,7 @@ export class ObjectSerializer {
} else if (type === "Date") {
return data.toISOString();
} else {
if (enumsMap[type]) {
if (enumsMap.has(type)) {
return data;
}
if (!typeMap[type]) { // in case we dont know the type
@ -131,7 +131,7 @@ export class ObjectSerializer {
} else if (type === "Date") {
return new Date(data);
} else {
if (enumsMap[type]) {// is Enum
if (enumsMap.has(type)) {// is Enum
return data;
}

View File

@ -13,7 +13,7 @@ export class Order {
/**
* Order Status
*/
'status'?: Order.StatusEnum;
'status'?: OrderStatusEnum;
'complete'?: boolean;
static discriminator: string | undefined = undefined;
@ -42,7 +42,7 @@ export class Order {
{
"name": "status",
"baseName": "status",
"type": "Order.StatusEnum"
"type": "OrderStatusEnum"
},
{
"name": "complete",
@ -55,10 +55,6 @@ export class Order {
}
}
export namespace Order {
export enum StatusEnum {
Placed = <any> 'placed',
Approved = <any> 'approved',
Delivered = <any> 'delivered'
}
}
export type OrderStatusEnum = "placed" | "approved" | "delivered" ;

View File

@ -16,7 +16,7 @@ export class Pet {
/**
* pet status in the store
*/
'status'?: Pet.StatusEnum;
'status'?: PetStatusEnum;
static discriminator: string | undefined = undefined;
@ -49,7 +49,7 @@ export class Pet {
{
"name": "status",
"baseName": "status",
"type": "Pet.StatusEnum"
"type": "PetStatusEnum"
} ];
static getAttributeTypeMap() {
@ -57,10 +57,6 @@ export class Pet {
}
}
export namespace Pet {
export enum StatusEnum {
Available = <any> 'available',
Pending = <any> 'pending',
Sold = <any> 'sold'
}
}
export type PetStatusEnum = "available" | "pending" | "sold" ;

View File

@ -13,7 +13,7 @@ const pet = new Pet()
pet.id = Math.floor(Math.random() * 100000)
pet.name = "PetName"
pet.photoUrls = []
pet.status = Pet.StatusEnum.Available
pet.status = 'available'
pet.tags = [ tag ]
pet.category = undefined

View File

@ -48,7 +48,7 @@ describe("ObjectSerializer", () => {
});
it ("Enum", () => {
const input = Pet.StatusEnum.Available
const input = "available"
expect(ObjectSerializer.serialize(input, "Pet.StatusEnum")).to.equal("available")
})
@ -74,7 +74,7 @@ describe("ObjectSerializer", () => {
pet.category = category
pet.name = "PetName"
pet.photoUrls = [ "url", "other url"]
pet.status = Pet.StatusEnum.Available
pet.status = "available"
pet.tags = tags
expect(ObjectSerializer.serialize(pet, "Pet")).to.deep.equal({
@ -149,7 +149,7 @@ describe("ObjectSerializer", () => {
});
it ("Enum", () => {
const input = Pet.StatusEnum.Available
const input = "available"
expect(ObjectSerializer.deserialize("available", "Pet.StatusEnum")).to.equal(input)
})
@ -175,7 +175,7 @@ describe("ObjectSerializer", () => {
pet.category = category
pet.name = "PetName"
pet.photoUrls = [ "url", "other url"]
pet.status = Pet.StatusEnum.Available
pet.status = "available"
pet.tags = tags
const deserialized = ObjectSerializer.deserialize({