Skip to content

Commit 1245d98

Browse files
authored
Merge pull request #1 from AAkira/dart-dio/json-serializer-date
Dart dio/json serializer date
2 parents 1e2f16e + ed14536 commit 1245d98

55 files changed

Lines changed: 179 additions & 9 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartDioClientCodegen.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,12 @@ private void configureDateLibrary(String srcFolder) {
301301
importMapping.put("Date", "package:" + pubName + "/" + sourceFolder + "/" + modelPackage() + "/date.dart");
302302
supportingFiles.add(new SupportingFile("serialization/built_value/date.mustache", srcFolder + File.separator + modelPackage(), "date.dart"));
303303
supportingFiles.add(new SupportingFile("serialization/built_value/date_serializer.mustache", srcFolder, "date_serializer.dart"));
304+
} else if (SERIALIZATION_LIBRARY_JSON_SERIALIZABLE.equals(library)) {
305+
typeMapping.put("date", "Date");
306+
typeMapping.put("Date", "Date");
307+
importMapping.put("Date", "package:" + pubName + "/" + sourceFolder + "/" + modelPackage() + "/date.dart");
308+
supportingFiles.add(new SupportingFile("serialization/json_serializable/date.mustache", srcFolder + File.separator + modelPackage(), "date.dart"));
309+
supportingFiles.add(new SupportingFile("serialization/json_serializable/date_serializer.mustache", srcFolder + File.separator + modelPackage(), "date_serializer.dart"));
304310
}
305311
break;
306312
}

