[dart-dio] Adds support for generating inline enums (#5668)

* [dart-dio] Adds support for generating inline enums

Previously these were generated as strings if declared inline in the spec.

* Adds more detailed comment about inline enums
This commit is contained in:
Josh Burton
2020-05-15 01:11:27 +12:00
committed by GitHub
parent ae2b693ccc
commit 2dd5477c24
9 changed files with 78 additions and 11 deletions
@@ -11,7 +11,7 @@ abstract class {{classname}} implements Built<{{classname}}, {{classname}}Builde
@nullable
{{/isNullable}}
@BuiltValueField(wireName: r'{{baseName}}')
{{{dataType}}} get {{name}};
{{#isEnum}}{{classname}}{{{nameInCamelCase}}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}} get {{name}};
{{#allowableValues}}
{{#min}} // range from {{min}} to {{max}}{{/min}}//{{^min}}enum {{name}}Enum { {{#values}} {{.}}, {{/values}} };{{/min}}
{{/allowableValues}}
@@ -22,5 +22,17 @@ abstract class {{classname}} implements Built<{{classname}}, {{classname}}Builde
factory {{classname}}([updates({{classname}}Builder b)]) = _${{classname}};
static Serializer<{{classname}}> get serializer => _${{classVarName}}Serializer;
}
{{!
Generate an enum for any variables that are declared as inline enums
isEnum is only true for inline variables that are enums.
If an enum is declared as a definition, isEnum is false and the enum is generated from the
enum.mustache template.
}}
{{#vars}}
{{#isEnum}}
{{>enum_inline}}
{{/isEnum}}
{{/vars}}
@@ -0,0 +1,19 @@
class {{classname}}{{nameInCamelCase}} extends EnumClass {
{{#allowableValues}}
{{#enumVars}}
{{#description}}
/// {{description}}
{{/description}}
@BuiltValueEnumConst(wireName: {{{value}}})
static const {{classname}}{{nameInCamelCase}} {{name}} = _${{name}};
{{/enumVars}}
{{/allowableValues}}
static Serializer<{{classname}}{{nameInCamelCase}}> get serializer => _${{classVarName}}{{nameInCamelCase}}Serializer;
const {{classname}}{{nameInCamelCase}}._(String name): super(name);
static BuiltSet<{{classname}}{{nameInCamelCase}}> get values => _${{classVarName}}{{nameInCamelCase}}Values;
static {{classname}}{{nameInCamelCase}} valueOf(String name) => _${{classVarName}}{{nameInCamelCase}}ValueOf(name);
}
@@ -1 +1 @@
5.0.0-SNAPSHOT
5.0.0-SNAPSHOT
@@ -23,6 +23,5 @@ abstract class ApiResponse implements Built<ApiResponse, ApiResponseBuilder> {
factory ApiResponse([updates(ApiResponseBuilder b)]) = _$ApiResponse;
static Serializer<ApiResponse> get serializer => _$apiResponseSerializer;
}
@@ -19,6 +19,5 @@ abstract class Category implements Built<Category, CategoryBuilder> {
factory Category([updates(CategoryBuilder b)]) = _$Category;
static Serializer<Category> get serializer => _$categorySerializer;
}
@@ -24,7 +24,7 @@ abstract class Order implements Built<Order, OrderBuilder> {
/* Order Status */
@nullable
@BuiltValueField(wireName: r'status')
String get status;
OrderStatus get status;
//enum statusEnum { placed, approved, delivered, };
@nullable
@@ -36,6 +36,26 @@ abstract class Order implements Built<Order, OrderBuilder> {
factory Order([updates(OrderBuilder b)]) = _$Order;
static Serializer<Order> get serializer => _$orderSerializer;
}
class OrderStatus extends EnumClass {
/// Order Status
@BuiltValueEnumConst(wireName: "placed")
static const OrderStatus placed = _$placed;
/// Order Status
@BuiltValueEnumConst(wireName: "approved")
static const OrderStatus approved = _$approved;
/// Order Status
@BuiltValueEnumConst(wireName: "delivered")
static const OrderStatus delivered = _$delivered;
static Serializer<OrderStatus> get serializer => _$orderStatusSerializer;
const OrderStatus._(String name): super(name);
static BuiltSet<OrderStatus> get values => _$orderStatusValues;
static OrderStatus valueOf(String name) => _$orderStatusValueOf(name);
}
@@ -31,7 +31,7 @@ abstract class Pet implements Built<Pet, PetBuilder> {
/* pet status in the store */
@nullable
@BuiltValueField(wireName: r'status')
String get status;
PetStatus get status;
//enum statusEnum { available, pending, sold, };
// Boilerplate code needed to wire-up generated code
@@ -39,6 +39,26 @@ abstract class Pet implements Built<Pet, PetBuilder> {
factory Pet([updates(PetBuilder b)]) = _$Pet;
static Serializer<Pet> get serializer => _$petSerializer;
}
class PetStatus extends EnumClass {
/// pet status in the store
@BuiltValueEnumConst(wireName: "available")
static const PetStatus available = _$available;
/// pet status in the store
@BuiltValueEnumConst(wireName: "pending")
static const PetStatus pending = _$pending;
/// pet status in the store
@BuiltValueEnumConst(wireName: "sold")
static const PetStatus sold = _$sold;
static Serializer<PetStatus> get serializer => _$petStatusSerializer;
const PetStatus._(String name): super(name);
static BuiltSet<PetStatus> get values => _$petStatusValues;
static PetStatus valueOf(String name) => _$petStatusValueOf(name);
}
@@ -19,6 +19,5 @@ abstract class Tag implements Built<Tag, TagBuilder> {
factory Tag([updates(TagBuilder b)]) = _$Tag;
static Serializer<Tag> get serializer => _$tagSerializer;
}
@@ -43,6 +43,5 @@ abstract class User implements Built<User, UserBuilder> {
factory User([updates(UserBuilder b)]) = _$User;
static Serializer<User> get serializer => _$userSerializer;
}