Skip to content

Commit d8463cb

Browse files
Merge pull request #129 from icapps/feature/jsonValue-in-enums
Added jsonValue field in enums
2 parents 093a2a8 + 66ced92 commit d8463cb

27 files changed

+114
-63
lines changed

CHANGELOG.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# Changelog
2-
## [7.0.0] - 2022-12-25
2+
## [7.0.0] - 2023-01-10
3+
- Updated min dart version to >2.17
34
- Added support for generating drift tables by adding `generate_drift_table: true` on model definition
5+
- Added jsonValue to enum values to easily map from/to json values
46

57
## [6.1.0] - 2022-10-14
68
- Support passing a directory instead of a file. All .yaml files inside this folder (recursively) will be used to build the final model data.

example/lib/custom_model_directory/article/custom_base_directory_obj.dart

+2-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

example/lib/database/model/book/book.dart

+4-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

example/lib/model/article/no_custom_base_directory_obj.dart

+2-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

example/lib/model/book/book.dart

+4-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

example/lib/model/book/book_category.dart

+9-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

example/lib/model/ogm.dart

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

example/lib/model/user/person/gender.dart

+13-9
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

example/lib/model/user/person/person.dart

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

example/lib/model/user/profile/admin_profile_data.dart

+2-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

example/lib/model/user/profile/user_profile_data.dart

+2-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

example/lib/model/user/profile/user_profile_data_extended.dart

+2-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

example/lib/model/user/project/project.dart

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

example/lib/model/user/testing.dart

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

example/model_generator/config.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,7 @@ Book:
198198
publishers:
199199
type: array
200200
required: false # this is NOT required, so will be added to the getModel method as optional
201+
ignore_for_table: true
201202
items:
202203
type: Person
203204
category: BookCategory

example/pubspec.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ description: A project used to demo the model generator
33
version: 1.0.0+1
44

55
environment:
6-
sdk: ">=2.12.0 <3.0.0"
6+
sdk: ">=2.17.0 <3.0.0"
77

88
dependencies:
99
drift: ^2.3.0 # This is added since we can now generate database tables

lib/writer/drift_model_writer.dart

+2-2
Original file line numberDiff line numberDiff line change
@@ -164,14 +164,14 @@ class DriftModelWriter {
164164
@override
165165
$uppercaseFieldName fromSql(String fromDb) {
166166
for (final value in $uppercaseFieldName.values) {
167-
if (value.toString() == fromDb) return value;
167+
if (value.jsonValue == fromDb) return value;
168168
}
169169
return $uppercaseFieldName.values.first;
170170
}
171171
172172
@override
173173
String toSql($uppercaseFieldName value) {
174-
return value.toString();
174+
return value.jsonValue;
175175
}
176176
}""");
177177
}

lib/writer/enum_model_writer.dart

+15-1
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,32 @@ class EnumModelWriter {
1919
}
2020

2121
sb.writeln('enum ${jsonModel.name} {');
22+
var first = true;
2223
jsonModel.fields?.forEach((key) {
2324
final jsonValue = key.value == null || key.value?.isEmpty == null
2425
? key.serializedName
2526
: key.value;
2627
final description = key.description;
28+
29+
if (first) {
30+
first = false;
31+
} else {
32+
sb.writeln(',');
33+
}
2734
if (description != null) {
2835
sb.writeln(' ///$description');
2936
}
3037
sb
3138
..writeln(" @JsonValue('$jsonValue')")
32-
..writeln(' ${key.name},');
39+
..write(" ${key.name}('$jsonValue')");
3340
});
41+
if (jsonModel.fields?.isNotEmpty == true) {
42+
sb.writeln(';');
43+
}
44+
sb.writeln('');
45+
sb.writeln(' final String jsonValue;');
46+
sb.writeln('');
47+
sb.writeln(' const ${jsonModel.name}(this.jsonValue);');
3448
sb.writeln('}');
3549

3650
if (jsonModel.generateMap) {

test/writer/drift_model_writer/enum_field/output.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,13 @@ class PersonTableGenderConverter extends TypeConverter<Gender, String> {
3333
@override
3434
Gender fromSql(String fromDb) {
3535
for (final value in Gender.values) {
36-
if (value.toString() == fromDb) return value;
36+
if (value.jsonValue == fromDb) return value;
3737
}
3838
return Gender.values.first;
3939
}
4040

4141
@override
4242
String toSql(Gender value) {
43-
return value.toString();
43+
return value.jsonValue;
4444
}
4545
}

test/writer/drift_model_writer/enum_field_twice/output.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,13 @@ class PersonTableGenderConverter extends TypeConverter<Gender, String> {
3737
@override
3838
Gender fromSql(String fromDb) {
3939
for (final value in Gender.values) {
40-
if (value.toString() == fromDb) return value;
40+
if (value.jsonValue == fromDb) return value;
4141
}
4242
return Gender.values.first;
4343
}
4444

4545
@override
4646
String toSql(Gender value) {
47-
return value.toString();
47+
return value.jsonValue;
4848
}
4949
}

test/writer/enum_model_writer/custom-value-map-extension.txt

+6-2
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,13 @@ import 'package:json_annotation/json_annotation.dart';
44

55
enum MyEnumModel {
66
@JsonValue('customValue')
7-
MY_VALUE_1,
7+
MY_VALUE_1('customValue'),
88
@JsonValue('MY_VALUE_2')
9-
MY_VALUE_2,
9+
MY_VALUE_2('MY_VALUE_2');
10+
11+
final String jsonValue;
12+
13+
const MyEnumModel(this.jsonValue);
1014
}
1115

1216
const MyEnumModelMapping = {

test/writer/enum_model_writer/custom-value-map.txt

+6-2
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,13 @@ import 'package:json_annotation/json_annotation.dart';
44

55
enum MyEnumModel {
66
@JsonValue('customValue')
7-
MY_VALUE_1,
7+
MY_VALUE_1('customValue'),
88
@JsonValue('MY_VALUE_2')
9-
MY_VALUE_2,
9+
MY_VALUE_2('MY_VALUE_2');
10+
11+
final String jsonValue;
12+
13+
const MyEnumModel(this.jsonValue);
1014
}
1115

1216
const MyEnumModelMapping = {

0 commit comments

Comments
 (0)