modules/openapi-generator/src/main/resources/dart/libraries/dio/lib.mustache

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ export 'package:{{pubName}}/{{sourceFolder}}/api.dart';
33
export 'package:{{pubName}}/{{sourceFolder}}/auth/api_key_auth.dart';
44
export 'package:{{pubName}}/{{sourceFolder}}/auth/basic_auth.dart';
55
export 'package:{{pubName}}/{{sourceFolder}}/auth/oauth.dart';
6-
{{#useBuiltValue}}export 'package:{{pubName}}/{{sourceFolder}}/serializers.dart';
7-
{{#useDateLibCore}}export 'package:{{pubName}}/{{sourceFolder}}/{{modelPackage}}/date.dart';{{/useDateLibCore}}{{/useBuiltValue}}
6+
{{#useBuiltValue}}export 'package:{{pubName}}/{{sourceFolder}}/serializers.dart';{{/useBuiltValue}}
7+
{{#useDateLibCore}}export 'package:{{pubName}}/{{sourceFolder}}/{{modelPackage}}/date.dart';{{/useDateLibCore}}
88

99
{{#apiInfo}}{{#apis}}export 'package:{{pubName}}/{{sourceFolder}}/{{apiPackage}}/{{classFilename}}.dart';
1010
{{/apis}}{{/apiInfo}}

modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/json_serializable/class.mustache

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import 'package:json_annotation/json_annotation.dart';
2+
{{#useDateLibCore}}import 'package:{{pubName}}/{{sourceFolder}}/{{modelPackage}}/date_serializer.dart';{{/useDateLibCore}}
23

34
part '{{classFilename}}.g.dart';
45

@@ -50,6 +51,9 @@ class {{{classname}}} {
5051
@JsonKey(ignore: true)
5152
{{/isBinary}}
5253

54+
{{#isDate}}
55+
@DateSerializer()
56+
{{/isDate}}
5357

5458
{{#required}}
5559
{{#finalProperties}}final {{/finalProperties}}{{{datatypeWithEnum}}}{{#isNullable}}?{{/isNullable}} {{{name}}};
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/// A gregorian calendar date generated by
2+
/// OpenAPI generator to differentiate
3+
/// between [DateTime] and [Date] formats.
4+
import 'package:json_annotation/json_annotation.dart';
5+
6+
part 'date.g.dart';
7+
8+
@JsonSerializable(
9+
checked: true,
10+
createToJson: true,
11+
disallowUnrecognizedKeys: false,
12+
explicitToJson: true,
13+
)
14+
class Date {
15+
16+
const Date({
17+
required this.year,
18+
required this.month,
19+
required this.day,
20+
});
21+
22+
factory Date.fromJson(Map<String, dynamic> json) => _$DateFromJson(json);
23+
24+
final int year;
25+
26+
final int month;
27+
28+
final int day;
29+
30+
Map<String, dynamic> toJson() => _$DateToJson(this);
31+
32+
@override
33+
String toString() {
34+
final yyyy = year.toString();
35+
final mm = month.toString().padLeft(2, '0');
36+
final dd = day.toString().padLeft(2, '0');
37+
38+
return '$yyyy-$mm-$dd';
39+
}
40+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import 'package:json_annotation/json_annotation.dart';
2+
import 'package:{{pubName}}/src/model/date.dart';
3+
4+
class DateSerializer implements JsonConverter<Date, String> {
5+
const DateSerializer();
6+
7+
@override
8+
Date fromJson(String json) {
9+
final parsed = DateTime.parse(json);
10+
return Date(year: parsed.year, month: parsed.month, day: parsed.day);
11+
}
12+
13+
@override
14+
String toJson(Date object) => object.toString();
15+
}

samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/.openapi-generator/FILES

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,8 @@ lib/src/model/cat.dart
8484
lib/src/model/cat_all_of.dart
8585
lib/src/model/category.dart
8686
lib/src/model/class_model.dart
87+
lib/src/model/date.dart
88+
lib/src/model/date_serializer.dart
8789
lib/src/model/deprecated_object.dart
8890
lib/src/model/dog.dart
8991
lib/src/model/dog_all_of.dart

samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/doc/FakeApi.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -521,7 +521,7 @@ final int int64 = 789; // int | None
521521
final double float = 3.4; // double | None
522522
final String string = string_example; // String | None
523523
final MultipartFile binary = BINARY_DATA_HERE; // MultipartFile | None
524-
final DateTime date = 2013-10-20; // DateTime | None
524+
final Date date = 2013-10-20; // Date | None
525525
final DateTime dateTime = 2013-10-20T19:20:30+01:00; // DateTime | None
526526
final String password = password_example; // String | None
527527
final String callback = callback_example; // String | None
@@ -547,7 +547,7 @@ Name | Type | Description | Notes
547547
**float** | **double**| None | [optional]
548548
**string** | **String**| None | [optional]
549549
**binary** | **MultipartFile**| None | [optional]
550-
**date** | **DateTime**| None | [optional]
550+
**date** | **Date**| None | [optional]
551551
**dateTime** | **DateTime**| None | [optional]
552552
**password** | **String**| None | [optional]
553553
**callback** | **String**| None | [optional]

samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/doc/FormatTest.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ Name | Type | Description | Notes
1818
**string** | **String** | | [optional]
1919
**byte** | **String** | |
2020
**binary** | [**MultipartFile**](MultipartFile.md) | | [optional]
21-
**date** | [**DateTime**](DateTime.md) | |
21+
**date** | [**Date**](Date.md) | |
2222
**dateTime** | [**DateTime**](DateTime.md) | | [optional]
2323
**uuid** | **String** | | [optional]
2424
**password** | **String** | |

samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/doc/NullableClass.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ Name | Type | Description | Notes
1212
**numberProp** | **num** | | [optional]
1313
**booleanProp** | **bool** | | [optional]
1414
**stringProp** | **String** | | [optional]
15-
**dateProp** | [**DateTime**](DateTime.md) | | [optional]
15+
**dateProp** | [**Date**](Date.md) | | [optional]
1616
**datetimeProp** | [**DateTime**](DateTime.md) | | [optional]
1717
**arrayNullableProp** | **List&lt;Object&gt;** | | [optional]
1818
**arrayAndItemsNullableProp** | **List&lt;Object&gt;** | | [optional]

samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/openapi.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ export 'package:openapi/src/auth/api_key_auth.dart';
77
export 'package:openapi/src/auth/basic_auth.dart';
88
export 'package:openapi/src/auth/oauth.dart';
99

10+
export 'package:openapi/src/model/date.dart';
1011

1112
export 'package:openapi/src/api/another_fake_api.dart';
1213
export 'package:openapi/src/api/default_api.dart';

0 commit comments

Comments
 (0)