///|
fn[T] require(result : Result[T, @mooniban.IbanError]) -> T {
match result {
Ok(value) => value
Err(error) => abort(error.format())
}
}
///|
fn main {
let de = require(@mooniban.parse("DE89 3704 0044 0532 0130 00"))
match (de.bank(), de.account()) {
(Some(bank), Some(account)) => {
if bank != "37040044" || account != "0532013000" {
abort("checkout fields mismatch")
}
println("CHECKOUT: compact=\{de.compact} bank=\{bank}")
}
_ => abort("DE fields missing")
}
let gb = require(@mooniban.build("GB", "WEST12345698765432"))
if gb.pretty() != "GB82 WEST 1234 5698 7654 32" {
abort("treasury rebuild mismatch")
}
println("TREASURY: rebuilt=\{gb.pretty()}")
match @mooniban.parse("DE88370400440532013000") {
Err(err) => {
if err.code() != "IBAN008" {
abort("expected checksum rejection")
}
println("RISK: mutated DE IBAN rejected by mod-97")
}
Ok(_) => abort("mutated DE IBAN must fail")
}
println("MoonIBAN acceptance: 3 scenarios passed")
}