spayd/lib.rs
1//! This library implements text processing for the Short Payment Descriptor format
2//! (SPAYD or SPD). This is a simple text format for requesting payments in
3//! Czechia and the Slovak Republic. It can encode details of the payee,
4//! destination account (IBAN), amount etc.
5//!
6//! Parsing SPAYD text:
7//! ```
8//! use spayd::{Spayd, fields};
9//!
10//! let payment: Spayd = "SPD*1.0*ACC:CZ1355000000000000222885*AM:250.00*CC:CZK".parse().unwrap();
11//!
12//! assert_eq!(payment.field(fields::ACCOUNT), Some("CZ1355000000000000222885"));
13//! assert_eq!(payment.field(fields::AMOUNT), Some("250.00"));
14//! assert_eq!(payment.field(fields::CURRENCY), Some("CZK"));
15//! ```
16//!
17//! Creatig a SPAYD:
18//! ```
19//! use spayd::{Spayd, fields};
20//!
21//! let account = "CZ1355000000000000222885";
22//! let amount = "250.00";
23//! let currency = "CZK";
24//!
25//! let mut payment = Spayd::empty_v1_0();
26//! payment.set_field(fields::ACCOUNT, account);
27//! payment.set_field(fields::AMOUNT, amount);
28//! payment.set_field(fields::CURRENCY, currency);
29//!
30//! assert_eq!(payment.to_string(), "SPD*1.0*ACC:CZ1355000000000000222885*AM:250.00*CC:CZK")
31//! ```
32//!
33//! This crate also provides features (chrono, iban_validate, iso_currency, rust_decimal) for
34//! optional conversions to/from commonly used types.
35//! ```
36//! use spayd::{Spayd, fields};
37//! use iban::Iban;
38//! use chrono::NaiveDate;
39//! use rust_decimal::Decimal;
40//! use iso_currency::Currency;
41//!
42//! let account: Iban = "CZ1355000000000000222885".parse().unwrap();
43//! let amount = Decimal::new(250, 0);;
44//! let currency = Currency::CZK;
45//! let due_date = NaiveDate::from_ymd_opt(2023, 10, 31).unwrap();
46//!
47//! let mut payment = Spayd::empty_v1_0();
48//! payment.set_account(account);
49//! payment.set_amount(&amount);
50//! payment.set_currency(currency);
51//! payment.set_due_date(&due_date);
52//!
53//! assert_eq!(payment.account().unwrap().to_iban(), Ok(account));
54//! assert_eq!(payment.amount(), Ok(amount));
55//! assert_eq!(payment.currency(), Ok(currency));
56//! assert_eq!(payment.due_date(), Ok(due_date));
57//! ```
58//!
59
60mod convert;
61#[cfg(feature = "crc32")]
62mod crc32;
63mod error;
64/// Constants for the standard field names.
65pub mod fields;
66mod iban_bic;
67mod parser;
68mod spayd;
69
70pub use crate::convert::*;
71#[cfg(feature = "crc32")]
72pub use crate::crc32::{Crc32Ok, Crc32Result};
73pub use crate::error::SpaydError;
74pub use crate::iban_bic::*;
75pub use crate::spayd::*;