fix(dart-dio): generate enum using built_value (#4235)

Signed-off-by: Minsu Lee <amond@amond.net>
This commit is contained in:
amond
2019-10-25 00:00:21 +09:00
committed by William Cheng
parent 7901ae2306
commit bf5db10837
3 changed files with 52 additions and 28 deletions

View File

@@ -38,6 +38,7 @@ import java.util.Set;
import io.swagger.v3.oas.models.media.Schema;
import static org.openapitools.codegen.utils.StringUtils.camelize;
import static org.openapitools.codegen.utils.StringUtils.underscore;
public class DartDioClientCodegen extends DartClientCodegen {
@@ -61,7 +62,6 @@ public class DartDioClientCodegen extends DartClientCodegen {
private static final String SERIALIZATION_JSON = "json";
private boolean nullableFields = true;
private String serialization = SERIALIZATION_JSON;
public DartDioClientCodegen() {
super();
@@ -102,6 +102,32 @@ public class DartDioClientCodegen extends DartClientCodegen {
return super.toDefaultValue(p);
}
@Override
public String escapeReservedWord(String name) {
if (this.reservedWordsMappings().containsKey(name)) {
return this.reservedWordsMappings().get(name);
}
return "_" + name;
}
@Override
public String toEnumVarName(String name, String datatype) {
if (name.length() == 0) {
return "empty";
}
if ("number".equalsIgnoreCase(datatype) ||
"int".equalsIgnoreCase(datatype)) {
name = "Number" + name;
}
name = camelize(name, true);
// for reserved word or word starting with number, append _
if (isReservedWord(name) || name.matches("^\\d.*")) {
name = escapeReservedWord(name);
}
return name;
}
@Override
public void processOpts() {
if (StringUtils.isEmpty(System.getenv("DART_POST_PROCESS_FILE"))) {

View File

@@ -15,7 +15,7 @@ abstract class {{classname}} implements Built<{{classname}}, {{classname}}Builde
@BuiltValueField(wireName: '{{baseName}}')
{{{dataType}}} get {{name}};
{{#allowableValues}}
{{#min}} // range from {{min}} to {{max}}{{/min}}//{{^min}}enum {{name}}Enum { {{#values}} {{.}}, {{/values}} };{{/min}}{
{{#min}} // range from {{min}} to {{max}}{{/min}}//{{^min}}enum {{name}}Enum { {{#values}} {{.}}, {{/values}} };{{/min}}
{{/allowableValues}}
{{/vars}}
@@ -25,4 +25,4 @@ abstract class {{classname}} implements Built<{{classname}}, {{classname}}Builde
factory {{classname}}([updates({{classname}}Builder b)]) = _${{classname}};
static Serializer<{{classname}}> get serializer => _${{classVarName}}Serializer;
}
}

View File

@@ -1,36 +1,34 @@
@Entity()
class {{classname}} {
/// The underlying value of this enum member.
final {{dataType}} value;
import 'package:built_collection/built_collection.dart';
import 'package:built_value/built_value.dart';
import 'package:built_value/serializer.dart';
const {{classname}}._internal(this.value);
part '{{classFilename}}.g.dart';
class {{classname}} extends EnumClass {
{{#allowableValues}}
{{#enumVars}}
{{#description}}
/// {{description}}
{{/description}}
static const {{classname}} {{{name}}} = const {{classname}}._internal({{{value}}});
@BuiltValueEnumConst(wireName: '{{name}}')
static const {{classname}} {{name}} = _${{name}};
{{/enumVars}}
{{/allowableValues}}
static Serializer<{{classname}}> get serializer => _${{classVarName}}Serializer;
const {{classname}}._(String name): super(name);
static BuiltSet<{{classname}}> get values => _$values;
static {{classname}} valueOf(String name) => _$valueOf(name);
}
class {{classname}}TypeTransformer extends TypeTransformer<{{classname}}> {
@override
dynamic encode({{classname}} data) {
return data.value;
}
@override
{{classname}} decode(dynamic data) {
switch (data) {
{{#allowableValues}}
{{#enumVars}}
case {{{value}}}: return {{classname}}.{{{name}}};
{{/enumVars}}
{{/allowableValues}}
default: throw('Unknown enum value to decode: $data');
}
}
}
/// Optionally, enum_class can generate a mixin to go with your enum for use
/// with Angular. It exposes your enum constants as getters. So, if you mix it
/// in to your Dart component class, the values become available to the
/// corresponding Angular template.
///
/// Trigger mixin generation by writing a line like this one next to your enum.
abstract class {{classname}}Mixin = Object with _${{classname}}Mixin;