-
Notifications
You must be signed in to change notification settings - Fork 289
/
CoinPair.kt
68 lines (59 loc) · 2.41 KB
/
CoinPair.kt
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
package com.blockchain.morph
import com.blockchain.morph.CoinPair.BCH_TO_BCH
import com.blockchain.morph.CoinPair.BCH_TO_BTC
import com.blockchain.morph.CoinPair.BCH_TO_ETH
import com.blockchain.morph.CoinPair.BTC_TO_BCH
import com.blockchain.morph.CoinPair.BTC_TO_BTC
import com.blockchain.morph.CoinPair.BTC_TO_ETH
import com.blockchain.morph.CoinPair.ETH_TO_BCH
import com.blockchain.morph.CoinPair.ETH_TO_BTC
import com.blockchain.morph.CoinPair.ETH_TO_ETH
import info.blockchain.balance.CryptoCurrency
enum class CoinPair(
val pairCode: String,
val from: CryptoCurrency,
val to: CryptoCurrency
) {
BTC_TO_BTC("btc_btc", CryptoCurrency.BTC, CryptoCurrency.BTC),
BTC_TO_ETH("btc_eth", CryptoCurrency.BTC, CryptoCurrency.ETHER),
BTC_TO_BCH("btc_bch", CryptoCurrency.BTC, CryptoCurrency.BCH),
ETH_TO_ETH("eth_eth", CryptoCurrency.ETHER, CryptoCurrency.ETHER),
ETH_TO_BTC("eth_btc", CryptoCurrency.ETHER, CryptoCurrency.BTC),
ETH_TO_BCH("eth_bch", CryptoCurrency.ETHER, CryptoCurrency.BCH),
BCH_TO_BCH("bch_bch", CryptoCurrency.BCH, CryptoCurrency.BCH),
BCH_TO_BTC("bch_btc", CryptoCurrency.BCH, CryptoCurrency.BTC),
BCH_TO_ETH("bch_eth", CryptoCurrency.BCH, CryptoCurrency.ETHER);
val sameInputOutput = from == to
companion object {
fun fromPairCode(pairCode: String): CoinPair {
pairCode.split('_').let {
if (it.size == 2) {
val from = CryptoCurrency.fromSymbol(it.first())
val to = CryptoCurrency.fromSymbol(it.last())
if (from != null && to != null) {
return from to to
}
}
throw IllegalStateException("Attempt to get invalid pair $pairCode")
}
}
}
}
infix fun CryptoCurrency.to(other: CryptoCurrency) =
when (this) {
CryptoCurrency.BTC -> when (other) {
CryptoCurrency.BTC -> BTC_TO_BTC
CryptoCurrency.ETHER -> BTC_TO_ETH
CryptoCurrency.BCH -> BTC_TO_BCH
}
CryptoCurrency.ETHER -> when (other) {
CryptoCurrency.ETHER -> ETH_TO_ETH
CryptoCurrency.BTC -> ETH_TO_BTC
CryptoCurrency.BCH -> ETH_TO_BCH
}
CryptoCurrency.BCH -> when (other) {
CryptoCurrency.BCH -> BCH_TO_BCH
CryptoCurrency.BTC -> BCH_TO_BTC
CryptoCurrency.ETHER -> BCH_TO_ETH
}
}