taler-rust

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

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 }