Skip to content

Commit

Permalink
feat(dynamite): add doc comments generated someOfs
Browse files Browse the repository at this point in the history
Signed-off-by: Nikolas Rimikis <leptopoda@users.noreply.github.com>
  • Loading branch information
Leptopoda committed Dec 30, 2023
1 parent 485386a commit 2a67f06
Show file tree
Hide file tree
Showing 13 changed files with 185 additions and 158 deletions.
6 changes: 0 additions & 6 deletions packages/dynamite/dynamite/lib/src/builder/generate_ofs.dart
Expand Up @@ -16,12 +16,6 @@ Iterable<Spec> buildOfsExtensions(
continue;
}

yield TypeDef((final b) {
b
..name = result.className
..definition = refer(result.dartType.name);
});

final serializerMethod = Method(
(final b) => b
..static = true
Expand Down
51 changes: 51 additions & 0 deletions packages/dynamite/dynamite/lib/src/builder/resolve_ofs.dart
@@ -1,12 +1,63 @@
import 'package:built_collection/built_collection.dart';
import 'package:code_builder/code_builder.dart';
import 'package:collection/collection.dart';
import 'package:dynamite/src/builder/resolve_interface.dart';
import 'package:dynamite/src/builder/resolve_type.dart';
import 'package:dynamite/src/builder/state.dart';
import 'package:dynamite/src/helpers/built_value.dart';
import 'package:dynamite/src/models/openapi.dart' as openapi;
import 'package:dynamite/src/models/type_result.dart';

TypeResult resolveSomeOf(
final openapi.OpenAPI spec,
final State state,
final String identifier,
final openapi.Schema schema, {
final bool nullable = false,
}) {
final subResults = schema.ofs!
.mapIndexed(
(final index, final s) => resolveType(
spec,
state,
'$identifier$index',
s,
nullable: true,
),
)
.toBuiltSet();

TypeResultSomeOf result;
if (schema.oneOf != null) {
result = TypeResultOneOf(
identifier,
nullable: nullable,
subTypes: subResults,
);
} else if (schema.anyOf != null) {
result = TypeResultAnyOf(
identifier,
nullable: nullable,
subTypes: subResults,
);
} else {
throw StateError('allOf should be handled with inheritance');
}

if (state.resolvedTypes.add(result) && !result.isSingleValue) {
final $typedef = TypeDef((final b) {
b
..docs.addAll(schema.formattedDescription)
..name = result.className
..definition = refer(result.dartType.name);
});

state.output.add($typedef);
}

return result;
}

TypeResult resolveAllOf(
final openapi.OpenAPI spec,
final State state,
Expand Down
35 changes: 7 additions & 28 deletions packages/dynamite/dynamite/lib/src/builder/resolve_type.dart
@@ -1,5 +1,4 @@
import 'package:built_collection/built_collection.dart';
import 'package:collection/collection.dart';
import 'package:dynamite/src/builder/resolve_enum.dart';
import 'package:dynamite/src/builder/resolve_object.dart';
import 'package:dynamite/src/builder/resolve_ofs.dart';
Expand Down Expand Up @@ -41,33 +40,13 @@ TypeResult resolveType(
nullable: nullable,
);
} else if (schema.ofs != null) {
final subResults = schema.ofs!
.mapIndexed(
(final index, final s) => resolveType(
spec,
state,
'$identifier$index',
s,
nullable: true,
),
)
.toBuiltSet();

if (schema.oneOf != null) {
result = TypeResultOneOf(
identifier,
nullable: nullable,
subTypes: subResults,
);
} else if (schema.anyOf != null) {
result = TypeResultAnyOf(
identifier,
nullable: nullable,
subTypes: subResults,
);
} else {
throw StateError('allOf should be handled with inheritance');
}
result = resolveSomeOf(
spec,
state,
identifier,
schema,
nullable: nullable,
);
} else if (schema.isContentString) {
final subResult = resolveType(
spec,
Expand Down
Expand Up @@ -55,6 +55,9 @@ abstract class ObjectAnyOf1 implements $ObjectAnyOf1Interface, Built<ObjectAnyOf
static Serializer<ObjectAnyOf1> get serializer => _$objectAnyOf1Serializer;
}

/// Any of with objects only.
typedef ObjectAnyOf = ({ObjectAnyOf0? objectAnyOf0, ObjectAnyOf1? objectAnyOf1});

@BuiltValue(instantiable: false)
abstract interface class $MixedAnyOf1Interface {
@BuiltValueField(wireName: 'attribute-anyOf')
Expand All @@ -73,6 +76,9 @@ abstract class MixedAnyOf1 implements $MixedAnyOf1Interface, Built<MixedAnyOf1,
static Serializer<MixedAnyOf1> get serializer => _$mixedAnyOf1Serializer;
}

/// Any of with object and primitive value.
typedef MixedAnyOf = ({MixedAnyOf1? mixedAnyOf1, String? string});

@BuiltValue(instantiable: false)
abstract interface class $OneObjectAnyOf0Interface {
@BuiltValueField(wireName: 'attribute-anyOf')
Expand All @@ -91,22 +97,19 @@ abstract class OneObjectAnyOf0 implements $OneObjectAnyOf0Interface, Built<OneOb
static Serializer<OneObjectAnyOf0> get serializer => _$oneObjectAnyOf0Serializer;
}

typedef ObjectAnyOf = ({ObjectAnyOf0? objectAnyOf0, ObjectAnyOf1? objectAnyOf1});
/// Any of with an integer, double and other value.
typedef AnyOfIntDoubleOther = ({num? $num, String? string});

extension $ObjectAnyOfExtension on ObjectAnyOf {
static Serializer<ObjectAnyOf> get serializer => $0c9017d9a03ba2eb2f15acadeab85bbeExtension._serializer;
static ObjectAnyOf fromJson(Object? json) => $0c9017d9a03ba2eb2f15acadeab85bbeExtension._fromJson(json);
}

typedef MixedAnyOf = ({MixedAnyOf1? mixedAnyOf1, String? string});

extension $MixedAnyOfExtension on MixedAnyOf {
static Serializer<MixedAnyOf> get serializer => $fba45e085ee99d64c5141852d4323e3dExtension._serializer;
static MixedAnyOf fromJson(Object? json) => $fba45e085ee99d64c5141852d4323e3dExtension._fromJson(json);
}

typedef AnyOfIntDoubleOther = ({num? $num, String? string});

extension $AnyOfIntDoubleOtherExtension on AnyOfIntDoubleOther {
static Serializer<AnyOfIntDoubleOther> get serializer => $b6d67dc2a96424d2f407f8e51557f3deExtension._serializer;
static AnyOfIntDoubleOther fromJson(Object? json) => $b6d67dc2a96424d2f407f8e51557f3deExtension._fromJson(json);
Expand Down
Expand Up @@ -56,6 +56,8 @@ abstract class BaseOneOf1 implements $BaseOneOf1Interface, Built<BaseOneOf1, Bas
static Serializer<BaseOneOf1> get serializer => _$baseOneOf1Serializer;
}

typedef BaseOneOf = ({BaseOneOf1? baseOneOf1, double? $double});

@BuiltValue(instantiable: false)
abstract interface class $BaseAnyOf1Interface {
@BuiltValueField(wireName: 'attribute-anyOf')
Expand All @@ -74,6 +76,8 @@ abstract class BaseAnyOf1 implements $BaseAnyOf1Interface, Built<BaseAnyOf1, Bas
static Serializer<BaseAnyOf1> get serializer => _$baseAnyOf1Serializer;
}

typedef BaseAnyOf = ({BaseAnyOf1? baseAnyOf1, int? $int});

@BuiltValue(instantiable: false)
abstract interface class $BaseNestedAllOf_3Interface {
@BuiltValueField(wireName: 'attribute-nested-allOf')
Expand Down Expand Up @@ -119,6 +123,14 @@ abstract class BaseNestedOneOf3
static Serializer<BaseNestedOneOf3> get serializer => _$baseNestedOneOf3Serializer;
}

typedef BaseNestedOneOf = ({
BaseAllOf? baseAllOf,
BaseAnyOf? baseAnyOf,
BaseNestedOneOf3? baseNestedOneOf3,
BaseOneOf1? baseOneOf1,
double? $double
});

@BuiltValue(instantiable: false)
abstract interface class $BaseNestedAnyOf3Interface {
@BuiltValueField(wireName: 'attribute-nested-anyOf')
Expand All @@ -138,48 +150,35 @@ abstract class BaseNestedAnyOf3
static Serializer<BaseNestedAnyOf3> get serializer => _$baseNestedAnyOf3Serializer;
}

typedef BaseOneOf = ({BaseOneOf1? baseOneOf1, double? $double});
typedef BaseNestedAnyOf = ({
BaseAllOf? baseAllOf,
BaseAnyOf1? baseAnyOf1,
BaseNestedAnyOf3? baseNestedAnyOf3,
BaseOneOf? baseOneOf,
int? $int
});
typedef NestedOptimizedOneOf = ({BaseOneOf1? baseOneOf1, num? $num});

extension $BaseOneOfExtension on BaseOneOf {
static Serializer<BaseOneOf> get serializer => $fc0451dbdd462718bd075afd2e3ce0ecExtension._serializer;
static BaseOneOf fromJson(Object? json) => $fc0451dbdd462718bd075afd2e3ce0ecExtension._fromJson(json);
}

typedef BaseAnyOf = ({BaseAnyOf1? baseAnyOf1, int? $int});

extension $BaseAnyOfExtension on BaseAnyOf {
static Serializer<BaseAnyOf> get serializer => $ce3c7b262d1c503446a436c461be5be9Extension._serializer;
static BaseAnyOf fromJson(Object? json) => $ce3c7b262d1c503446a436c461be5be9Extension._fromJson(json);
}

typedef BaseNestedOneOf = ({
BaseAllOf? baseAllOf,
BaseAnyOf? baseAnyOf,
BaseNestedOneOf3? baseNestedOneOf3,
BaseOneOf1? baseOneOf1,
double? $double
});

extension $BaseNestedOneOfExtension on BaseNestedOneOf {
static Serializer<BaseNestedOneOf> get serializer => $8da5087c0b3f2cce06998d453af8ad19Extension._serializer;
static BaseNestedOneOf fromJson(Object? json) => $8da5087c0b3f2cce06998d453af8ad19Extension._fromJson(json);
}

typedef BaseNestedAnyOf = ({
BaseAllOf? baseAllOf,
BaseAnyOf1? baseAnyOf1,
BaseNestedAnyOf3? baseNestedAnyOf3,
BaseOneOf? baseOneOf,
int? $int
});

extension $BaseNestedAnyOfExtension on BaseNestedAnyOf {
static Serializer<BaseNestedAnyOf> get serializer => $523892e2348458a2bdb28f9f942dca37Extension._serializer;
static BaseNestedAnyOf fromJson(Object? json) => $523892e2348458a2bdb28f9f942dca37Extension._fromJson(json);
}

typedef NestedOptimizedOneOf = ({BaseOneOf1? baseOneOf1, num? $num});

extension $NestedOptimizedOneOfExtension on NestedOptimizedOneOf {
static Serializer<NestedOptimizedOneOf> get serializer => $abe6d27882a5771a98ede04cd64de567Extension._serializer;
static NestedOptimizedOneOf fromJson(Object? json) => $abe6d27882a5771a98ede04cd64de567Extension._fromJson(json);
Expand Down
Expand Up @@ -55,6 +55,9 @@ abstract class ObjectOneOf1 implements $ObjectOneOf1Interface, Built<ObjectOneOf
static Serializer<ObjectOneOf1> get serializer => _$objectOneOf1Serializer;
}

/// One of with objects only.
typedef ObjectOneOf = ({ObjectOneOf0? objectOneOf0, ObjectOneOf1? objectOneOf1});

@BuiltValue(instantiable: false)
abstract interface class $MixedOneOf1Interface {
@BuiltValueField(wireName: 'attribute-oneOf')
Expand All @@ -73,6 +76,9 @@ abstract class MixedOneOf1 implements $MixedOneOf1Interface, Built<MixedOneOf1,
static Serializer<MixedOneOf1> get serializer => _$mixedOneOf1Serializer;
}

/// One of with object and primitive value.
typedef MixedOneOf = ({MixedOneOf1? mixedOneOf1, String? string});

@BuiltValue(instantiable: false)
abstract interface class $OneObjectOneOf0Interface {
@BuiltValueField(wireName: 'attribute-oneOf')
Expand All @@ -91,22 +97,19 @@ abstract class OneObjectOneOf0 implements $OneObjectOneOf0Interface, Built<OneOb
static Serializer<OneObjectOneOf0> get serializer => _$oneObjectOneOf0Serializer;
}

typedef ObjectOneOf = ({ObjectOneOf0? objectOneOf0, ObjectOneOf1? objectOneOf1});
/// One of with an integer, double and other value.
typedef OneOfIntDoubleOther = ({num? $num, String? string});

extension $ObjectOneOfExtension on ObjectOneOf {
static Serializer<ObjectOneOf> get serializer => $6c828020e1dac1d58ded0a29ef8b0c41Extension._serializer;
static ObjectOneOf fromJson(Object? json) => $6c828020e1dac1d58ded0a29ef8b0c41Extension._fromJson(json);
}

typedef MixedOneOf = ({MixedOneOf1? mixedOneOf1, String? string});

extension $MixedOneOfExtension on MixedOneOf {
static Serializer<MixedOneOf> get serializer => $d1b40dfcebdca2dfa1f3e52ac98462a5Extension._serializer;
static MixedOneOf fromJson(Object? json) => $d1b40dfcebdca2dfa1f3e52ac98462a5Extension._fromJson(json);
}

typedef OneOfIntDoubleOther = ({num? $num, String? string});

extension $OneOfIntDoubleOtherExtension on OneOfIntDoubleOther {
static Serializer<OneOfIntDoubleOther> get serializer => $b6d67dc2a96424d2f407f8e51557f3deExtension._serializer;
static OneOfIntDoubleOther fromJson(Object? json) => $b6d67dc2a96424d2f407f8e51557f3deExtension._fromJson(json);
Expand Down
Expand Up @@ -477,6 +477,9 @@ class $Client extends DynamiteClient {
}
}

typedef GetOneOf = ({bool? $bool, String? string});
typedef GetAnyOf = ({bool? $bool, String? string});

class GetEnumPattern extends EnumClass {
const GetEnumPattern._(super.name);

Expand Down Expand Up @@ -531,6 +534,9 @@ class _$GetEnumPatternSerializer implements PrimitiveSerializer<GetEnumPattern>
_fromWire[serialized]!;
}

typedef GetHeadersOneOf = ({bool? $bool, String? string});
typedef GetHeadersAnyOf = ({bool? $bool, String? string});

class GetHeadersEnumPattern extends EnumClass {
const GetHeadersEnumPattern._(super.name);

Expand Down Expand Up @@ -585,29 +591,21 @@ class _$GetHeadersEnumPatternSerializer implements PrimitiveSerializer<GetHeader
_fromWire[serialized]!;
}

typedef GetOneOf = ({bool? $bool, String? string});

extension $GetOneOfExtension on GetOneOf {
static Serializer<GetOneOf> get serializer => $93403da1a64cb6a7b1597c7a05e9b2beExtension._serializer;
static GetOneOf fromJson(Object? json) => $93403da1a64cb6a7b1597c7a05e9b2beExtension._fromJson(json);
}

typedef GetAnyOf = ({bool? $bool, String? string});

extension $GetAnyOfExtension on GetAnyOf {
static Serializer<GetAnyOf> get serializer => $93403da1a64cb6a7b1597c7a05e9b2beExtension._serializer;
static GetAnyOf fromJson(Object? json) => $93403da1a64cb6a7b1597c7a05e9b2beExtension._fromJson(json);
}

typedef GetHeadersOneOf = ({bool? $bool, String? string});

extension $GetHeadersOneOfExtension on GetHeadersOneOf {
static Serializer<GetHeadersOneOf> get serializer => $93403da1a64cb6a7b1597c7a05e9b2beExtension._serializer;
static GetHeadersOneOf fromJson(Object? json) => $93403da1a64cb6a7b1597c7a05e9b2beExtension._fromJson(json);
}

typedef GetHeadersAnyOf = ({bool? $bool, String? string});

extension $GetHeadersAnyOfExtension on GetHeadersAnyOf {
static Serializer<GetHeadersAnyOf> get serializer => $93403da1a64cb6a7b1597c7a05e9b2beExtension._serializer;
static GetHeadersAnyOf fromJson(Object? json) => $93403da1a64cb6a7b1597c7a05e9b2beExtension._fromJson(json);
Expand Down
Expand Up @@ -14,6 +14,13 @@ import 'package:meta/meta.dart';

part 'some_of.openapi.g.dart';

/// One of with an integer, double and other value.
typedef OneOfIntDoubleOther = ({num? $num, String? string});

/// One of with an integer, double and other value.
typedef AnyOfIntDoubleOther = ({num? $num, String? string});
typedef OneValueSomeOfInObject_IntDoubleString = ({num? $num, String? string});

@BuiltValue(instantiable: false)
abstract interface class $OneValueSomeOfInObjectInterface {
@BuiltValueField(wireName: 'OneValue')
Expand Down Expand Up @@ -43,22 +50,16 @@ abstract class OneValueSomeOfInObject
}
}

typedef OneOfIntDoubleOther = ({num? $num, String? string});

extension $OneOfIntDoubleOtherExtension on OneOfIntDoubleOther {
static Serializer<OneOfIntDoubleOther> get serializer => $b6d67dc2a96424d2f407f8e51557f3deExtension._serializer;
static OneOfIntDoubleOther fromJson(Object? json) => $b6d67dc2a96424d2f407f8e51557f3deExtension._fromJson(json);
}

typedef AnyOfIntDoubleOther = ({num? $num, String? string});

extension $AnyOfIntDoubleOtherExtension on AnyOfIntDoubleOther {
static Serializer<AnyOfIntDoubleOther> get serializer => $b6d67dc2a96424d2f407f8e51557f3deExtension._serializer;
static AnyOfIntDoubleOther fromJson(Object? json) => $b6d67dc2a96424d2f407f8e51557f3deExtension._fromJson(json);
}

typedef OneValueSomeOfInObject_IntDoubleString = ({num? $num, String? string});

extension $OneValueSomeOfInObject_IntDoubleStringExtension on OneValueSomeOfInObject_IntDoubleString {
static Serializer<OneValueSomeOfInObject_IntDoubleString> get serializer =>
$b6d67dc2a96424d2f407f8e51557f3deExtension._serializer;
Expand Down

0 comments on commit 2a67f06

Please sign in to comment.