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/account_suggestion.dart'; import 'package:fintracker_api/src/model/allocation_bucket.dart'; import 'package:fintracker_api/src/model/benchmark_comparison.dart'; import 'package:fintracker_api/src/model/benchmark_comparison_out.dart'; import 'package:fintracker_api/src/model/benchmark_create.dart'; import 'package:fintracker_api/src/model/benchmark_out.dart'; import 'package:fintracker_api/src/model/benchmark_patch.dart'; import 'package:fintracker_api/src/model/benchmark_return_out.dart'; import 'package:fintracker_api/src/model/calendar_entry.dart'; import 'package:fintracker_api/src/model/calendar_out.dart'; import 'package:fintracker_api/src/model/cash_flow_broker_month.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/commit_request.dart'; import 'package:fintracker_api/src/model/data_quality_row.dart'; import 'package:fintracker_api/src/model/event_out.dart'; import 'package:fintracker_api/src/model/event_page.dart'; import 'package:fintracker_api/src/model/forecast_month.dart'; import 'package:fintracker_api/src/model/forecast_out.dart'; import 'package:fintracker_api/src/model/goal_create.dart'; import 'package:fintracker_api/src/model/goal_out.dart'; import 'package:fintracker_api/src/model/goal_patch.dart'; import 'package:fintracker_api/src/model/goal_progress_out.dart'; import 'package:fintracker_api/src/model/health.dart'; import 'package:fintracker_api/src/model/history_out.dart'; import 'package:fintracker_api/src/model/history_row.dart'; import 'package:fintracker_api/src/model/history_totals.dart'; import 'package:fintracker_api/src/model/holding_out.dart'; import 'package:fintracker_api/src/model/import_counts.dart'; import 'package:fintracker_api/src/model/import_preview.dart'; import 'package:fintracker_api/src/model/import_result.dart'; import 'package:fintracker_api/src/model/import_summary.dart'; import 'package:fintracker_api/src/model/instrument_detail.dart'; import 'package:fintracker_api/src/model/instrument_out.dart'; import 'package:fintracker_api/src/model/link_create.dart'; import 'package:fintracker_api/src/model/link_out.dart'; import 'package:fintracker_api/src/model/login_request.dart'; import 'package:fintracker_api/src/model/lot_out.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/new_instrument.dart'; import 'package:fintracker_api/src/model/pending_instrument_out.dart'; import 'package:fintracker_api/src/model/pending_resolve_request.dart'; import 'package:fintracker_api/src/model/pending_resolve_result.dart'; import 'package:fintracker_api/src/model/price_manual_in.dart'; import 'package:fintracker_api/src/model/price_manual_out.dart'; import 'package:fintracker_api/src/model/price_point.dart'; import 'package:fintracker_api/src/model/problem.dart'; import 'package:fintracker_api/src/model/rebalance_bucket_out.dart'; import 'package:fintracker_api/src/model/rebalance_out.dart'; import 'package:fintracker_api/src/model/reconciliation_cash.dart'; import 'package:fintracker_api/src/model/reconciliation_out.dart'; import 'package:fintracker_api/src/model/reconciliation_position.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/returns_out.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/sample_event_out.dart'; import 'package:fintracker_api/src/model/scope_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/summary_out.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/target_in.dart'; import 'package:fintracker_api/src/model/target_out.dart'; import 'package:fintracker_api/src/model/targets_in.dart'; import 'package:fintracker_api/src/model/targets_out.dart'; import 'package:fintracker_api/src/model/tax_account_out.dart'; import 'package:fintracker_api/src/model/tax_lot_out.dart'; import 'package:fintracker_api/src/model/tax_lots_out.dart'; import 'package:fintracker_api/src/model/tax_totals.dart'; import 'package:fintracker_api/src/model/tax_year_out.dart'; import 'package:fintracker_api/src/model/token_pair.dart'; import 'package:fintracker_api/src/model/trade_out.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/unmatched_broker_out.dart'; import 'package:fintracker_api/src/model/unmatched_out.dart'; import 'package:fintracker_api/src/model/unmatched_zm_out.dart'; import 'package:fintracker_api/src/model/user_out.dart'; import 'package:fintracker_api/src/model/value_day.dart'; final _regList = RegExp(r'^List<(.*)>$'); final _regSet = RegExp(r'^Set<(.*)>$'); final _regMap = RegExp(r'^Map$'); ReturnType deserialize(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) as ReturnType; case 'AccountKind': case 'AccountOut': return AccountOut.fromJson(value as Map) as ReturnType; case 'AccountPatch': return AccountPatch.fromJson(value as Map) as ReturnType; case 'AccountRole': case 'AccountSuggestion': return AccountSuggestion.fromJson(value as Map) as ReturnType; case 'AllocationBucket': return AllocationBucket.fromJson(value as Map) as ReturnType; case 'AllocationDimension': case 'BenchmarkComparison': return BenchmarkComparison.fromJson(value as Map) as ReturnType; case 'BenchmarkComparisonOut': return BenchmarkComparisonOut.fromJson(value as Map) as ReturnType; case 'BenchmarkCreate': return BenchmarkCreate.fromJson(value as Map) as ReturnType; case 'BenchmarkOut': return BenchmarkOut.fromJson(value as Map) as ReturnType; case 'BenchmarkPatch': return BenchmarkPatch.fromJson(value as Map) as ReturnType; case 'BenchmarkReturnOut': return BenchmarkReturnOut.fromJson(value as Map) as ReturnType; case 'Broker': case 'CalendarEntry': return CalendarEntry.fromJson(value as Map) as ReturnType; case 'CalendarOut': return CalendarOut.fromJson(value as Map) as ReturnType; case 'CashFlowBrokerMonth': return CashFlowBrokerMonth.fromJson(value as Map) as ReturnType; case 'CashFlowMonth': return CashFlowMonth.fromJson(value as Map) as ReturnType; case 'CategoryOut': return CategoryOut.fromJson(value as Map) as ReturnType; case 'CommitRequest': return CommitRequest.fromJson(value as Map) as ReturnType; case 'DataQualityRow': return DataQualityRow.fromJson(value as Map) as ReturnType; case 'EventKind': case 'EventOut': return EventOut.fromJson(value as Map) as ReturnType; case 'EventPage': return EventPage.fromJson(value as Map) as ReturnType; case 'EventSource': case 'EventStatus': case 'FlowType': case 'ForecastMonth': return ForecastMonth.fromJson(value as Map) as ReturnType; case 'ForecastOut': return ForecastOut.fromJson(value as Map) as ReturnType; case 'GoalCreate': return GoalCreate.fromJson(value as Map) as ReturnType; case 'GoalOut': return GoalOut.fromJson(value as Map) as ReturnType; case 'GoalPatch': return GoalPatch.fromJson(value as Map) as ReturnType; case 'GoalProgressOut': return GoalProgressOut.fromJson(value as Map) as ReturnType; case 'Health': return Health.fromJson(value as Map) as ReturnType; case 'HistoryOut': return HistoryOut.fromJson(value as Map) as ReturnType; case 'HistoryRow': return HistoryRow.fromJson(value as Map) as ReturnType; case 'HistoryTotals': return HistoryTotals.fromJson(value as Map) as ReturnType; case 'HoldingOut': return HoldingOut.fromJson(value as Map) as ReturnType; case 'ImportCounts': return ImportCounts.fromJson(value as Map) as ReturnType; case 'ImportPreview': return ImportPreview.fromJson(value as Map) as ReturnType; case 'ImportResult': return ImportResult.fromJson(value as Map) as ReturnType; case 'ImportSummary': return ImportSummary.fromJson(value as Map) as ReturnType; case 'InstrumentDetail': return InstrumentDetail.fromJson(value as Map) as ReturnType; case 'InstrumentOut': return InstrumentOut.fromJson(value as Map) as ReturnType; case 'JobStatus': case 'LinkCreate': return LinkCreate.fromJson(value as Map) as ReturnType; case 'LinkOut': return LinkOut.fromJson(value as Map) as ReturnType; case 'LoginRequest': return LoginRequest.fromJson(value as Map) as ReturnType; case 'LotOut': return LotOut.fromJson(value as Map) as ReturnType; case 'NetWorthBreakdown': return NetWorthBreakdown.fromJson(value as Map) as ReturnType; case 'NetWorthDay': return NetWorthDay.fromJson(value as Map) as ReturnType; case 'NewInstrument': return NewInstrument.fromJson(value as Map) as ReturnType; case 'PendingInstrumentOut': return PendingInstrumentOut.fromJson(value as Map) as ReturnType; case 'PendingResolveRequest': return PendingResolveRequest.fromJson(value as Map) as ReturnType; case 'PendingResolveResult': return PendingResolveResult.fromJson(value as Map) as ReturnType; case 'PriceManualIn': return PriceManualIn.fromJson(value as Map) as ReturnType; case 'PriceManualOut': return PriceManualOut.fromJson(value as Map) as ReturnType; case 'PricePoint': return PricePoint.fromJson(value as Map) as ReturnType; case 'Problem': return Problem.fromJson(value as Map) as ReturnType; case 'RebalanceBucketOut': return RebalanceBucketOut.fromJson(value as Map) as ReturnType; case 'RebalanceOut': return RebalanceOut.fromJson(value as Map) as ReturnType; case 'ReconciliationCash': return ReconciliationCash.fromJson(value as Map) as ReturnType; case 'ReconciliationOut': return ReconciliationOut.fromJson(value as Map) as ReturnType; case 'ReconciliationPosition': return ReconciliationPosition.fromJson(value as Map) as ReturnType; case 'RefreshLogOut': return RefreshLogOut.fromJson(value as Map) as ReturnType; case 'RefreshRequest': return RefreshRequest.fromJson(value as Map) as ReturnType; case 'ReturnsOut': return ReturnsOut.fromJson(value as Map) as ReturnType; case 'RuleCreate': return RuleCreate.fromJson(value as Map) as ReturnType; case 'RuleKind': case 'RuleMatchType': case 'RuleOut': return RuleOut.fromJson(value as Map) as ReturnType; case 'RulePatch': return RulePatch.fromJson(value as Map) as ReturnType; case 'RunStatus': case 'RunwayOut': return RunwayOut.fromJson(value as Map) as ReturnType; case 'SampleEventOut': return SampleEventOut.fromJson(value as Map) as ReturnType; case 'ScopeOut': return ScopeOut.fromJson(value as Map) as ReturnType; case 'SourceStatus': return SourceStatus.fromJson(value as Map) as ReturnType; case 'SpendingRow': return SpendingRow.fromJson(value as Map) as ReturnType; case 'SummaryOut': return SummaryOut.fromJson(value as Map) as ReturnType; case 'SyncJobOut': return SyncJobOut.fromJson(value as Map) as ReturnType; case 'SyncRunOut': return SyncRunOut.fromJson(value as Map) as ReturnType; case 'TargetIn': return TargetIn.fromJson(value as Map) as ReturnType; case 'TargetOut': return TargetOut.fromJson(value as Map) as ReturnType; case 'TargetsIn': return TargetsIn.fromJson(value as Map) as ReturnType; case 'TargetsOut': return TargetsOut.fromJson(value as Map) as ReturnType; case 'TaxAccountOut': return TaxAccountOut.fromJson(value as Map) as ReturnType; case 'TaxLotOut': return TaxLotOut.fromJson(value as Map) as ReturnType; case 'TaxLotsOut': return TaxLotsOut.fromJson(value as Map) as ReturnType; case 'TaxTotals': return TaxTotals.fromJson(value as Map) as ReturnType; case 'TaxYearOut': return TaxYearOut.fromJson(value as Map) as ReturnType; case 'TokenPair': return TokenPair.fromJson(value as Map) as ReturnType; case 'TradeOut': return TradeOut.fromJson(value as Map) as ReturnType; case 'TransactionOut': return TransactionOut.fromJson(value as Map) as ReturnType; case 'TransactionPage': return TransactionPage.fromJson(value as Map) as ReturnType; case 'UnmatchedBrokerOut': return UnmatchedBrokerOut.fromJson(value as Map) as ReturnType; case 'UnmatchedOut': return UnmatchedOut.fromJson(value as Map) as ReturnType; case 'UnmatchedZmOut': return UnmatchedZmOut.fromJson(value as Map) as ReturnType; case 'UserOut': return UserOut.fromJson(value as Map) as ReturnType; case 'ValueDay': return ValueDay.fromJson(value as Map) as ReturnType; default: RegExpMatch? match; if (value is List && (match = _regList.firstMatch(targetType)) != null) { targetType = match![1]!; // ignore: parameter_assignments return value .map((dynamic v) => deserialize(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((dynamic v) => deserialize(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.fromIterables( value.keys as Iterable, value.values.map((dynamic v) => deserialize(v, targetType, growable: growable)), ) as ReturnType; } break; } throw Exception('Cannot deserialize'); }