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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
/*
* This file is part of GNU Taler
* (C) 2020 Taler Systems S.A.
*
* GNU Taler is free software; you can redistribute it and/or modify it under the
* terms of the GNU General Public License as published by the Free Software
* Foundation; either version 3, or (at your option) any later version.
*
* GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
* A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with
* GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
package net.taler.wallet.withdraw
import net.taler.common.Amount
import net.taler.common.Timestamp
import org.json.JSONObject
data class CoinFee(
val coin: Amount,
val quantity: Int,
val feeDeposit: Amount,
val feeRefresh: Amount,
val feeRefund: Amount,
val feeWithdraw: Amount
)
data class WireFee(
val start: Timestamp,
val end: Timestamp,
val wireFee: Amount,
val closingFee: Amount
)
data class ExchangeFees(
val withdrawFee: Amount,
val overhead: Amount,
val earliestDepositExpiration: Timestamp,
val coinFees: List<CoinFee>,
val wireFees: List<WireFee>
) {
companion object {
fun fromExchangeWithdrawDetailsJson(json: JSONObject): ExchangeFees {
val earliestDepositExpiration =
json.getJSONObject("earliestDepositExpiration").getLong("t_ms")
val selectedDenoms = json.getJSONObject("selectedDenoms")
val denoms = selectedDenoms.getJSONArray("selectedDenoms")
val coinFees = ArrayList<CoinFee>(denoms.length())
for (i in 0 until denoms.length()) {
val denom = denoms.getJSONObject(i)
val d = denom.getJSONObject("denom")
val coinFee = CoinFee(
coin = Amount.fromJsonObject(d.getJSONObject("value")),
quantity = denom.getInt("count"),
feeDeposit = Amount.fromJsonObject(d.getJSONObject("feeDeposit")),
feeRefresh = Amount.fromJsonObject(d.getJSONObject("feeRefresh")),
feeRefund = Amount.fromJsonObject(d.getJSONObject("feeRefund")),
feeWithdraw = Amount.fromJsonObject(d.getJSONObject("feeWithdraw"))
)
coinFees.add(coinFee)
}
val wireFeesJson = json.getJSONObject("wireFees")
val feesForType = wireFeesJson.getJSONObject("feesForType")
val bankFees = feesForType.getJSONArray("x-taler-bank")
val wireFees = ArrayList<WireFee>(bankFees.length())
for (i in 0 until bankFees.length()) {
val fee = bankFees.getJSONObject(i)
val startStamp =
fee.getJSONObject("startStamp").getLong("t_ms")
val endStamp =
fee.getJSONObject("endStamp").getLong("t_ms")
val wireFee = WireFee(
start = Timestamp(startStamp),
end = Timestamp(endStamp),
wireFee = Amount.fromJsonObject(fee.getJSONObject("wireFee")),
closingFee = Amount.fromJsonObject(fee.getJSONObject("closingFee"))
)
wireFees.add(wireFee)
}
return ExchangeFees(
withdrawFee = Amount.fromJsonObject(json.getJSONObject("withdrawFee")),
overhead = Amount.fromJsonObject(json.getJSONObject("overhead")),
earliestDepositExpiration = Timestamp(earliestDepositExpiration),
coinFees = coinFees,
wireFees = wireFees
)
}
}
}
|