Skip to content

Commit a486a9d

Browse files
committed
fix(dynamite): fix reference to enum types
Signed-off-by: Nikolas Rimikis <leptopoda@users.noreply.github.com>
1 parent cd75ff1 commit a486a9d

File tree

5 files changed

+177
-2
lines changed

5 files changed

+177
-2
lines changed

packages/dynamite/dynamite/lib/src/builder/resolve_type.dart

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import 'package:dynamite/src/builder/resolve_enum.dart';
33
import 'package:dynamite/src/builder/resolve_object.dart';
44
import 'package:dynamite/src/builder/resolve_ofs.dart';
55
import 'package:dynamite/src/builder/state.dart';
6+
import 'package:dynamite/src/helpers/dart_helpers.dart';
67
import 'package:dynamite/src/models/openapi.dart' as openapi;
78
import 'package:dynamite/src/models/type_result.dart';
89

@@ -25,7 +26,7 @@ TypeResult resolveType(
2526
final subResult = resolveType(
2627
spec,
2728
state,
28-
name,
29+
toDartName(name, uppercaseFirstCharacter: true),
2930
spec.components!.schemas![name]!,
3031
nullable: nullable,
3132
);

packages/dynamite/dynamite_end_to_end_test/lib/enum.openapi.dart

+28-1
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,31 @@ abstract class WrappedEnum implements $WrappedEnumInterface, Built<WrappedEnum,
368368
static Serializer<WrappedEnum> get serializer => _$wrappedEnumSerializer;
369369
}
370370

371+
@BuiltValue(instantiable: false)
372+
abstract interface class $EnumReferenceInterface {
373+
EnumString get string;
374+
}
375+
376+
abstract class EnumReference implements $EnumReferenceInterface, Built<EnumReference, EnumReferenceBuilder> {
377+
/// Creates a new EnumReference object using the builder pattern.
378+
factory EnumReference([void Function(EnumReferenceBuilder)? b]) = _$EnumReference;
379+
380+
const EnumReference._();
381+
382+
/// Creates a new object from the given [json] data.
383+
///
384+
/// Use [toJson] to serialize it back into json.
385+
factory EnumReference.fromJson(Map<String, dynamic> json) => jsonSerializers.deserializeWith(serializer, json)!;
386+
387+
/// Parses this object into a json like map.
388+
///
389+
/// Use the fromJson factory to revive it again.
390+
Map<String, dynamic> toJson() => jsonSerializers.serializeWith(serializer, this)! as Map<String, dynamic>;
391+
392+
/// Serializer for EnumReference.
393+
static Serializer<EnumReference> get serializer => _$enumReferenceSerializer;
394+
}
395+
371396
// coverage:ignore-start
372397
/// Serializer for all values in this library.
373398
///
@@ -381,7 +406,9 @@ final Serializers serializers = (Serializers().toBuilder()
381406
..addBuilderFactory(const FullType(WrappedEnum), WrappedEnumBuilder.new)
382407
..add(WrappedEnum.serializer)
383408
..add(WrappedEnum_CustomString.serializer)
384-
..add(WrappedEnum_Integer.serializer))
409+
..add(WrappedEnum_Integer.serializer)
410+
..addBuilderFactory(const FullType(EnumReference), EnumReferenceBuilder.new)
411+
..add(EnumReference.serializer))
385412
.build();
386413

387414
/// Serializer for all values in this library.

packages/dynamite/dynamite_end_to_end_test/lib/enum.openapi.g.dart

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

packages/dynamite/dynamite_end_to_end_test/lib/enum.openapi.json

+11
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,17 @@
5454
]
5555
}
5656
}
57+
},
58+
"enum-reference": {
59+
"type": "object",
60+
"required": [
61+
"string"
62+
],
63+
"properties": {
64+
"string": {
65+
"$ref": "#/components/schemas/enum-string"
66+
}
67+
}
5768
}
5869
}
5970
},

packages/dynamite/dynamite_end_to_end_test/test/enum_test.dart

+13
Original file line numberDiff line numberDiff line change
@@ -113,4 +113,17 @@ void main() {
113113
expect(WrappedEnum.fromJson(json), equals(object));
114114
});
115115
});
116+
117+
test('EnumReference', () {
118+
final object = EnumReference(
119+
(b) => b..string = EnumString.$default,
120+
);
121+
122+
const json = {
123+
'string': 'default',
124+
};
125+
126+
expect(object.toJson(), equals(json));
127+
expect(EnumReference.fromJson(json), equals(object));
128+
});
116129
}

0 commit comments

Comments
 (0)