4 个版本
0.2.2 | 2024年7月2日 |
---|---|
0.2.1 | 2023年11月9日 |
0.1.2 | 2023年8月17日 |
1089 在解析器实现中
用于 invoicero
34KB
747 行
SPAYD (短支付描述符)
该库实现了短支付描述符格式(SPAYD 或 SPD)的文本处理。这是一个简单的支付请求文本格式,提供所有必要的详细信息以向收款人进行银行转账(目的地账户(IBAN)、金额等)。数据通常以二维码的形式显示,可扫描到银行应用程序中。虽然它主要在捷克共和国和斯洛伐克使用,但该格式旨在处理国际银行账户和货币。
该库仅旨在处理数据的文本处理。二维码扫描已在库(如 qr_code)中实现,也可能由移动操作系统上的其他方法提供。
lib.rs
:
该库实现了短支付描述符格式(SPAYD 或 SPD)的文本处理。这是一个简单的在捷克共和国和斯洛伐克共和国请求支付的文本格式。它可以编码收款人、目的地账户(IBAN)、金额等详细信息。
解析SPAYD文本
use spayd::{Spayd, fields};
let payment: Spayd = "SPD*1.0*ACC:CZ1355000000000000222885*AM:250.00*CC:CZK".parse().unwrap();
assert_eq!(payment.field(fields::ACCOUNT), Some("CZ1355000000000000222885"));
assert_eq!(payment.field(fields::AMOUNT), Some("250.00"));
assert_eq!(payment.field(fields::CURRENCY), Some("CZK"));
创建一个SPAYD
use spayd::{Spayd, fields};
let account = "CZ1355000000000000222885";
let amount = "250.00";
let currency = "CZK";
let mut payment = Spayd::empty_v1_0();
payment.set_field(fields::ACCOUNT, account);
payment.set_field(fields::AMOUNT, amount);
payment.set_field(fields::CURRENCY, currency);
assert_eq!(payment.to_string(), "SPD*1.0*ACC:CZ1355000000000000222885*AM:250.00*CC:CZK")
该crate还提供了一些功能(chrono、iban_validate、iso_currency、rust_decimal),用于可选的转换为/从常用类型。
use spayd::{Spayd, fields};
use iban::Iban;
use chrono::NaiveDate;
use rust_decimal::Decimal;
use iso_currency::Currency;
let account: Iban = "CZ1355000000000000222885".parse().unwrap();
let amount = Decimal::new(250, 0);;
let currency = Currency::CZK;
let due_date = NaiveDate::from_ymd_opt(2023, 10, 31).unwrap();
let mut payment = Spayd::empty_v1_0();
payment.set_account(account);
payment.set_amount(&amount);
payment.set_currency(currency);
payment.set_due_date(&due_date);
assert_eq!(payment.account().unwrap().to_iban(), Ok(account));
assert_eq!(payment.amount(), Ok(amount));
assert_eq!(payment.currency(), Ok(currency));
assert_eq!(payment.due_date(), Ok(due_date));
依赖项
~2.7–4MB
~72K SLoC