Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 8 additions & 23 deletions packages/dynamite/dynamite/lib/src/openapi_builder.dart
Original file line number Diff line number Diff line change
Expand Up @@ -415,8 +415,6 @@ class OpenAPIBuilder implements Builder {
nullable: dartParameterNullable,
).dartType;

state.resolvedTypeCombinations.add(result);

if (result.name == 'String') {
if (parameter.schema?.pattern != null) {
code.write('''
Expand Down Expand Up @@ -621,7 +619,6 @@ class OpenAPIBuilder implements Builder {
),
mediaType.schema!,
);
state.resolvedTypeCombinations.add(result);

if (mimeType == '*/*' ||
mimeType == 'application/octet-stream' ||
Expand Down Expand Up @@ -713,17 +710,10 @@ class OpenAPIBuilder implements Builder {

output.addAll(state.output.map((final e) => e.accept(emitter).toString()));

if (state.registeredJsonObjects.isNotEmpty) {
if (state.resolvedTypes.isNotEmpty) {
output.addAll([
'@SerializersFor(const [',
for (final name in state.registeredJsonObjects) ...[
'$name,',
],
'])',
r'final Serializers _serializers = (_$_serializers.toBuilder()',
for (final type in state.resolvedTypeCombinations) ...[
...type.builderFactories,
],
'final Serializers _serializers = (Serializers().toBuilder()',
...state.resolvedTypes.map((final type) => type.serializers).expand((final element) => element).toSet(),
').build();',
'',
'Serializers get ${variablePrefix}Serializers => _serializers;',
Expand Down Expand Up @@ -933,10 +923,8 @@ class State {
State(this.prefix);

final String prefix;
final resolvedTypes = <String>{};
final registeredJsonObjects = <String>{};
final output = <Spec>[];
final resolvedTypeCombinations = <TypeResult>{};
final resolvedTypes = <TypeResult>{};
}

TypeResult resolveObject(
Expand All @@ -948,9 +936,7 @@ TypeResult resolveObject(
final bool nullable = false,
final bool isHeader = false,
}) {
if (!state.resolvedTypes.contains('${state.prefix}$identifier')) {
state.resolvedTypes.add('${state.prefix}$identifier');
state.registeredJsonObjects.add('${state.prefix}$identifier');
if (state.resolvedTypes.add(TypeResultObject('${state.prefix}$identifier'))) {
state.output.add(
Class(
(final b) {
Expand Down Expand Up @@ -1277,8 +1263,7 @@ TypeResult resolveType(
nullable: nullable,
);
} else if (schema.ofs != null) {
if (!state.resolvedTypes.contains('${state.prefix}$identifier')) {
state.resolvedTypes.add('${state.prefix}$identifier');
if (state.resolvedTypes.add(TypeResultObject('${state.prefix}$identifier'))) {
final results = schema.ofs!
.map(
(final s) => resolveType(
Expand Down Expand Up @@ -1668,8 +1653,7 @@ TypeResult resolveType(

if (result != null) {
if (!ignoreEnum && schema.enum_ != null) {
if (!state.resolvedTypes.contains('${state.prefix}$identifier')) {
state.resolvedTypes.add('${state.prefix}$identifier');
if (state.resolvedTypes.add(TypeResultEnum('${state.prefix}$identifier', result))) {
state.output.add(
Class(
(final b) => b
Expand Down Expand Up @@ -1773,6 +1757,7 @@ TypeResult resolveType(
);
}

state.resolvedTypes.add(result);
return result;
}

Expand Down
3 changes: 3 additions & 0 deletions packages/dynamite/dynamite/lib/src/type_result/base.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ class TypeResultBase extends TypeResult {
@override
String? get _builderFactory => null;

@override
String? get _serializer => null;

@override
String serialize(final String object) => object;

Expand Down
3 changes: 3 additions & 0 deletions packages/dynamite/dynamite/lib/src/type_result/enum.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ class TypeResultEnum extends TypeResult {
@override
String? get _builderFactory => null;

@override
String? get _serializer => '..add($className.serializer)';

@override
String encode(
final String object, {
Expand Down
3 changes: 3 additions & 0 deletions packages/dynamite/dynamite/lib/src/type_result/list.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ class TypeResultList extends TypeResult {
@override
String? get _builderFactory => '..addBuilderFactory($fullType, ListBuilder<${subType.className}>.new)';

@override
String? get _serializer => null;

@override
String encode(
final String object, {
Expand Down
3 changes: 3 additions & 0 deletions packages/dynamite/dynamite/lib/src/type_result/map.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ class TypeResultMap extends TypeResult {
@override
String? get _builderFactory => '..addBuilderFactory($fullType, MapBuilder<String, ${subType.className}>.new)';

@override
String? get _serializer => null;

@override
TypeResultMap get dartType => TypeResultMap('Map', subType, nullable: nullable);

Expand Down
3 changes: 3 additions & 0 deletions packages/dynamite/dynamite/lib/src/type_result/object.dart
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ class TypeResultObject extends TypeResult {
@override
String? get _builderFactory => '..addBuilderFactory($fullType, $name.new)';

@override
String? get _serializer => '..add($className.serializer)';

@override
String encode(
final String object, {
Expand Down
22 changes: 14 additions & 8 deletions packages/dynamite/dynamite/lib/src/type_result/type_result.dart
Original file line number Diff line number Diff line change
Expand Up @@ -43,14 +43,20 @@ abstract class TypeResult {
return 'FullType($className)';
}

List<String> get builderFactories => [
for (final class_ in generics) ...[
...class_.builderFactories,
],
if (_builderFactory != null) ...[
_builderFactory!,
],
];
Iterable<String> get serializers sync* {
for (final class_ in generics) {
yield* class_.serializers;
}

if (_builderFactory != null) {
yield _builderFactory!;
}
if (_serializer != null) {
yield _serializer!;
}
}

String? get _serializer;

String? get _builderFactory;

Expand Down
1 change: 1 addition & 0 deletions packages/dynamite/dynamite_runtime/.gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# https://dart.dev/guides/libraries/private-files
# Created by `dart pub`
.dart_tool/
build/

# Avoid committing pubspec.lock for library packages; see
# https://dart.dev/guides/libraries/private-files#pubspeclock.
Expand Down
Loading