Skip to content

Commit

Permalink
fix(dynamite): recursively use for generic in TypeResult.dartType
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 Apr 8, 2024
1 parent 563efef commit fb14a15
Show file tree
Hide file tree
Showing 6 changed files with 77 additions and 7 deletions.
13 changes: 10 additions & 3 deletions packages/dynamite/dynamite/lib/src/models/type_result/enum.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,16 @@ class TypeResultEnum extends TypeResult {
String? get _builderFactory => null;

@override
bool operator ==(Object other) =>
other is TypeResultEnum && other.className == className && other.generics == generics && other.subType == subType;
TypeResultEnum get dartType => TypeResultEnum(
className,
subType.dartType,
nullable: nullable,
isTypeDef: isTypeDef,
);

@override
int get hashCode => className.hashCode + generics.hashCode + subType.hashCode;
bool operator ==(Object other) => other is TypeResultEnum && other.className == className && other.subType == subType;

@override
int get hashCode => className.hashCode + subType.hashCode;
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ class TypeResultList extends TypeResult {
String? get _serializer => null;

@override
TypeResultList get dartType => TypeResultList('List', subType, nullable: nullable);
TypeResultList get dartType => TypeResultList('List', subType.dartType, nullable: nullable);

@override
bool operator ==(Object other) =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ class TypeResultMap extends TypeResult {
String? get _serializer => null;

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

@override
bool operator ==(Object other) =>
Expand Down
14 changes: 14 additions & 0 deletions packages/dynamite/dynamite/lib/src/models/type_result/object.dart
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,18 @@ class TypeResultObject extends TypeResult {

return super.encode(object, mimeType: mimeType);
}

@override
TypeResultObject get dartType {
if (generics.isEmpty) {
return this;
}

return TypeResultObject(
className,
generics: BuiltList(generics.map((type) => type.dartType)),
nullable: nullable,
isTypeDef: isTypeDef,
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -151,8 +151,7 @@ sealed class TypeResult {
String get nullableName => nullable ? '$name?' : name;

/// Native dart type equivalent
// ignore: avoid_returning_this
TypeResult get dartType => this;
TypeResult get dartType;

/// Returns `this` with a `true` value for [isTypeDef].
TypeResult get asTypeDef {
Expand Down
50 changes: 50 additions & 0 deletions packages/dynamite/dynamite/test/type_result_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -232,4 +232,54 @@ specifiedType: const FullType(String),
expect(type1.hashCode, type2.hashCode);
});
});

test('dartType', () {
final jsonObjectType = TypeResultBase('JsonObject');
expect(
jsonObjectType.dartType,
TypeResultBase('dynamic'),
);

TypeResult type = TypeResultBase('String');
expect(
type.dartType,
TypeResultBase('String'),
);

type = TypeResultEnum('EnumClass', jsonObjectType);
expect(
type.dartType,
TypeResultEnum('EnumClass', TypeResultBase('dynamic')),
);

type = TypeResultList('BuiltList', jsonObjectType);
expect(
type.dartType,
TypeResultList('List', TypeResultBase('dynamic')),
);

type = TypeResultMap('BuiltMap', jsonObjectType);
expect(
type.dartType,
TypeResultMap('Map', TypeResultBase('dynamic')),
);

type = TypeResultObject(
'BuiltClass',
generics: BuiltList([
jsonObjectType,
TypeResultMap('BuiltList', jsonObjectType),
]),
);
expect(
type.dartType,
TypeResultObject(
'BuiltClass',
generics: BuiltList([
TypeResultBase('dynamic'),
TypeResultMap('Map', TypeResultBase('dynamic')),
]),
),
);
});
}

0 comments on commit fb14a15

Please sign in to comment.