/* * 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 android.net.Uri 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, val bic: String? = "SANDBOXX", override val targetPath: String, override val params: Map, ) : PaytoUri( isKnown = true, targetType = "iban", ) { val paytoUri: String get() = Uri.Builder() .scheme("payto") .authority(targetType) .apply { if (bic != null) appendPath(bic) } .appendPath(iban) .apply { params.forEach { (key, value) -> appendQueryParameter(key, value) } } .build().toString() } @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 = emptyMap(), ) : PaytoUri( isKnown = true, targetType = "bitcoin", ) { val paytoUri: String get() = Uri.Builder() .scheme("payto") .authority(targetType) .apply { segwitAddresses.forEach { address -> appendPath(address) } } .apply { params.forEach { (key, value) -> appendQueryParameter(key, value) } } .build().toString() }