chore(app): сгенерированный Dart-клиент из OpenAPI
openapi-generator-cli -g dart-dio. Генерируется, но коммитится: CI ловит дрейф openapi/openapi.json, а приложение собирается без запуска генератора. Пересобирается через just gen-client после любого изменения роутов.
This commit is contained in:
@@ -0,0 +1,147 @@
|
||||
import 'package:fintracker_api/src/model/account_balance.dart';
|
||||
import 'package:fintracker_api/src/model/account_out.dart';
|
||||
import 'package:fintracker_api/src/model/account_patch.dart';
|
||||
import 'package:fintracker_api/src/model/cash_flow_month.dart';
|
||||
import 'package:fintracker_api/src/model/category_out.dart';
|
||||
import 'package:fintracker_api/src/model/data_quality_row.dart';
|
||||
import 'package:fintracker_api/src/model/health.dart';
|
||||
import 'package:fintracker_api/src/model/login_request.dart';
|
||||
import 'package:fintracker_api/src/model/net_worth_breakdown.dart';
|
||||
import 'package:fintracker_api/src/model/net_worth_day.dart';
|
||||
import 'package:fintracker_api/src/model/problem.dart';
|
||||
import 'package:fintracker_api/src/model/refresh_log_out.dart';
|
||||
import 'package:fintracker_api/src/model/refresh_request.dart';
|
||||
import 'package:fintracker_api/src/model/rule_create.dart';
|
||||
import 'package:fintracker_api/src/model/rule_out.dart';
|
||||
import 'package:fintracker_api/src/model/rule_patch.dart';
|
||||
import 'package:fintracker_api/src/model/runway_out.dart';
|
||||
import 'package:fintracker_api/src/model/source_status.dart';
|
||||
import 'package:fintracker_api/src/model/spending_row.dart';
|
||||
import 'package:fintracker_api/src/model/sync_job_out.dart';
|
||||
import 'package:fintracker_api/src/model/sync_run_out.dart';
|
||||
import 'package:fintracker_api/src/model/token_pair.dart';
|
||||
import 'package:fintracker_api/src/model/transaction_out.dart';
|
||||
import 'package:fintracker_api/src/model/transaction_page.dart';
|
||||
import 'package:fintracker_api/src/model/user_out.dart';
|
||||
|
||||
final _regList = RegExp(r'^List<(.*)>$');
|
||||
final _regSet = RegExp(r'^Set<(.*)>$');
|
||||
final _regMap = RegExp(r'^Map<String,(.*)>$');
|
||||
|
||||
ReturnType deserialize<ReturnType, BaseType>(dynamic value, String targetType, {bool growable= true}) {
|
||||
switch (targetType) {
|
||||
case 'String':
|
||||
return '$value' as ReturnType;
|
||||
case 'int':
|
||||
return (value is int ? value : int.parse('$value')) as ReturnType;
|
||||
case 'bool':
|
||||
if (value is bool) {
|
||||
return value as ReturnType;
|
||||
}
|
||||
final valueString = '$value'.toLowerCase();
|
||||
return (valueString == 'true' || valueString == '1') as ReturnType;
|
||||
case 'double':
|
||||
return (value is double ? value : double.parse('$value')) as ReturnType;
|
||||
case 'AccountBalance':
|
||||
return AccountBalance.fromJson(value as Map<String, dynamic>) as ReturnType;
|
||||
case 'AccountKind':
|
||||
|
||||
|
||||
case 'AccountOut':
|
||||
return AccountOut.fromJson(value as Map<String, dynamic>) as ReturnType;
|
||||
case 'AccountPatch':
|
||||
return AccountPatch.fromJson(value as Map<String, dynamic>) as ReturnType;
|
||||
case 'AccountRole':
|
||||
|
||||
|
||||
case 'Broker':
|
||||
|
||||
|
||||
case 'CashFlowMonth':
|
||||
return CashFlowMonth.fromJson(value as Map<String, dynamic>) as ReturnType;
|
||||
case 'CategoryOut':
|
||||
return CategoryOut.fromJson(value as Map<String, dynamic>) as ReturnType;
|
||||
case 'DataQualityRow':
|
||||
return DataQualityRow.fromJson(value as Map<String, dynamic>) as ReturnType;
|
||||
case 'EventSource':
|
||||
|
||||
|
||||
case 'FlowType':
|
||||
|
||||
|
||||
case 'Health':
|
||||
return Health.fromJson(value as Map<String, dynamic>) as ReturnType;
|
||||
case 'JobStatus':
|
||||
|
||||
|
||||
case 'LoginRequest':
|
||||
return LoginRequest.fromJson(value as Map<String, dynamic>) as ReturnType;
|
||||
case 'NetWorthBreakdown':
|
||||
return NetWorthBreakdown.fromJson(value as Map<String, dynamic>) as ReturnType;
|
||||
case 'NetWorthDay':
|
||||
return NetWorthDay.fromJson(value as Map<String, dynamic>) as ReturnType;
|
||||
case 'Problem':
|
||||
return Problem.fromJson(value as Map<String, dynamic>) as ReturnType;
|
||||
case 'RefreshLogOut':
|
||||
return RefreshLogOut.fromJson(value as Map<String, dynamic>) as ReturnType;
|
||||
case 'RefreshRequest':
|
||||
return RefreshRequest.fromJson(value as Map<String, dynamic>) as ReturnType;
|
||||
case 'RuleCreate':
|
||||
return RuleCreate.fromJson(value as Map<String, dynamic>) as ReturnType;
|
||||
case 'RuleKind':
|
||||
|
||||
|
||||
case 'RuleMatchType':
|
||||
|
||||
|
||||
case 'RuleOut':
|
||||
return RuleOut.fromJson(value as Map<String, dynamic>) as ReturnType;
|
||||
case 'RulePatch':
|
||||
return RulePatch.fromJson(value as Map<String, dynamic>) as ReturnType;
|
||||
case 'RunStatus':
|
||||
|
||||
|
||||
case 'RunwayOut':
|
||||
return RunwayOut.fromJson(value as Map<String, dynamic>) as ReturnType;
|
||||
case 'SourceStatus':
|
||||
return SourceStatus.fromJson(value as Map<String, dynamic>) as ReturnType;
|
||||
case 'SpendingRow':
|
||||
return SpendingRow.fromJson(value as Map<String, dynamic>) as ReturnType;
|
||||
case 'SyncJobOut':
|
||||
return SyncJobOut.fromJson(value as Map<String, dynamic>) as ReturnType;
|
||||
case 'SyncRunOut':
|
||||
return SyncRunOut.fromJson(value as Map<String, dynamic>) as ReturnType;
|
||||
case 'TokenPair':
|
||||
return TokenPair.fromJson(value as Map<String, dynamic>) as ReturnType;
|
||||
case 'TransactionOut':
|
||||
return TransactionOut.fromJson(value as Map<String, dynamic>) as ReturnType;
|
||||
case 'TransactionPage':
|
||||
return TransactionPage.fromJson(value as Map<String, dynamic>) as ReturnType;
|
||||
case 'UserOut':
|
||||
return UserOut.fromJson(value as Map<String, dynamic>) as ReturnType;
|
||||
default:
|
||||
RegExpMatch? match;
|
||||
|
||||
if (value is List && (match = _regList.firstMatch(targetType)) != null) {
|
||||
targetType = match![1]!; // ignore: parameter_assignments
|
||||
return value
|
||||
.map<BaseType>((dynamic v) => deserialize<BaseType, BaseType>(v, targetType, growable: growable))
|
||||
.toList(growable: growable) as ReturnType;
|
||||
}
|
||||
if (value is Set && (match = _regSet.firstMatch(targetType)) != null) {
|
||||
targetType = match![1]!; // ignore: parameter_assignments
|
||||
return value
|
||||
.map<BaseType>((dynamic v) => deserialize<BaseType, BaseType>(v, targetType, growable: growable))
|
||||
.toSet() as ReturnType;
|
||||
}
|
||||
if (value is Map && (match = _regMap.firstMatch(targetType)) != null) {
|
||||
targetType = match![1]!.trim(); // ignore: parameter_assignments
|
||||
return Map<String, BaseType>.fromIterables(
|
||||
value.keys as Iterable<String>,
|
||||
value.values.map((dynamic v) => deserialize<BaseType, BaseType>(v, targetType, growable: growable)),
|
||||
) as ReturnType;
|
||||
}
|
||||
break;
|
||||
}
|
||||
throw Exception('Cannot deserialize');
|
||||
}
|
||||
Reference in New Issue
Block a user