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