taler-rust

GNU Taler code in Rust. Largely core banking integrations.
Log | Files | Refs | Submodules | README | LICENSE

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 }