Browse Source

fix(dynamite,nextcloud): fix generics in nested built_collection build factories

Signed-off-by: Nikolas Rimikis <leptopoda@users.noreply.github.com>
pull/1129/head
Nikolas Rimikis 1 year ago
parent
commit
49abaec6d1
No known key found for this signature in database
GPG Key ID: 85ED1DE9786A4FF2
  1. 3
      packages/dynamite/dynamite/lib/src/models/type_result/base.dart
  2. 3
      packages/dynamite/dynamite/lib/src/models/type_result/enum.dart
  3. 4
      packages/dynamite/dynamite/lib/src/models/type_result/list.dart
  4. 4
      packages/dynamite/dynamite/lib/src/models/type_result/map.dart
  5. 6
      packages/dynamite/dynamite/lib/src/models/type_result/object.dart
  6. 28
      packages/dynamite/dynamite/lib/src/models/type_result/type_result.dart
  7. 101
      packages/dynamite/dynamite/test/type_result_test.dart
  8. 2
      packages/nextcloud/lib/src/api/dashboard.openapi.dart
  9. 2
      packages/nextcloud/lib/src/api/files_sharing.openapi.dart
  10. 2
      packages/nextcloud/lib/src/api/provisioning_api.openapi.dart
  11. 8
      packages/nextcloud/lib/src/api/spreed.openapi.dart

3
packages/dynamite/dynamite/lib/src/models/type_result/base.dart

