Browse Source

dynamite,nextcloud: Parse oneOf, anyOf and allOf more strictly

pull/91/head
jld3103 2 years ago
parent
commit
5bad634842
No known key found for this signature in database
GPG Key ID: 9062417B9E8EB7B3
  1. 34
      packages/dynamite/lib/src/openapi_builder.dart
  2. 4
      packages/nextcloud/lib/src/nextcloud.openapi.dart
  3. 25
      packages/nextcloud/lib/src/nextcloud.openapi.g.dart

34
packages/dynamite/lib/src/openapi_builder.dart

@ -225,6 +225,7 @@ class OpenAPIBuilder implements Builder {
final String identifier,
final Schema schema, {
final bool ignoreEnum = false,
final Map<String, String>? extraJsonSerializableValues,
}) {
TypeResolveResult? result;
if (schema.ref != null) {
@ -232,13 +233,26 @@ class OpenAPIBuilder implements Builder {
result = resolveType(
name,
spec.components!.schemas![name]!,
extraJsonSerializableValues: extraJsonSerializableValues,
);
} else if (schema.ofs != null) {
if (!resolvedTypes.contains(identifier)) {
resolvedTypes.add(identifier);
final results =
schema.ofs!.map((final s) => resolveType('$identifier${schema.ofs!.indexOf(s)}', s)).toList();
final results = schema.ofs!
.map(
(final s) => resolveType(
'$identifier${schema.ofs!.indexOf(s)}',
s,
extraJsonSerializableValues: {
'disallowUnrecognizedKeys': 'true',
if (extraJsonSerializableValues != null) ...{
...extraJsonSerializableValues,
},
},
),
)
.toList();
output.add(
Class(
@ -383,6 +397,7 @@ class OpenAPIBuilder implements Builder {
final subResult = resolveType(
identifier,
schema.items!,
extraJsonSerializableValues: extraJsonSerializableValues,
);
result = TypeResolveResult(
'List<${subResult.typeName}>',
@ -425,7 +440,18 @@ class OpenAPIBuilder implements Builder {
'/// ${schema.description!}',
],
])
..annotations.add(refer('JsonSerializable').call([]))
..annotations.add(
refer('JsonSerializable').call(
[],
{
if (extraJsonSerializableValues != null) ...{
for (final key in extraJsonSerializableValues.keys) ...{
key: refer(extraJsonSerializableValues[key]!),
},
},
},
),
)
..constructors.addAll(
[
Constructor(
@ -476,6 +502,7 @@ class OpenAPIBuilder implements Builder {
uppercaseFirstCharacter: true,
),
schema.properties![propertyName]!,
extraJsonSerializableValues: extraJsonSerializableValues,
);
final propertySchema = schema.properties![propertyName]!;
@ -554,6 +581,7 @@ class OpenAPIBuilder implements Builder {
'$identifier${_toDartName(value.toString(), uppercaseFirstCharacter: true)}',
schema,
ignoreEnum: true,
extraJsonSerializableValues: extraJsonSerializableValues,
);
b
..name = _toDartName(value.toString())

4
packages/nextcloud/lib/src/nextcloud.openapi.dart

@ -3223,7 +3223,7 @@ class UserStatusClearAtTime {
// coverage:ignore-end
}
@JsonSerializable()
@JsonSerializable(disallowUnrecognizedKeys: true)
class UserStatusClearAt {
UserStatusClearAt({
this.type,
@ -3422,7 +3422,7 @@ class UserStatusFindStatus {
// coverage:ignore-end
}
@JsonSerializable()
@JsonSerializable(disallowUnrecognizedKeys: true)
class UserStatus {
UserStatus({
this.userId,

25
packages/nextcloud/lib/src/nextcloud.openapi.g.dart

@ -1507,10 +1507,16 @@ Map<String, dynamic> _$ProvisioningApiUserToJson(ProvisioningApiUser instance) =
'ocs': instance.ocs?.toJson(),
};
UserStatusClearAt _$UserStatusClearAtFromJson(Map<String, dynamic> json) => UserStatusClearAt(
UserStatusClearAt _$UserStatusClearAtFromJson(Map<String, dynamic> json) {
$checkKeys(
json,
allowedKeys: const ['type', 'time'],
);
return UserStatusClearAt(
type: $enumDecodeNullable(_$UserStatusClearAtTypeEnumMap, json['type']),
time: json['time'] == null ? null : UserStatusClearAtTime.fromJson(json['time']),
);
}
Map<String, dynamic> _$UserStatusClearAtToJson(UserStatusClearAt instance) => <String, dynamic>{
'type': _$UserStatusClearAtTypeEnumMap[instance.type],
@ -1586,7 +1592,21 @@ Map<String, dynamic> _$UserStatusFindStatusToJson(UserStatusFindStatus instance)
'ocs': instance.ocs?.toJson(),
};
UserStatus _$UserStatusFromJson(Map<String, dynamic> json) => UserStatus(
UserStatus _$UserStatusFromJson(Map<String, dynamic> json) {
$checkKeys(
json,
allowedKeys: const [
'userId',
'message',
'messageId',
'messageIsPredefined',
'icon',
'clearAt',
'status',
'statusIsUserDefined'
],
);
return UserStatus(
userId: json['userId'] as String?,
message: json['message'] as String?,
messageId: json['messageId'] as String?,
@ -1596,6 +1616,7 @@ UserStatus _$UserStatusFromJson(Map<String, dynamic> json) => UserStatus(
status: $enumDecodeNullable(_$UserStatusTypeEnumMap, json['status']),
statusIsUserDefined: json['statusIsUserDefined'] as bool?,
);
}
Map<String, dynamic> _$UserStatusToJson(UserStatus instance) => <String, dynamic>{
'userId': instance.userId,

Loading…
Cancel
Save