types.rs (7499B)
1 /* 2 This file is part of TALER 3 Copyright (C) 2025 Taler Systems SA 4 5 TALER is free software; you can redistribute it and/or modify it under the 6 terms of the GNU Affero General Public License as published by the Free Software 7 Foundation; either version 3, or (at your option) any later version. 8 9 TALER is distributed in the hope that it will be useful, but WITHOUT ANY 10 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR 11 A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. 12 13 You should have received a copy of the GNU Affero General Public License along with 14 TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/> 15 */ 16 17 use jiff::Timestamp; 18 use serde::{Deserialize, Serialize}; 19 use taler_common::types::amount; 20 21 use crate::HuIban; 22 23 #[derive(Debug, Deserialize)] 24 pub struct Consumer { 25 #[serde(rename = "consumerKey")] 26 pub key: String, 27 #[serde(rename = "megnevezes")] 28 pub name: String, 29 #[serde(rename = "callbackUri")] 30 pub callback_uri: String, 31 #[serde(rename = "elettartam")] 32 pub lifetime: u64, 33 } 34 35 #[derive(Debug, Deserialize)] 36 pub struct TokenInfo { 37 #[serde(rename = "keszult")] 38 pub created: jiff::Timestamp, 39 #[serde(rename = "lejarat")] 40 pub expiration: jiff::Timestamp, 41 #[serde(rename = "kliensinfo")] 42 pub client_info: Option<String>, 43 pub consumer: Consumer, 44 #[serde(rename = "hitelesitett")] 45 pub authenticated: bool, 46 } 47 48 #[derive(Debug, Deserialize)] 49 pub struct SmsCodeSubmission { 50 #[serde(rename = "csatorna")] 51 pub channel: String, 52 #[serde(rename = "hovaMentKi")] 53 pub sent_to: Vec<String>, 54 } 55 56 #[derive(Debug, Deserialize)] 57 pub struct ScaResult { 58 #[serde(rename = "csatorna")] 59 pub channel: String, 60 #[serde(rename = "hovaMentKi")] 61 pub sent_to: Vec<String>, 62 } 63 64 #[derive(Debug, Deserialize)] 65 pub struct Partner { 66 #[serde(rename = "megnevezes")] 67 pub name: String, 68 #[serde(rename = "kod")] 69 pub code: u64, 70 #[serde(rename = "adoszam")] 71 pub tax_number: Option<String>, 72 #[serde(rename = "ebUfallapot")] 73 pub status: String, // TODO enum 74 } 75 76 #[derive(Debug, Deserialize)] 77 pub struct AccountType { 78 #[serde(rename = "kod")] 79 pub code: u64, 80 #[serde(rename = "megnevezes")] 81 pub name: String, 82 } 83 84 #[derive(Debug, Deserialize)] 85 pub struct Currency { 86 #[serde(rename = "jel")] 87 pub symbol: amount::Currency, 88 #[serde(rename = "megnevezes")] 89 pub name: String, 90 } 91 92 #[derive(Debug, Deserialize)] 93 pub struct Account { 94 #[serde(rename = "alapertelmezett")] 95 pub default: bool, 96 #[serde(rename = "bankszamlaTipus")] 97 pub ty: AccountType, 98 #[serde(rename = "deviza")] 99 pub currency: Currency, 100 #[serde(rename = "ibanSzamlaszam")] 101 pub iban: HuIban, 102 #[serde(rename = "kod")] 103 pub code: u64, 104 #[serde(rename = "szamlaszam")] 105 pub number: String, 106 #[serde(rename = "tulajdonosKod")] 107 pub owner_code: u64, 108 #[serde(rename = "lakossagi")] 109 pub resident: bool, 110 #[serde(rename = "megnevezes")] 111 pub name: Option<String>, 112 pub partner: Partner, 113 } 114 115 #[derive(Debug, Deserialize)] 116 pub struct BalanceMini { 117 #[serde(rename = "pozicio")] 118 pub balance: f64, 119 #[serde(rename = "frissites")] 120 pub last_update_time: jiff::Timestamp, 121 } 122 123 #[derive(Debug, Deserialize)] 124 pub struct PartnerAccounts { 125 pub partner: Partner, 126 #[serde(rename = "bankszamlaList")] 127 pub bank_accounts: Vec<Account>, 128 #[serde(rename = "kertJogosultsag")] 129 pub requested_permission: u64, 130 } 131 132 #[derive(Debug, Deserialize)] 133 pub struct PartnerList { 134 #[serde(rename = "partnerSzamlaList")] 135 pub partners: Vec<PartnerAccounts>, 136 } 137 138 #[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)] 139 pub enum TxStatus { 140 #[serde(rename = "G")] 141 ToBeRecorded, 142 #[serde(rename = "1")] 143 PendingFirstSignature, 144 #[serde(rename = "2")] 145 PendingSecondSignature, 146 #[serde(rename = "F")] 147 PendingProcessing, 148 #[serde(rename = "L")] 149 Verified, 150 #[serde(rename = "R")] 151 PartiallyCompleted, 152 #[serde(rename = "T")] 153 Completed, 154 #[serde(rename = "E")] 155 Rejected, 156 #[serde(rename = "M")] 157 Canceled, 158 #[serde(rename = "P")] 159 UnderReview, 160 } 161 162 impl TxStatus { 163 pub fn is_final(&self) -> bool { 164 matches!(self, Self::Completed | Self::Rejected | Self::Canceled) 165 } 166 } 167 168 #[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)] 169 pub enum Direction { 170 #[serde(rename = "T")] 171 Outgoing, 172 #[serde(rename = "J")] 173 Incoming, 174 #[serde(rename = "M")] 175 Both, 176 } 177 178 #[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)] 179 pub enum Order { 180 Ascending, 181 Descending, 182 } 183 184 #[derive(Debug, Deserialize)] 185 pub struct Tx { 186 #[serde(rename = "alairas1idopont")] 187 pub first_signature: Option<Timestamp>, 188 #[serde(rename = "alairas2idopont")] 189 pub second_signature: Option<Timestamp>, 190 #[serde(rename = "alairo1")] 191 pub first_signatory: Option<Partner>, 192 #[serde(rename = "alairo2")] 193 pub second_signatory: Option<Partner>, 194 #[serde(rename = "reszteljesites")] 195 pub partial_execution: bool, 196 #[serde(rename = "sorbaallitas")] 197 pub queued: bool, 198 #[serde(rename = "kod")] 199 pub code: u64, 200 #[serde(rename = "bankszamla")] 201 pub bank_account: Account, 202 #[serde(rename = "deviza")] 203 pub currency: Currency, 204 #[serde(rename = "osszegSigned")] 205 pub amount: f64, 206 #[serde(rename = "kozlemeny")] 207 pub subject: Option<String>, 208 #[serde(rename = "statusz")] 209 pub status: TxStatus, 210 #[serde(rename = "tranzakcioAltipus")] 211 pub kind: Option<String>, 212 #[serde(rename = "eredetiErteknap")] 213 pub tx_date: jiff::civil::Date, 214 #[serde(rename = "erteknap")] 215 pub value_date: jiff::civil::Date, 216 #[serde(rename = "eszamla")] 217 pub counter_account: String, 218 #[serde(rename = "epartner")] 219 pub counter_name: String, 220 #[serde(rename = "tranzakcioTipus")] 221 pub ty: Option<String>, 222 pub eam: Option<u64>, 223 pub partner: Partner, 224 } 225 226 #[derive(Debug, Deserialize)] 227 pub struct TxDto { 228 #[serde(rename = "kod")] 229 pub code: u64, 230 #[serde(rename = "bankszamla")] 231 pub bank_account: String, 232 #[serde(rename = "bankszamlaTulajdonos")] 233 pub bank_account_owner: String, 234 #[serde(rename = "deviza")] 235 pub currency: amount::Currency, 236 #[serde(rename = "osszeg")] 237 pub amount: f64, 238 #[serde(rename = "kozlemeny")] 239 pub subject: Option<String>, 240 #[serde(rename = "statusz")] 241 pub status: TxStatus, 242 #[serde(rename = "tranzakcioAltipus")] 243 pub kind: Option<String>, 244 #[serde(rename = "eredetiErteknap")] 245 pub tx_date: jiff::civil::Date, 246 #[serde(rename = "erteknap")] 247 pub value_date: jiff::civil::Date, 248 #[serde(rename = "eszamla")] 249 pub counter_account: String, 250 #[serde(rename = "epartner")] 251 pub counter_name: String, 252 #[serde(rename = "tranzakcioTipus")] 253 pub ty: Option<String>, 254 pub eam: Option<u64>, 255 } 256 257 #[derive(Debug, Deserialize, Serialize)] 258 pub struct Next { 259 #[serde(rename = "next")] 260 pub next_id: u64, 261 #[serde(rename = "nextTipus")] 262 pub next_type: String, 263 } 264 265 #[derive(Debug, Deserialize)] 266 pub struct TransactionPage { 267 #[serde(flatten)] 268 pub next: Option<Next>, 269 #[serde(rename = "tranzakcioList", default)] 270 pub list: Vec<TransactionWrapper>, 271 } 272 273 #[derive(Debug, Deserialize)] 274 pub struct TransactionWrapper { 275 #[serde(rename = "tranzakcioDto")] 276 pub tx: TxDto, 277 }