@ -14,9 +14,6 @@ class TypeResultBase extends TypeResult {
@override
String? get _serializer => null;
@override
String serialize(final String object) => object;
@override
String encode(
final String object, {

3
packages/dynamite/dynamite/lib/src/models/type_result/enum.dart

@ -14,9 +14,6 @@ class TypeResultEnum extends TypeResult {
@override
String? get _builderFactory => null;
@override
String? get _serializer => '..add($className.serializer)';
@override
String encode(
final String object, {

4
packages/dynamite/dynamite/lib/src/models/type_result/list.dart

@ -7,13 +7,11 @@ class TypeResultList extends TypeResult {
final TypeResult subType, {
super.nullable,
super.isTypeDef,
super.builderName = 'ListBuilder',
}) : super(generics: [subType]);
TypeResult get subType => generics.first;
@override
String? get _builderFactory => '..addBuilderFactory($fullType, ListBuilder<${subType.className}>.new)';
@override
String? get _serializer => null;

4
packages/dynamite/dynamite/lib/src/models/type_result/map.dart

@ -7,13 +7,11 @@ class TypeResultMap extends TypeResult {
final TypeResult subType, {
super.nullable,
super.isTypeDef,
super.builderName = 'MapBuilder',
}) : super(generics: [TypeResultBase('String'), subType]);
TypeResult get subType => generics[1];
@override
String? get _builderFactory => '..addBuilderFactory($fullType, MapBuilder<String, ${subType.className}>.new)';
@override
String? get _serializer => null;

6
packages/dynamite/dynamite/lib/src/models/type_result/object.dart

@ -14,12 +14,6 @@ class TypeResultObject extends TypeResult {
'Use TypeResultBase instead',
);
@override
String? get _builderFactory => '..addBuilderFactory($fullType, $name.new)';
@override
String? get _serializer => '..add($className.serializer)';
@override
String encode(
final String object, {

28
packages/dynamite/dynamite/lib/src/models/type_result/type_result.dart

@ -1,4 +1,3 @@
import 'package:intersperse/intersperse.dart';
import 'package:meta/meta.dart';
part 'base.dart';
@ -14,20 +13,24 @@ sealed class TypeResult {
this.generics = const [],
this.nullable = false,
this.isTypeDef = false,
}) : assert(!className.contains('<'), 'Specify generics in the generics parameter.'),
final String? builderName,
}) : builderName = builderName ?? className,
assert(!className.contains('<'), 'Specify generics in the generics parameter.'),
assert(!className.contains('?'), 'Nullability should not be specified in the type.');
final String className;
final String builderName;
final List<TypeResult> generics;
final bool nullable;
/// Whether this type should be represented as a typedef.
final bool isTypeDef;
@nonVirtual
String get name {
if (generics.isNotEmpty) {
final buffer = StringBuffer('$className<')
..writeAll(generics.map((final c) => c.name).intersperse(', '))
..writeAll(generics.map((final c) => c.name), ', ')
..write('>');
return buffer.toString();
}
@ -35,10 +38,23 @@ sealed class TypeResult {
return className;
}
@nonVirtual
String get builder {
if (generics.isNotEmpty) {
final buffer = StringBuffer('$builderName<')
..writeAll(generics.map((final c) => c.name), ', ')
..write('>');
return buffer.toString();
}
return builderName;
}
@nonVirtual
String get fullType {
if (generics.isNotEmpty) {
final buffer = StringBuffer('FullType($className, [')
..writeAll(generics.map((final c) => c.fullType).intersperse(', '))
..writeAll(generics.map((final c) => c.fullType), ', ')
..write('])');
return buffer.toString();
@ -64,9 +80,9 @@ sealed class TypeResult {
}
}
String? get _serializer;
String? get _serializer => '..add($className.serializer)';
String? get _builderFactory;
String? get _builderFactory => '..addBuilderFactory($fullType, $builder.new)';
/// Serializes the variable named [object].
///

101
packages/dynamite/dynamite/test/type_result_test.dart

@ -9,6 +9,42 @@ void main() {
expect(type.name, 'BuiltList<String>');
expect(type.fullType, 'FullType(BuiltList, [FullType(String)])');
expect(
type.serializers.toList(),
const ['..addBuilderFactory(FullType(BuiltList, [FullType(String)]), ListBuilder<String>.new)'],
);
expect(
type.serialize('value'),
'_jsonSerializers.serialize(value, specifiedType: const FullType(BuiltList, [FullType(String)]))',
);
expect(
type.deserialize('value'),
'(_jsonSerializers.deserialize(value, specifiedType: const FullType(BuiltList, [FullType(String)]))! as BuiltList<String>)',
);
});
test('Nested list', () {
final subType = TypeResultBase('String');
var type = TypeResultList('BuiltList', subType);
type = TypeResultList('BuiltList', type);
expect(type.name, 'BuiltList<BuiltList<String>>');
expect(type.fullType, 'FullType(BuiltList, [FullType(BuiltList, [FullType(String)])])');
expect(
type.serializers.toList(),
const [
'..addBuilderFactory(FullType(BuiltList, [FullType(String)]), ListBuilder<String>.new)',
'..addBuilderFactory(FullType(BuiltList, [FullType(BuiltList, [FullType(String)])]), ListBuilder<BuiltList<String>>.new)',
],
);
expect(
type.serialize('value'),
'_jsonSerializers.serialize(value, specifiedType: const FullType(BuiltList, [FullType(BuiltList, [FullType(String)])]))',
);
expect(
type.deserialize('value'),
'(_jsonSerializers.deserialize(value, specifiedType: const FullType(BuiltList, [FullType(BuiltList, [FullType(String)])]))! as BuiltList<BuiltList<String>>)',
);
});
});
@ -19,6 +55,47 @@ void main() {
expect(type.name, 'BuiltMap<String, int>');
expect(type.fullType, 'FullType(BuiltMap, [FullType(String), FullType(int)])');
expect(
type.serializers.toList(),
const [
'..addBuilderFactory(FullType(BuiltMap, [FullType(String), FullType(int)]), MapBuilder<String, int>.new)',
],
);
expect(
type.serialize('value'),
'_jsonSerializers.serialize(value, specifiedType: const FullType(BuiltMap, [FullType(String), FullType(int)]))',
);
expect(
type.deserialize('value'),
'(_jsonSerializers.deserialize(value, specifiedType: const FullType(BuiltMap, [FullType(String), FullType(int)]))! as BuiltMap<String, int>)',
);
});
test('Nested map', () {
final subType = TypeResultBase('int');
var type = TypeResultMap('BuiltMap', subType);
type = TypeResultMap('BuiltMap', type);
expect(type.name, 'BuiltMap<String, BuiltMap<String, int>>');
expect(
type.fullType,
'FullType(BuiltMap, [FullType(String), FullType(BuiltMap, [FullType(String), FullType(int)])])',
);
expect(
type.serializers.toList(),
const [
'..addBuilderFactory(FullType(BuiltMap, [FullType(String), FullType(int)]), MapBuilder<String, int>.new)',
'..addBuilderFactory(FullType(BuiltMap, [FullType(String), FullType(BuiltMap, [FullType(String), FullType(int)])]), MapBuilder<String, BuiltMap<String, int>>.new)',
],
);
expect(
type.serialize('value'),
'_jsonSerializers.serialize(value, specifiedType: const FullType(BuiltMap, [FullType(String), FullType(BuiltMap, [FullType(String), FullType(int)])]))',
);
expect(
type.deserialize('value'),
'(_jsonSerializers.deserialize(value, specifiedType: const FullType(BuiltMap, [FullType(String), FullType(BuiltMap, [FullType(String), FullType(int)])]))! as BuiltMap<String, BuiltMap<String, int>>)',
);
});
});
@ -29,6 +106,21 @@ void main() {
expect(type.name, 'CustomType<String>');
expect(type.fullType, 'FullType(CustomType, [FullType(String)])');
expect(
type.serializers.toList(),
const [
'..addBuilderFactory(FullType(CustomType, [FullType(String)]), CustomType<String>.new)',
'..add(CustomType.serializer)',
],
);
expect(
type.serialize('value'),
'_jsonSerializers.serialize(value, specifiedType: const FullType(CustomType, [FullType(String)]))',
);
expect(
type.deserialize('value'),
'(_jsonSerializers.deserialize(value, specifiedType: const FullType(CustomType, [FullType(String)]))! as CustomType<String>)',
);
});
});
@ -38,6 +130,15 @@ void main() {
expect(type.name, 'String');
expect(type.fullType, 'FullType(String)');
expect(type.serializers.toList(), const <String>[]);
expect(
type.serialize('value'),
'_jsonSerializers.serialize(value, specifiedType: const FullType(String))',
);
expect(
type.deserialize('value'),
'(_jsonSerializers.deserialize(value, specifiedType: const FullType(String))! as String)',
);
});
});
}

