Skip to content

Commit ab218c7

Browse files
authored
Add support for screaming snake case (#1118)
Fixes #1032
1 parent 6687178 commit ab218c7

File tree

9 files changed

+33
-2
lines changed

9 files changed

+33
-2
lines changed

checked_yaml/pubspec.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,5 @@ dev_dependencies:
2424
dependency_overrides:
2525
json_annotation:
2626
path: ../json_annotation
27+
json_serializable:
28+
path: ../json_serializable

json_annotation/lib/src/json_serializable.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,11 @@ enum FieldRename {
2222
snake,
2323

2424
/// Encodes a field named `pascalCase` with a JSON key `PascalCase`.
25-
pascal
25+
pascal,
26+
27+
/// Encodes a field named `screamingSnakeCase` with a JSON key
28+
/// `SCREAMING_SNAKE_CASE`
29+
screamingSnake,
2630
}
2731

2832
/// An annotation used to specify a class to generate code for.

json_annotation/lib/src/json_serializable.g.dart

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

json_serializable/lib/src/type_helpers/config_types.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ const _$FieldRenameEnumMap = {
117117
FieldRename.kebab: 'kebab',
118118
FieldRename.snake: 'snake',
119119
FieldRename.pascal: 'pascal',
120+
FieldRename.screamingSnake: 'screamingSnake',
120121
};
121122

122123
// #CHANGE WHEN UPDATING json_annotation

json_serializable/lib/src/utils.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,8 @@ String encodedFieldName(
178178
return declaredName;
179179
case FieldRename.snake:
180180
return declaredName.snake;
181+
case FieldRename.screamingSnake:
182+
return declaredName.snake.toUpperCase();
181183
case FieldRename.kebab:
182184
return declaredName.kebab;
183185
case FieldRename.pascal:

json_serializable/pubspec.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,7 @@ dev_dependencies:
3636
test_descriptor: ^2.0.0
3737
test_process: ^2.0.0
3838
yaml: ^3.0.0
39+
40+
dependency_overrides:
41+
json_annotation:
42+
path: ../json_annotation

json_serializable/test/config_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ void main() {
120120
case 'field_rename':
121121
lastLine =
122122
'`42` is not one of the supported values: none, kebab, snake, '
123-
'pascal';
123+
'pascal, screamingSnake';
124124
break;
125125
case 'constructor':
126126
lastLine = "type 'int' is not a subtype of type 'String?' in type "

json_serializable/test/json_serializable_test.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ const _expectedAnnotatedTests = {
5858
'FieldNamerKebab',
5959
'FieldNamerNone',
6060
'FieldNamerPascal',
61+
'FieldNamerScreamingSnake',
6162
'FieldNamerSnake',
6263
'FieldWithFromJsonCtorAndTypeParams',
6364
'FinalFields',

json_serializable/test/src/field_namer_input.dart

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,3 +59,19 @@ class FieldNamerSnake {
5959
@JsonKey(name: 'NAME_OVERRIDE')
6060
late String nameOverride;
6161
}
62+
63+
@ShouldGenerate(r'''
64+
Map<String, dynamic> _$FieldNamerScreamingSnakeToJson(
65+
FieldNamerScreamingSnake instance) =>
66+
<String, dynamic>{
67+
'THE_FIELD': instance.theField,
68+
'nameOverride': instance.nameOverride,
69+
};
70+
''')
71+
@JsonSerializable(fieldRename: FieldRename.screamingSnake, createFactory: false)
72+
class FieldNamerScreamingSnake {
73+
late String theField;
74+
75+
@JsonKey(name: 'nameOverride')
76+
late String nameOverride;
77+
}

0 commit comments

Comments
 (0)