/*
* This file is part of GNU Taler
* (C) 2022 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
*/
package net.taler.wallet.accounts
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.JsonClassDiscriminator
@Serializable
data class KnownBankAccounts(
val accounts: List,
)
@Serializable
data class KnownBankAccountsInfo(
val uri: PaytoUri,
@SerialName("kyc_completed")
val kycCompleted: Boolean,
val currency: String,
val alias: String,
)
@Serializable
@OptIn(ExperimentalSerializationApi::class)
@JsonClassDiscriminator("targetType")
sealed class PaytoUri(
val isKnown: Boolean,
val targetType: String,
) {
abstract val targetPath: String
abstract val params: Map
}
@Serializable
@SerialName("iban")
class PaytoUriIBAN(
val iban: String,
override val targetPath: String,
override val params: Map,
) : PaytoUri(
isKnown = true,
targetType = "iban",
)
@Serializable
@SerialName("x-taler-bank")
class PaytoUriTalerBank(
val host: String,
val account: String,
override val targetPath: String,
override val params: Map,
) : PaytoUri(
isKnown = true,
targetType = "x-taler-bank",
)
@Serializable
@SerialName("bitcoin")
class PaytoUriBitcoin(
@SerialName("segwitAddrs")
val segwitAddresses: List,
override val targetPath: String,
override val params: Map,
) : PaytoUri(
isKnown = true,
targetType = "bitcoin",
)