Skip to content

Commit 982a035

Browse files
committed
add better enum support to swift
1 parent acb34e3 commit 982a035

File tree

10 files changed

+412
-830
lines changed

10 files changed

+412
-830
lines changed

modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SwiftCodegen.java

Lines changed: 59 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -335,8 +335,10 @@ public CodegenProperty fromProperty(String name, Property p) {
335335
swiftEnums.add(map);
336336
}
337337
codegenProperty.allowableValues.put("values", swiftEnums);
338-
codegenProperty.datatypeWithEnum =
339-
StringUtils.left(codegenProperty.datatypeWithEnum, codegenProperty.datatypeWithEnum.length() - "Enum".length());
338+
codegenProperty.datatypeWithEnum = toEnumName(codegenProperty);
339+
//codegenProperty.datatypeWithEnum =
340+
// StringUtils.left(codegenProperty.datatypeWithEnum, codegenProperty.datatypeWithEnum.length() - "Enum".length());
341+
340342
// Ensure that the enum type doesn't match a reserved word or
341343
// the variable name doesn't match the generated enum type or the
342344
// Swift compiler will generate an error
@@ -483,4 +485,59 @@ public void setUnwrapRequired(boolean unwrapRequired) {
483485
public void setResponseAs(String[] responseAs) {
484486
this.responseAs = responseAs;
485487
}
488+
489+
@Override
490+
public String toEnumValue(String value, String datatype) {
491+
if ("int".equals(datatype) || "double".equals(datatype) || "float".equals(datatype)) {
492+
return value;
493+
} else {
494+
return "\'" + escapeText(value) + "\'";
495+
}
496+
}
497+
498+
@Override
499+
public String toEnumDefaultValue(String value, String datatype) {
500+
return datatype + "_" + value;
501+
}
502+
503+
@Override
504+
public String toEnumVarName(String name, String datatype) {
505+
// number
506+
if ("int".equals(datatype) || "double".equals(datatype) || "float".equals(datatype)) {
507+
String varName = new String(name);
508+
varName = varName.replaceAll("-", "MINUS_");
509+
varName = varName.replaceAll("\\+", "PLUS_");
510+
varName = varName.replaceAll("\\.", "_DOT_");
511+
return varName;
512+
}
513+
514+
// string
515+
String enumName = sanitizeName(underscore(name).toUpperCase());
516+
enumName = enumName.replaceFirst("^_", "");
517+
enumName = enumName.replaceFirst("_$", "");
518+
519+
if (enumName.matches("\\d.*")) { // starts with number
520+
return "_" + enumName;
521+
} else {
522+
return enumName;
523+
}
524+
}
525+
526+
@Override
527+
public String toEnumName(CodegenProperty property) {
528+
String enumName = underscore(toModelName(property.name)).toUpperCase();
529+
530+
if (enumName.matches("\\d.*")) { // starts with number
531+
return "_" + enumName;
532+
} else {
533+
return enumName;
534+
}
535+
}
536+
537+
@Override
538+
public Map<String, Object> postProcessModels(Map<String, Object> objs) {
539+
// process enum in models
540+
return postProcessModelsEnum(objs);
541+
}
542+
486543
}

0 commit comments

Comments
 (0)