2
packages/nextcloud/lib/src/api/dashboard.openapi.dart

@ -738,7 +738,7 @@ final Serializers _serializers = (Serializers().toBuilder()
FullType(String),
FullType(BuiltList, [FullType(WidgetItem)]),
]),
MapBuilder<String, BuiltList>.new,
MapBuilder<String, BuiltList<WidgetItem>>.new,
)
..addBuilderFactory(
const FullType(DashboardApiGetWidgetItemsV2ResponseApplicationJson),

2
packages/nextcloud/lib/src/api/files_sharing.openapi.dart

@ -5186,7 +5186,7 @@ final Serializers _serializers = (Serializers().toBuilder()
const FullType(BuiltList, [
FullType(BuiltMap, [FullType(String), FullType(JsonObject)]),
]),
ListBuilder<BuiltMap>.new,
ListBuilder<BuiltMap<String, JsonObject>>.new,
)
..addBuilderFactory(
const FullType(ShareapiGetSharesResponseApplicationJson),

2
packages/nextcloud/lib/src/api/provisioning_api.openapi.dart

@ -9148,7 +9148,7 @@ final Serializers _serializers = (Serializers().toBuilder()
FullType(String),
FullType(BuiltList, [FullType(String)]),
]),
MapBuilder<String, BuiltList>.new,
MapBuilder<String, BuiltList<String>>.new,
)
..addBuilderFactory(
const FullType(ContentString, [

8
packages/nextcloud/lib/src/api/spreed.openapi.dart

@ -23659,7 +23659,7 @@ final Serializers _serializers = (Serializers().toBuilder()
FullType(String),
FullType(BuiltMap, [FullType(String), FullType(JsonObject)]),
]),
MapBuilder<String, BuiltMap>.new,
MapBuilder<String, BuiltMap<String, JsonObject>>.new,
)
..addBuilderFactory(const FullType(BuiltMap, [FullType(String), FullType(int)]), MapBuilder<String, int>.new)
..addBuilderFactory(const FullType(BuiltList, [FullType(JsonObject)]), ListBuilder<JsonObject>.new)
@ -24136,7 +24136,7 @@ final Serializers _serializers = (Serializers().toBuilder()
FullType(String),
FullType(BuiltList, [FullType(ChatMessage)]),
]),
MapBuilder<String, BuiltList>.new,
MapBuilder<String, BuiltList<ChatMessage>>.new,
)
..add(FederationAcceptShareApiVersion.serializer)
..addBuilderFactory(
@ -24258,7 +24258,7 @@ final Serializers _serializers = (Serializers().toBuilder()
const FullType(BuiltList, [
FullType(BuiltMap, [FullType(String), FullType(JsonObject)]),
]),
ListBuilder<BuiltMap>.new,
ListBuilder<BuiltMap<String, JsonObject>>.new,
)
..addBuilderFactory(const FullType(MatterbridgeProcessState), MatterbridgeProcessState.new)
..add(MatterbridgeProcessState.serializer)
@ -24411,7 +24411,7 @@ final Serializers _serializers = (Serializers().toBuilder()
FullType(String),
FullType(BuiltList, [FullType(Reaction)]),
]),
MapBuilder<String, BuiltList>.new,
MapBuilder<String, BuiltList<Reaction>>.new,
)
..add(ReactionReactApiVersion.serializer)
..addBuilderFactory(

Loading…
Cancel
Save