forked from SatoshiPortal/bullbitcoin-mobile
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathget_paid_settlement_mapper.dart
More file actions
74 lines (68 loc) · 3.11 KB
/
Copy pathget_paid_settlement_mapper.dart
File metadata and controls
74 lines (68 loc) · 3.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import 'package:bb_mobile/features/bullnym/domain/bullnym_fiat_settlement.dart';
import 'package:bb_mobile/features/get_paid/domain/get_paid_settlement.dart';
/// Maps the validated Bullnym settlement projection into the Get Paid-owned
/// presentation projection. A null input (no server classification) maps to a
/// null output so the history list omits the label rather than assuming
/// Bitcoin.
GetPaidSettlement? mapBullnymSettlementToGetPaid(
BullnymGetPaidSettlement? settlement,
) {
if (settlement == null) return null;
return GetPaidSettlement(
kind: _kind(settlement.kind),
fiat: [for (final leg in settlement.fiat) _fiatLeg(leg)],
bitcoin: [for (final leg in settlement.bitcoin) _bitcoinLeg(leg)],
overrideReason: settlement.overrideReason == null
? null
: _overrideReason(settlement.overrideReason!),
fiatPercentage: settlement.fiatPercentage,
creationRateMinorPerBtc: settlement.creationRateMinorPerBtc,
creationRateCurrency: settlement.creationRateCurrency,
);
}
GetPaidSettlementKind _kind(BullnymSettlementKind kind) => switch (kind) {
BullnymSettlementKind.bitcoin => GetPaidSettlementKind.bitcoin,
BullnymSettlementKind.fiat => GetPaidSettlementKind.fiat,
BullnymSettlementKind.mixed => GetPaidSettlementKind.mixed,
BullnymSettlementKind.unavailable => GetPaidSettlementKind.unavailable,
};
GetPaidFiatSettlementLeg _fiatLeg(BullnymFiatSettlementLeg leg) =>
GetPaidFiatSettlementLeg(
amountMinor: leg.amountMinor,
quotedAmountMinor: leg.quotedAmountMinor,
executionRateMinorPerBtc: leg.executionRateMinorPerBtc,
currency: leg.currency,
orderId: leg.orderId,
status: _legStatus(leg.status),
);
GetPaidBitcoinSettlementLeg _bitcoinLeg(BullnymBitcoinSettlementLeg leg) =>
GetPaidBitcoinSettlementLeg(
amountSat: leg.amountSat,
network: leg.network,
status: _legStatus(leg.status),
);
GetPaidSettlementLegStatus _legStatus(BullnymSettlementLegStatus status) =>
switch (status) {
BullnymSettlementLegStatus.pending => GetPaidSettlementLegStatus.pending,
BullnymSettlementLegStatus.settled => GetPaidSettlementLegStatus.settled,
BullnymSettlementLegStatus.problem => GetPaidSettlementLegStatus.problem,
// A leg status the strict parser never emits still fails safe to
// unavailable rather than being presented as a definite state.
BullnymSettlementLegStatus.unavailable ||
BullnymSettlementLegStatus.unknown =>
GetPaidSettlementLegStatus.unavailable,
};
GetPaidFiatOverrideReason _overrideReason(
BullnymFiatConversionOverrideReason reason,
) => switch (reason) {
BullnymFiatConversionOverrideReason.belowMinimum =>
GetPaidFiatOverrideReason.belowMinimum,
BullnymFiatConversionOverrideReason.invalidSplit =>
GetPaidFiatOverrideReason.invalidSplit,
BullnymFiatConversionOverrideReason.conversionUnavailable =>
GetPaidFiatOverrideReason.conversionUnavailable,
BullnymFiatConversionOverrideReason.ambiguousCreate =>
GetPaidFiatOverrideReason.ambiguousCreate,
BullnymFiatConversionOverrideReason.unknown =>
GetPaidFiatOverrideReason.unknown,
};