Browse Source

migrate enum to built_value

pull/237/head
Nikolas Rimikis 2 years ago
parent
commit
841dcb379d
No known key found for this signature in database
GPG Key ID: 85ED1DE9786A4FF2
  1. 93
      packages/dynamite/lib/src/openapi_builder.dart
  2. 4
      packages/dynamite/lib/src/type_result/enum.dart
  3. 119
      packages/nextcloud/lib/src/nextcloud.openapi.dart
  4. 2666
      packages/nextcloud/lib/src/nextcloud.openapi.g.dart

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

@ -63,8 +63,9 @@ class OpenAPIBuilder implements Builder {
"import 'dart:io';", "import 'dart:io';",
"import 'dart:typed_data';", "import 'dart:typed_data';",
'', '',
"import 'package:built_collection/built_collection.dart';",
"import 'package:built_value/built_value.dart';",
"import 'package:cookie_jar/cookie_jar.dart';", "import 'package:cookie_jar/cookie_jar.dart';",
"import 'package:json_annotation/json_annotation.dart';",
'', '',
"export 'package:cookie_jar/cookie_jar.dart';", "export 'package:cookie_jar/cookie_jar.dart';",
'', '',
@ -1187,6 +1188,24 @@ String _valueToEscapedValue(final TypeResult result, final dynamic value) {
return value.toString(); return value.toString();
} }
String _toCamelCase(final String name) {
var result = '';
var upperCase = false;
var firstCharacter = true;
for (final char in name.split('')) {
if (char == '_') {
upperCase = true;
} else if (char == r'$') {
result += r'$';
} else {
result += firstCharacter ? char.toLowerCase() : (upperCase ? char.toUpperCase() : char);
upperCase = false;
firstCharacter = false;
}
}
return result;
}
List<String> _descriptionToDocs(final String? description) => [ List<String> _descriptionToDocs(final String? description) => [
if (description != null && description.isNotEmpty) ...[ if (description != null && description.isNotEmpty) ...[
for (final line in description.split('\n')) ...[ for (final line in description.split('\n')) ...[
@ -1765,33 +1784,27 @@ TypeResult resolveType(
if (!state.resolvedTypes.contains('${state.prefix}$identifier')) { if (!state.resolvedTypes.contains('${state.prefix}$identifier')) {
state.resolvedTypes.add('${state.prefix}$identifier'); state.resolvedTypes.add('${state.prefix}$identifier');
state.output.add( state.output.add(
Enum( Class(
(final b) => b (final b) => b
..name = '${state.prefix}$identifier' ..name = '${state.prefix}$identifier'
..extend = refer('EnumClass')
..constructors.add( ..constructors.add(
Constructor( Constructor(
(final b) => b (final b) => b
..name = '_'
..constant = true ..constant = true
..requiredParameters.add( ..requiredParameters.add(
Parameter( Parameter(
(final b) => b (final b) => b
..name = 'value' ..name = 'name'
..toThis = true, ..toSuper = true,
), ),
), ),
), ),
) )
..fields.add( ..fields.addAll(
Field(
(final b) => b
..name = 'value'
..type = refer(result!.name)
..modifier = FieldModifier.final$,
),
)
..values.addAll(
schema.enum_!.map( schema.enum_!.map(
(final value) => EnumValue( (final value) => Field(
(final b) { (final b) {
final result = resolveType( final result = resolveType(
spec, spec,
@ -1803,9 +1816,13 @@ TypeResult resolveType(
); );
b b
..name = _toDartName(value.toString()) ..name = _toDartName(value.toString())
..arguments.add( ..static = true
refer(_valueToEscapedValue(result, value)), ..modifier = FieldModifier.constant
..type = refer('${state.prefix}$identifier')
..assignment = Code(
'_\$${_toCamelCase('${state.prefix}$identifier')}${_toDartName(value.toString(), uppercaseFirstCharacter: true)}',
); );
if (_toDartName(value.toString()) != value.toString()) { if (_toDartName(value.toString()) != value.toString()) {
if (result.name != 'String' && result.name != 'int') { if (result.name != 'String' && result.name != 'int') {
throw Exception( throw Exception(
@ -1815,42 +1832,50 @@ TypeResult resolveType(
); );
} }
b.annotations.add( b.annotations.add(
refer('JsonValue').call([ refer('BuiltValueEnumConst').call([], {
refer(_valueToEscapedValue(result, value.toString())), 'wireName': refer(_valueToEscapedValue(result, value.toString())),
]), }),
); );
} }
}, },
), ),
), ),
) )
..methods.add( ..methods.addAll([
Method( Method(
(final b) => b (final b) => b
..name = 'fromValue' ..name = 'values'
..returns = refer('BuiltSet<${state.prefix}$identifier>')
..lambda = true
..static = true ..static = true
..body = Code('_\$${_toCamelCase('${state.prefix}$identifier')}Values')
..type = MethodType.getter,
),
Method(
(final b) => b
..name = 'valueOf'
..returns = refer('${state.prefix}$identifier') ..returns = refer('${state.prefix}$identifier')
..lambda = true
..static = true
..requiredParameters.add( ..requiredParameters.add(
Parameter( Parameter(
(final b) => b (final b) => b
..name = 'value' ..name = 'name'
..type = refer(result!.name), ..type = refer(result!.name),
), ),
) )
..body = Code( ..body = Code('_\$valueOf${state.prefix}$identifier(name)'),
[
'switch (value) {',
for (final value in schema.enum_!) ...[
'case ${_valueToEscapedValue(result!, value)}:',
'return ${state.prefix}$identifier.${_toDartName(value.toString())};',
],
'default:',
'throw Exception(\'Can not parse ${state.prefix}$identifier from "\$value"\');',
'}',
].join(),
),
), ),
Method(
(final b) => b
..name = 'serializer'
..returns = refer('Serializer<${state.prefix}$identifier>')
..lambda = true
..static = true
..body = Code("_\$${_toCamelCase('${state.prefix}$identifier')}Serializer")
..type = MethodType.getter,
), ),
]),
), ),
); );
} }

4
packages/dynamite/lib/src/type_result/enum.dart

@ -9,7 +9,7 @@ class TypeResultEnum extends TypeResult {
final TypeResult subType; final TypeResult subType;
@override @override
String serialize(final String object) => '$object.value'; String serialize(final String object) => '$object.name';
@override @override
String encode( String encode(
@ -20,7 +20,7 @@ class TypeResultEnum extends TypeResult {
subType.encode(object); subType.encode(object);
@override @override
String deserialize(final String object) => '$name.fromValue($object as ${subType.name})'; String deserialize(final String object) => '$name.valueOf($object as ${subType.name})';
@override @override
String decode(final String object) => subType.decode(object); String decode(final String object) => subType.decode(object);

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

@ -2,8 +2,9 @@ import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'dart:typed_data'; import 'dart:typed_data';
import 'package:built_collection/built_collection.dart';
import 'package:built_value/built_value.dart';
import 'package:cookie_jar/cookie_jar.dart'; import 'package:cookie_jar/cookie_jar.dart';
import 'package:json_annotation/json_annotation.dart';
export 'package:cookie_jar/cookie_jar.dart'; export 'package:cookie_jar/cookie_jar.dart';
@ -1849,7 +1850,7 @@ class NextcloudUserStatusClient {
} else { } else {
throw Exception('Missing authentication for basic_auth'); throw Exception('Missing authentication for basic_auth');
} }
queryParameters['statusType'] = statusType.value; queryParameters['statusType'] = statusType.name;
final response = await rootClient.doRequest( final response = await rootClient.doRequest(
'put', 'put',
Uri(path: path, queryParameters: queryParameters.isNotEmpty ? queryParameters : null).toString(), Uri(path: path, queryParameters: queryParameters.isNotEmpty ? queryParameters : null).toString(),
@ -1992,7 +1993,7 @@ class NextcloudUserStatusClient {
} else { } else {
throw Exception('Missing authentication for basic_auth'); throw Exception('Missing authentication for basic_auth');
} }
queryParameters['status'] = status.value; queryParameters['status'] = status.name;
final response = await rootClient.doRequest( final response = await rootClient.doRequest(
'put', 'put',
Uri(path: path, queryParameters: queryParameters.isNotEmpty ? queryParameters : null).toString(), Uri(path: path, queryParameters: queryParameters.isNotEmpty ? queryParameters : null).toString(),
@ -4460,27 +4461,18 @@ class NextcloudNotesNote {
static String? toJsonString(NextcloudNotesNote? data) => data == null ? null : json.encode(data.toJson()); static String? toJsonString(NextcloudNotesNote? data) => data == null ? null : json.encode(data.toJson());
} }
enum NextcloudNotesSettings_NoteMode { class NextcloudNotesSettings_NoteMode extends EnumClass {
edit('edit'), const NextcloudNotesSettings_NoteMode._(super.name);
preview('preview'),
rich('rich');
const NextcloudNotesSettings_NoteMode(this.value); static const NextcloudNotesSettings_NoteMode edit = _$nextcloudNotesSettingsNoteModeEdit;
final String value; static const NextcloudNotesSettings_NoteMode preview = _$nextcloudNotesSettingsNoteModePreview;
static NextcloudNotesSettings_NoteMode fromValue(String value) { static const NextcloudNotesSettings_NoteMode rich = _$nextcloudNotesSettingsNoteModeRich;
switch (value) {
case 'edit': static BuiltSet<NextcloudNotesSettings_NoteMode> get values => _$nextcloudNotesSettingsNoteModeValues;
return NextcloudNotesSettings_NoteMode.edit; static NextcloudNotesSettings_NoteMode valueOf(String name) => _$valueOfNextcloudNotesSettings_NoteMode(name);
case 'preview': static Serializer<NextcloudNotesSettings_NoteMode> get serializer => _$nextcloudNotesSettingsNoteModeSerializer;
return NextcloudNotesSettings_NoteMode.preview;
case 'rich':
return NextcloudNotesSettings_NoteMode.rich;
default:
throw Exception('Can not parse NextcloudNotesSettings_NoteMode from "$value"');
}
}
} }
@JsonSerializable() @JsonSerializable()
@ -5445,45 +5437,29 @@ class NextcloudUnifiedPushProviderGatewayMatrixResponse200ApplicationJson {
data == null ? null : json.encode(data.toJson()); data == null ? null : json.encode(data.toJson());
} }
enum NextcloudUserStatusClearAt_Type { class NextcloudUserStatusClearAt_Type extends EnumClass {
period('period'), const NextcloudUserStatusClearAt_Type._(super.name);
@JsonValue('end-of')
endOf('end-of');
const NextcloudUserStatusClearAt_Type(this.value); static const NextcloudUserStatusClearAt_Type period = _$nextcloudUserStatusClearAtTypePeriod;
final String value; @BuiltValueEnumConst(wireName: 'end-of')
static const NextcloudUserStatusClearAt_Type endOf = _$nextcloudUserStatusClearAtTypeEndOf;
static NextcloudUserStatusClearAt_Type fromValue(String value) { static BuiltSet<NextcloudUserStatusClearAt_Type> get values => _$nextcloudUserStatusClearAtTypeValues;
switch (value) { static NextcloudUserStatusClearAt_Type valueOf(String name) => _$valueOfNextcloudUserStatusClearAt_Type(name);
case 'period': static Serializer<NextcloudUserStatusClearAt_Type> get serializer => _$nextcloudUserStatusClearAtTypeSerializer;
return NextcloudUserStatusClearAt_Type.period;
case 'end-of':
return NextcloudUserStatusClearAt_Type.endOf;
default:
throw Exception('Can not parse NextcloudUserStatusClearAt_Type from "$value"');
}
}
} }
enum NextcloudUserStatusClearAt_Time0 { class NextcloudUserStatusClearAt_Time0 extends EnumClass {
day('day'), const NextcloudUserStatusClearAt_Time0._(super.name);
week('week');
const NextcloudUserStatusClearAt_Time0(this.value); static const NextcloudUserStatusClearAt_Time0 day = _$nextcloudUserStatusClearAtTime0Day;
final String value; static const NextcloudUserStatusClearAt_Time0 week = _$nextcloudUserStatusClearAtTime0Week;
static NextcloudUserStatusClearAt_Time0 fromValue(String value) { static BuiltSet<NextcloudUserStatusClearAt_Time0> get values => _$nextcloudUserStatusClearAtTime0Values;
switch (value) { static NextcloudUserStatusClearAt_Time0 valueOf(String name) => _$valueOfNextcloudUserStatusClearAt_Time0(name);
case 'day': static Serializer<NextcloudUserStatusClearAt_Time0> get serializer => _$nextcloudUserStatusClearAtTime0Serializer;
return NextcloudUserStatusClearAt_Time0.day;
case 'week':
return NextcloudUserStatusClearAt_Time0.week;
default:
throw Exception('Can not parse NextcloudUserStatusClearAt_Time0 from "$value"');
}
}
} }
class NextcloudUserStatusClearAt_Time { class NextcloudUserStatusClearAt_Time {
@ -5497,7 +5473,7 @@ class NextcloudUserStatusClearAt_Time {
NextcloudUserStatusClearAt_Time0? userStatusClearAtTime0; NextcloudUserStatusClearAt_Time0? userStatusClearAtTime0;
int? $int; int? $int;
try { try {
userStatusClearAtTime0 = NextcloudUserStatusClearAt_Time0.fromValue(data as String); userStatusClearAtTime0 = NextcloudUserStatusClearAt_Time0.valueOf(data as String);
} catch (_) {} } catch (_) {}
try { try {
$int = (data as int); $int = (data as int);
@ -5600,33 +5576,22 @@ class NextcloudUserStatusPublicStatus_ClearAt {
// coverage:ignore-end // coverage:ignore-end
} }
enum NextcloudUserStatusType { class NextcloudUserStatusType extends EnumClass {
online('online'), const NextcloudUserStatusType._(super.name);
offline('offline'),
dnd('dnd'),
away('away'),
invisible('invisible');
const NextcloudUserStatusType(this.value); static const NextcloudUserStatusType online = _$nextcloudUserStatusTypeOnline;
final String value; static const NextcloudUserStatusType offline = _$nextcloudUserStatusTypeOffline;
static NextcloudUserStatusType fromValue(String value) { static const NextcloudUserStatusType dnd = _$nextcloudUserStatusTypeDnd;
switch (value) {
case 'online': static const NextcloudUserStatusType away = _$nextcloudUserStatusTypeAway;
return NextcloudUserStatusType.online;
case 'offline': static const NextcloudUserStatusType invisible = _$nextcloudUserStatusTypeInvisible;
return NextcloudUserStatusType.offline;
case 'dnd': static BuiltSet<NextcloudUserStatusType> get values => _$nextcloudUserStatusTypeValues;
return NextcloudUserStatusType.dnd; static NextcloudUserStatusType valueOf(String name) => _$valueOfNextcloudUserStatusType(name);
case 'away': static Serializer<NextcloudUserStatusType> get serializer => _$nextcloudUserStatusTypeSerializer;
return NextcloudUserStatusType.away;
case 'invisible':
return NextcloudUserStatusType.invisible;
default:
throw Exception('Can not parse NextcloudUserStatusType from "$value"');
}
}
} }
@JsonSerializable() @JsonSerializable()

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

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save