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. 95
      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

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

@ -63,8 +63,9 @@ class OpenAPIBuilder implements Builder {
"import 'dart:io';",
"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:json_annotation/json_annotation.dart';",
'',
"export 'package:cookie_jar/cookie_jar.dart';",
'',
@ -1187,6 +1188,24 @@ String _valueToEscapedValue(final TypeResult result, final dynamic value) {
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) => [
if (description != null && description.isNotEmpty) ...[
for (final line in description.split('\n')) ...[
@ -1765,33 +1784,27 @@ TypeResult resolveType(
if (!state.resolvedTypes.contains('${state.prefix}$identifier')) {
state.resolvedTypes.add('${state.prefix}$identifier');
state.output.add(
Enum(
Class(
(final b) => b
..name = '${state.prefix}$identifier'
..extend = refer('EnumClass')
..constructors.add(
Constructor(
(final b) => b
..name = '_'
..constant = true
..requiredParameters.add(
Parameter(
(final b) => b
..name = 'value'
..toThis = true,
..name = 'name'
..toSuper = true,
),
),
),
)
..fields.add(
Field(
(final b) => b
..name = 'value'
..type = refer(result!.name)
..modifier = FieldModifier.final$,
),
)
..values.addAll(
..fields.addAll(
schema.enum_!.map(
(final value) => EnumValue(
(final value) => Field(
(final b) {
final result = resolveType(
spec,
@ -1803,9 +1816,13 @@ TypeResult resolveType(
);
b
..name = _toDartName(value.toString())
..arguments.add(
refer(_valueToEscapedValue(result, value)),
..static = true
..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 (result.name != 'String' && result.name != 'int') {
throw Exception(
@ -1815,42 +1832,50 @@ TypeResult resolveType(
);
}
b.annotations.add(
refer('JsonValue').call([
refer(_valueToEscapedValue(result, value.toString())),
]),
refer('BuiltValueEnumConst').call([], {
'wireName': refer(_valueToEscapedValue(result, value.toString())),
}),
);
}
},
),
),
)
..methods.add(
..methods.addAll([
Method(
(final b) => b
..name = 'fromValue'
..name = 'values'
..returns = refer('BuiltSet<${state.prefix}$identifier>')
..lambda = true
..static = true
..body = Code('_\$${_toCamelCase('${state.prefix}$identifier')}Values')
..type = MethodType.getter,
),
Method(
(final b) => b
..name = 'valueOf'
..returns = refer('${state.prefix}$identifier')
..lambda = true
..static = true
..requiredParameters.add(
Parameter(
(final b) => b
..name = 'value'
..name = 'name'
..type = refer(result!.name),
),
)
..body = Code(
[
'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(),
),
..body = Code('_\$valueOf${state.prefix}$identifier(name)'),
),
),
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;
@override
String serialize(final String object) => '$object.value';
String serialize(final String object) => '$object.name';
@override
String encode(
@ -20,7 +20,7 @@ class TypeResultEnum extends TypeResult {
subType.encode(object);
@override
String deserialize(final String object) => '$name.fromValue($object as ${subType.name})';
String deserialize(final String object) => '$name.valueOf($object as ${subType.name})';
@override
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: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:json_annotation/json_annotation.dart';
export 'package:cookie_jar/cookie_jar.dart';
@ -1849,7 +1850,7 @@ class NextcloudUserStatusClient {
} else {
throw Exception('Missing authentication for basic_auth');
}
queryParameters['statusType'] = statusType.value;
queryParameters['statusType'] = statusType.name;
final response = await rootClient.doRequest(
'put',
Uri(path: path, queryParameters: queryParameters.isNotEmpty ? queryParameters : null).toString(),
@ -1992,7 +1993,7 @@ class NextcloudUserStatusClient {
} else {
throw Exception('Missing authentication for basic_auth');
}
queryParameters['status'] = status.value;
queryParameters['status'] = status.name;
final response = await rootClient.doRequest(
'put',
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());
}
enum NextcloudNotesSettings_NoteMode {
edit('edit'),
preview('preview'),
rich('rich');
class NextcloudNotesSettings_NoteMode extends EnumClass {
const NextcloudNotesSettings_NoteMode._(super.name);
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) {
switch (value) {
case 'edit':
return NextcloudNotesSettings_NoteMode.edit;
case 'preview':
return NextcloudNotesSettings_NoteMode.preview;
case 'rich':
return NextcloudNotesSettings_NoteMode.rich;
default:
throw Exception('Can not parse NextcloudNotesSettings_NoteMode from "$value"');
}
}
static const NextcloudNotesSettings_NoteMode rich = _$nextcloudNotesSettingsNoteModeRich;
static BuiltSet<NextcloudNotesSettings_NoteMode> get values => _$nextcloudNotesSettingsNoteModeValues;
static NextcloudNotesSettings_NoteMode valueOf(String name) => _$valueOfNextcloudNotesSettings_NoteMode(name);
static Serializer<NextcloudNotesSettings_NoteMode> get serializer => _$nextcloudNotesSettingsNoteModeSerializer;
}
@JsonSerializable()
@ -5445,45 +5437,29 @@ class NextcloudUnifiedPushProviderGatewayMatrixResponse200ApplicationJson {
data == null ? null : json.encode(data.toJson());
}
enum NextcloudUserStatusClearAt_Type {
period('period'),
@JsonValue('end-of')
endOf('end-of');
class NextcloudUserStatusClearAt_Type extends EnumClass {
const NextcloudUserStatusClearAt_Type._(super.name);
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) {
switch (value) {
case 'period':
return NextcloudUserStatusClearAt_Type.period;
case 'end-of':
return NextcloudUserStatusClearAt_Type.endOf;
default:
throw Exception('Can not parse NextcloudUserStatusClearAt_Type from "$value"');
}
}
static BuiltSet<NextcloudUserStatusClearAt_Type> get values => _$nextcloudUserStatusClearAtTypeValues;
static NextcloudUserStatusClearAt_Type valueOf(String name) => _$valueOfNextcloudUserStatusClearAt_Type(name);
static Serializer<NextcloudUserStatusClearAt_Type> get serializer => _$nextcloudUserStatusClearAtTypeSerializer;
}
enum NextcloudUserStatusClearAt_Time0 {
day('day'),
week('week');
class NextcloudUserStatusClearAt_Time0 extends EnumClass {
const NextcloudUserStatusClearAt_Time0._(super.name);
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) {
switch (value) {
case 'day':
return NextcloudUserStatusClearAt_Time0.day;
case 'week':
return NextcloudUserStatusClearAt_Time0.week;
default:
throw Exception('Can not parse NextcloudUserStatusClearAt_Time0 from "$value"');
}
}
static BuiltSet<NextcloudUserStatusClearAt_Time0> get values => _$nextcloudUserStatusClearAtTime0Values;
static NextcloudUserStatusClearAt_Time0 valueOf(String name) => _$valueOfNextcloudUserStatusClearAt_Time0(name);
static Serializer<NextcloudUserStatusClearAt_Time0> get serializer => _$nextcloudUserStatusClearAtTime0Serializer;
}
class NextcloudUserStatusClearAt_Time {
@ -5497,7 +5473,7 @@ class NextcloudUserStatusClearAt_Time {
NextcloudUserStatusClearAt_Time0? userStatusClearAtTime0;
int? $int;
try {
userStatusClearAtTime0 = NextcloudUserStatusClearAt_Time0.fromValue(data as String);
userStatusClearAtTime0 = NextcloudUserStatusClearAt_Time0.valueOf(data as String);
} catch (_) {}
try {
$int = (data as int);
@ -5600,33 +5576,22 @@ class NextcloudUserStatusPublicStatus_ClearAt {
// coverage:ignore-end
}
enum NextcloudUserStatusType {
online('online'),
offline('offline'),
dnd('dnd'),
away('away'),
invisible('invisible');
class NextcloudUserStatusType extends EnumClass {
const NextcloudUserStatusType._(super.name);
const NextcloudUserStatusType(this.value);
static const NextcloudUserStatusType online = _$nextcloudUserStatusTypeOnline;
final String value;
static const NextcloudUserStatusType offline = _$nextcloudUserStatusTypeOffline;
static NextcloudUserStatusType fromValue(String value) {
switch (value) {
case 'online':
return NextcloudUserStatusType.online;
case 'offline':
return NextcloudUserStatusType.offline;
case 'dnd':
return NextcloudUserStatusType.dnd;
case 'away':
return NextcloudUserStatusType.away;
case 'invisible':
return NextcloudUserStatusType.invisible;
default:
throw Exception('Can not parse NextcloudUserStatusType from "$value"');
}
}
static const NextcloudUserStatusType dnd = _$nextcloudUserStatusTypeDnd;
static const NextcloudUserStatusType away = _$nextcloudUserStatusTypeAway;
static const NextcloudUserStatusType invisible = _$nextcloudUserStatusTypeInvisible;
static BuiltSet<NextcloudUserStatusType> get values => _$nextcloudUserStatusTypeValues;
static NextcloudUserStatusType valueOf(String name) => _$valueOfNextcloudUserStatusType(name);
static Serializer<NextcloudUserStatusType> get serializer => _$nextcloudUserStatusTypeSerializer;
}
@JsonSerializable()

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

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