Skip to main content

fints/
banks.rs

1//! Bank registry: known German banks with their FinTS endpoint URLs.
2//!
3//! Banks are identified solely by their BLZ (Bankleitzahl). There is no
4//! separate `id` field — the BLZ is the canonical identifier.
5
6use serde::{Deserialize, Serialize};
7
8use crate::types::{BankName, Bic, Blz, FinTSUrl};
9
10/// Configuration for a known bank.
11#[derive(Debug, Clone, Serialize, Deserialize)]
12pub struct BankConfig {
13    pub name: BankName,
14    pub blz: Blz,
15    pub bic: Bic,
16    pub url: FinTSUrl,
17}
18
19impl BankConfig {
20    /// Create a new BankConfig.
21    pub fn new(
22        name: impl Into<String>,
23        blz: impl Into<String>,
24        bic: impl Into<String>,
25        url: impl Into<String>,
26    ) -> Self {
27        Self {
28            name: BankName::new(name),
29            blz: Blz::new(blz),
30            bic: Bic::new(bic),
31            url: FinTSUrl::new(url),
32        }
33    }
34
35    /// Create a BankConfig from raw (blz, bic, name, url) — used by generated code.
36    pub fn new_raw(
37        blz: impl Into<String>,
38        bic: impl Into<String>,
39        name: impl Into<String>,
40        url: impl Into<String>,
41    ) -> Self {
42        Self {
43            blz: Blz::new(blz),
44            bic: Bic::new(bic),
45            name: BankName::new(name),
46            url: FinTSUrl::new(url),
47        }
48    }
49}
50
51/// Get all known banks with FinTS PIN/TAN access.
52pub fn all_banks() -> Vec<BankConfig> {
53    crate::banks_generated::generated_all_banks()
54}
55
56/// Look up a bank by its BLZ (bank code).
57pub fn bank_by_blz(blz: &str) -> Option<BankConfig> {
58    crate::banks_generated::generated_bank_by_blz(blz)
59}