commit 664956c4f633956fc01e2c20ec30328e414d4556
parent e512ebce96f185b2983095c934093b4ab25530b7
Author: Antoine A <>
Date: Thu, 17 Sep 2026 18:13:07 +0200
common: sync taler-rust
Diffstat:
5 files changed, 75 insertions(+), 73 deletions(-)
diff --git a/Cargo.lock b/Cargo.lock
@@ -402,9 +402,9 @@ dependencies = [
[[package]]
name = "cfg-if"
-version = "1.0.4"
+version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
+checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600"
[[package]]
name = "cfg_aliases"
@@ -476,7 +476,7 @@ dependencies = [
"heck",
"proc-macro2",
"quote",
- "syn 3.0.5",
+ "syn 3.0.6",
]
[[package]]
@@ -739,7 +739,7 @@ dependencies = [
"proc-macro2",
"quote",
"strsim",
- "syn 3.0.5",
+ "syn 3.0.6",
]
[[package]]
@@ -750,7 +750,7 @@ checksum = "2ac7135c3ef02b2f7833bbeb1be5ba7f966dcde8a87c6b87f65a778d71a02785"
dependencies = [
"darling_core",
"quote",
- "syn 3.0.5",
+ "syn 3.0.6",
]
[[package]]
@@ -901,7 +901,7 @@ checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8"
dependencies = [
"proc-macro2",
"quote",
- "syn 3.0.5",
+ "syn 3.0.6",
]
[[package]]
@@ -1141,7 +1141,7 @@ checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44"
dependencies = [
"proc-macro2",
"quote",
- "syn 3.0.5",
+ "syn 3.0.6",
]
[[package]]
@@ -1367,7 +1367,7 @@ dependencies = [
[[package]]
name = "http-client"
version = "1.5.0"
-source = "git+git://git.taler.net/taler-rust.git/#b2cc6de2b7551860d1c864df316c408df3708a14"
+source = "git+git://git.taler.net/taler-rust.git/#14d99474e131e33f86cbe1ead7ce68bd9f33c07a"
dependencies = [
"compact_str",
"futures-util",
@@ -2110,7 +2110,7 @@ dependencies = [
"proc-macro2",
"quote",
"rustversion",
- "syn 3.0.5",
+ "syn 3.0.6",
]
[[package]]
@@ -2427,7 +2427,7 @@ checksum = "01e34894696ff94f64a20c2c373a6440903e9c2789a303d68ec6e6f953f890e4"
dependencies = [
"proc-macro2",
"quote",
- "syn 3.0.5",
+ "syn 3.0.6",
]
[[package]]
@@ -2809,9 +2809,9 @@ dependencies = [
[[package]]
name = "rustix"
-version = "1.1.4"
+version = "1.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190"
+checksum = "891efababe418670775f199f0d233d84843c227a0949a883ce15b37c78d6629d"
dependencies = [
"bitflags 2.13.2",
"errno",
@@ -2988,7 +2988,7 @@ checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348"
dependencies = [
"proc-macro2",
"quote",
- "syn 3.0.5",
+ "syn 3.0.6",
]
[[package]]
@@ -3046,7 +3046,7 @@ dependencies = [
"darling",
"proc-macro2",
"quote",
- "syn 3.0.5",
+ "syn 3.0.6",
]
[[package]]
@@ -3471,9 +3471,9 @@ dependencies = [
[[package]]
name = "syn"
-version = "3.0.5"
+version = "3.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "12df2e0110f65b775f769bb17ef989067a1d931b2eb822bd4346631eeada89f9"
+checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee"
dependencies = [
"proc-macro2",
"quote",
@@ -3508,7 +3508,7 @@ checksum = "901704edd0dfe137f1987838ee4f259e4e063c31371bdb423f7ae38ec6f77f02"
dependencies = [
"proc-macro2",
"quote",
- "syn 3.0.5",
+ "syn 3.0.6",
]
[[package]]
@@ -3535,7 +3535,7 @@ dependencies = [
[[package]]
name = "taler-api"
version = "1.5.0"
-source = "git+git://git.taler.net/taler-rust.git/#b2cc6de2b7551860d1c864df316c408df3708a14"
+source = "git+git://git.taler.net/taler-rust.git/#14d99474e131e33f86cbe1ead7ce68bd9f33c07a"
dependencies = [
"aws-lc-rs",
"axum",
@@ -3564,12 +3564,12 @@ dependencies = [
[[package]]
name = "taler-build"
version = "1.5.0"
-source = "git+git://git.taler.net/taler-rust.git/#b2cc6de2b7551860d1c864df316c408df3708a14"
+source = "git+git://git.taler.net/taler-rust.git/#14d99474e131e33f86cbe1ead7ce68bd9f33c07a"
[[package]]
name = "taler-common"
version = "1.5.0"
-source = "git+git://git.taler.net/taler-rust.git/#b2cc6de2b7551860d1c864df316c408df3708a14"
+source = "git+git://git.taler.net/taler-rust.git/#14d99474e131e33f86cbe1ead7ce68bd9f33c07a"
dependencies = [
"anyhow",
"aws-lc-rs",
@@ -3599,17 +3599,17 @@ dependencies = [
[[package]]
name = "taler-macros"
version = "1.5.0"
-source = "git+git://git.taler.net/taler-rust.git/#b2cc6de2b7551860d1c864df316c408df3708a14"
+source = "git+git://git.taler.net/taler-rust.git/#14d99474e131e33f86cbe1ead7ce68bd9f33c07a"
dependencies = [
"proc-macro2",
"quote",
- "syn 3.0.5",
+ "syn 3.0.6",
]
[[package]]
name = "taler-test-utils"
version = "1.5.0"
-source = "git+git://git.taler.net/taler-rust.git/#b2cc6de2b7551860d1c864df316c408df3708a14"
+source = "git+git://git.taler.net/taler-rust.git/#14d99474e131e33f86cbe1ead7ce68bd9f33c07a"
dependencies = [
"aws-lc-rs",
"axum",
@@ -3692,7 +3692,7 @@ checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af"
dependencies = [
"proc-macro2",
"quote",
- "syn 3.0.5",
+ "syn 3.0.6",
]
[[package]]
@@ -3774,7 +3774,7 @@ checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e"
dependencies = [
"proc-macro2",
"quote",
- "syn 3.0.5",
+ "syn 3.0.6",
]
[[package]]
@@ -4019,9 +4019,9 @@ checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5"
[[package]]
name = "unicode-ident"
-version = "1.0.24"
+version = "1.0.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
+checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954"
[[package]]
name = "unicode-normalization"
@@ -4221,7 +4221,7 @@ dependencies = [
"bumpalo",
"proc-macro2",
"quote",
- "syn 3.0.5",
+ "syn 3.0.6",
"wasm-bindgen-shared",
]
@@ -4614,7 +4614,7 @@ checksum = "33811428bee40dbceb6d545e95754741d17a6aef9a4849f0fd62e2ba4f412a78"
dependencies = [
"proc-macro2",
"quote",
- "syn 3.0.5",
+ "syn 3.0.6",
"synstructure 0.14.0",
]
@@ -4655,7 +4655,7 @@ checksum = "f75b4683f6c7f45248d4d64056a24298c6281e0993356d7d1b4a1a962ef10d4a"
dependencies = [
"proc-macro2",
"quote",
- "syn 3.0.5",
+ "syn 3.0.6",
"synstructure 0.14.0",
]
@@ -4695,7 +4695,7 @@ checksum = "34df6fc39dbd26ddc9c10e6a2984476e13acce22e64e4487636ef494369225da"
dependencies = [
"proc-macro2",
"quote",
- "syn 3.0.5",
+ "syn 3.0.6",
]
[[package]]
diff --git a/libeufin-bank/src/config.rs b/libeufin-bank/src/config.rs
@@ -28,7 +28,7 @@ use taler_api::{
error::{ApiResult, failure},
};
use taler_common::{
- config::{Config, ValueErr},
+ config::{CfgErr, Config},
error_code::ErrorCode,
map_config,
types::amount::{Amount, Currency},
@@ -95,7 +95,7 @@ impl BankCfg {
fn currency_specification(
cfg: &Config,
currency: &Currency,
- ) -> Result<CurrencySpecification, ValueErr> {
+ ) -> Result<CurrencySpecification, CfgErr> {
for s in cfg.sections() {
if s.name.starts_with("currency-")
&& s.currency("code").require()? == *currency
@@ -122,7 +122,7 @@ impl BankCfg {
})
}
- pub fn parse(cfg: &Config) -> Result<Self, ValueErr> {
+ pub fn parse(cfg: &Config) -> Result<Self, CfgErr> {
let s = cfg.section("libeufin-bank");
let base_url = s.base_url("base_url").require()?;
let hostname = base_url.host_str().unwrap_or_default().into();
diff --git a/libeufin-ebics/src/keys.rs b/libeufin-ebics/src/keys.rs
@@ -19,7 +19,7 @@
use std::{borrow::Cow, io::ErrorKind, path::Path};
-use anyhow::{anyhow, bail};
+use anyhow::anyhow;
use aws_lc_rs::{
encoding::{AsDer, Pkcs8V1Der, PublicKeyX509Der},
rsa::{KeyPair, KeySize, PublicKey},
@@ -27,6 +27,8 @@ use aws_lc_rs::{
};
use serde::{Deserialize, Deserializer, Serialize, Serializer};
use taler_common::{
+ config::CfgErr,
+ config_bail,
encoding::base32::{self},
json_file,
};
@@ -207,26 +209,26 @@ pub fn load_client_keys(path: &Path) -> anyhow::Result<Option<ClientKeys>> {
pub fn expect_full_keys(
cfg: &EbicsKeysCfg,
setup_cmd: &str,
-) -> anyhow::Result<(ClientKeys, BankKeys)> {
- let client_keys = load_client_keys(cfg.client.as_ref())?;
+) -> Result<(ClientKeys, BankKeys), CfgErr> {
+ let client_keys = load_client_keys(cfg.client.as_ref()).map_err(CfgErr::custom)?;
let Some(client_keys) = client_keys else {
- bail!(
+ config_bail!(
"Missing client private keys file at '{}', run '{setup_cmd}' first",
cfg.client
)
};
if !client_keys.submitted_ini || !client_keys.submitted_hia {
- bail!("Unsubmitted client private keys, run '{setup_cmd}' first")
+ config_bail!("Unsubmitted client private keys, run '{setup_cmd}' first")
}
- let bank_keys = load_bank_keys(cfg.bank.as_ref())?;
+ let bank_keys = load_bank_keys(cfg.bank.as_ref()).map_err(CfgErr::custom)?;
let Some(bank_keys) = bank_keys else {
- bail!(
+ config_bail!(
"Missing bank public keys file at '{}', run '{setup_cmd}' first",
cfg.bank
)
};
if !bank_keys.accepted {
- bail!("Unaccepted bank public keys, run '{setup_cmd}' until accepting the bank keys")
+ config_bail!("Unaccepted bank public keys, run '{setup_cmd}' until accepting the bank keys")
}
Ok((client_keys, bank_keys))
}
diff --git a/libeufin-ebisync/src/config.rs b/libeufin-ebisync/src/config.rs
@@ -31,14 +31,14 @@ use taler_api::{
config::{AuthCfg, DbCfg},
};
use taler_common::{
- config::{Config, Section, ValueErr, parser::ConfigSource},
+ config::{CfgErr, Config, Section, parser::ConfigSource},
map_config,
};
pub const CONFIG_SOURCE: ConfigSource =
ConfigSource::new("libeufin-ebisync", "ebisync", "libeufin-ebisync");
-pub fn parse_db_cfg(cfg: &Config) -> Result<DbCfg, ValueErr> {
+pub fn parse_db_cfg(cfg: &Config) -> Result<DbCfg, CfgErr> {
DbCfg::parse(cfg.section("ebisyncdb-postgres"))
}
@@ -48,7 +48,7 @@ pub struct EbisyncSetupCfg {
}
impl EbisyncSetupCfg {
- pub fn parse(cfg: &Config) -> Result<Self, ValueErr> {
+ pub fn parse(cfg: &Config) -> Result<Self, CfgErr> {
let s = cfg.section("ebisync-setup");
Ok(Self {
enc: s.hex("bank_encryption_pub_key_hash").opt()?,
@@ -80,7 +80,7 @@ pub struct EbisyncFetchCfg {
}
impl EbisyncFetchCfg {
- pub fn parse(cfg: &Config) -> Result<Self, ValueErr> {
+ pub fn parse(cfg: &Config) -> Result<Self, CfgErr> {
let s = cfg.section("ebisync-fetch");
Ok(Self {
frequency: s.duration("frequency").require()?,
@@ -101,7 +101,7 @@ pub struct EbisyncSubmitCfg {
}
impl EbisyncSubmitCfg {
- pub fn parse(cfg: &Config) -> Result<Self, ValueErr> {
+ pub fn parse(cfg: &Config) -> Result<Self, CfgErr> {
let s = cfg.section("ebisync-submit");
Ok(Self {
source: map_config!(s, "ebics file source", "source",
@@ -119,7 +119,7 @@ pub struct EbisyncServeCfg {
}
impl EbisyncServeCfg {
- pub fn parse(cfg: &Config) -> Result<Self, ValueErr> {
+ pub fn parse(cfg: &Config) -> Result<Self, CfgErr> {
let s = cfg.section("ebisync-httpd");
Ok(Self {
serve: Serve::parse(&s)?,
@@ -138,7 +138,7 @@ pub struct EbisyncHostCfg {
}
impl EbisyncHostCfg {
- pub fn parse(s: &Section) -> Result<Self, ValueErr> {
+ pub fn parse(s: &Section) -> Result<Self, CfgErr> {
Ok(Self {
base_url: s.url("host_base_url").require()?,
unix_path: s.path("UNIXPATH").opt()?,
@@ -172,7 +172,7 @@ pub struct EbisyncCfg<'a> {
}
impl<'a> EbisyncCfg<'a> {
- pub fn parse(cfg: &'a Config) -> Result<Self, ValueErr> {
+ pub fn parse(cfg: &'a Config) -> Result<Self, CfgErr> {
let s = cfg.section("ebisync");
Ok(Self {
host: EbisyncHostCfg::parse(&s)?,
@@ -187,7 +187,7 @@ impl<'a> EbisyncCfg<'a> {
})
}
- pub fn fetch(&self) -> Result<&EbisyncFetchCfg, ValueErr> {
+ pub fn fetch(&self) -> Result<&EbisyncFetchCfg, CfgErr> {
// TODO use get_or_try_init when stable
if let Some(fetch) = self.fetch.get() {
return Ok(fetch);
@@ -197,7 +197,7 @@ impl<'a> EbisyncCfg<'a> {
Ok(self.fetch.get().unwrap())
}
- pub fn submit(&self) -> Result<&EbisyncSubmitCfg, ValueErr> {
+ pub fn submit(&self) -> Result<&EbisyncSubmitCfg, CfgErr> {
// TODO use get_or_try_init when stable
if let Some(submit) = self.submit.get() {
return Ok(submit);
@@ -207,7 +207,7 @@ impl<'a> EbisyncCfg<'a> {
Ok(self.submit.get().unwrap())
}
- pub fn serve(&self) -> Result<&EbisyncServeCfg, ValueErr> {
+ pub fn serve(&self) -> Result<&EbisyncServeCfg, CfgErr> {
// TODO use get_or_try_init when stable
if let Some(serve) = self.serve.get() {
return Ok(serve);
@@ -217,7 +217,7 @@ impl<'a> EbisyncCfg<'a> {
Ok(self.serve.get().unwrap())
}
- pub fn ebics_setup(&'a self) -> Result<EbicsSetupCfg<'a>, ValueErr> {
+ pub fn ebics_setup(&'a self) -> Result<EbicsSetupCfg<'a>, CfgErr> {
let setup = {
if let Some(setup) = self.setup.get() {
setup
@@ -238,7 +238,7 @@ impl<'a> EbisyncCfg<'a> {
})
}
- pub fn expect_full_keys(&self) -> anyhow::Result<(ClientKeys, BankKeys)> {
+ pub fn expect_full_keys(&self) -> Result<(ClientKeys, BankKeys), CfgErr> {
libeufin_ebics::keys::expect_full_keys(
&EbicsKeysCfg {
bank: &self.bank,
diff --git a/libeufin-nexus/src/config.rs b/libeufin-nexus/src/config.rs
@@ -35,7 +35,7 @@ use taler_api::{
config::{ApiCfg, DbCfg},
};
use taler_common::{
- config::{Config, ValueErr},
+ config::{CfgErr, Config},
types::{
amount::{Amount, Currency},
iban::IBAN,
@@ -45,7 +45,7 @@ use taler_common::{
};
use taler_macros::EnumMeta;
-pub fn parse_db_cfg(cfg: &Config) -> Result<DbCfg, ValueErr> {
+pub fn parse_db_cfg(cfg: &Config) -> Result<DbCfg, CfgErr> {
DbCfg::parse(cfg.section("libeufin-nexusdb-postgres"))
}
@@ -55,7 +55,7 @@ pub struct NexusKeysCfg {
}
impl NexusKeysCfg {
- pub fn parse(cfg: &Config) -> Result<Self, ValueErr> {
+ pub fn parse(cfg: &Config) -> Result<Self, CfgErr> {
let s = cfg.section("nexus-ebics");
Ok(Self {
bank: s.path("bank_public_keys_file").require()?,
@@ -81,7 +81,7 @@ pub struct NexusHostCfg {
}
impl NexusHostCfg {
- pub fn parse(cfg: &Config) -> Result<Self, ValueErr> {
+ pub fn parse(cfg: &Config) -> Result<Self, CfgErr> {
let s = cfg.section("nexus-ebics");
Ok(Self {
base_url: s.url("host_base_url").require()?,
@@ -147,7 +147,7 @@ pub struct NexusFetchCfg {
}
impl NexusFetchCfg {
- pub fn parse(cfg: &Config, currency: &Currency) -> Result<Self, ValueErr> {
+ pub fn parse(cfg: &Config, currency: &Currency) -> Result<Self, CfgErr> {
let s = cfg.section("nexus-fetch");
Ok(Self {
@@ -176,7 +176,7 @@ pub struct NexusSubmitCfg {
}
impl NexusSubmitCfg {
- pub fn parse(cfg: &Config) -> Result<Self, ValueErr> {
+ pub fn parse(cfg: &Config) -> Result<Self, CfgErr> {
let s = cfg.section("nexus-submit");
Ok(Self {
@@ -195,7 +195,7 @@ pub struct NexusEbicsConfig {
}
impl NexusEbicsConfig {
- pub fn parse(cfg: &Config) -> Result<Self, ValueErr> {
+ pub fn parse(cfg: &Config) -> Result<Self, CfgErr> {
let s = cfg.section("nexus-ebics");
Ok(Self {
account: FullIbanPayto::new(
@@ -217,7 +217,7 @@ pub struct NexusSetupConfig {
}
impl NexusSetupConfig {
- pub fn parse(cfg: &Config) -> Result<Self, ValueErr> {
+ pub fn parse(cfg: &Config) -> Result<Self, CfgErr> {
let s = cfg.section("nexus-setup");
Ok(Self {
enc: s.hex("bank_encryption_pub_key_hash").opt()?,
@@ -244,7 +244,7 @@ pub struct NexusCfg {
}
impl<'a> NexusCfg {
- pub fn parse(cfg: &Config) -> Result<Self, ValueErr> {
+ pub fn parse(cfg: &Config) -> Result<Self, CfgErr> {
let s = cfg.section("nexus-ebics");
Ok(Self {
currency: s.currency("currency").require()?,
@@ -264,7 +264,7 @@ impl<'a> NexusCfg {
})
}
- pub fn keys(&self) -> Result<&NexusKeysCfg, ValueErr> {
+ pub fn keys(&self) -> Result<&NexusKeysCfg, CfgErr> {
// TODO use get_or_try_init when stable
if let Some(keys) = self.keys.get() {
return Ok(keys);
@@ -274,7 +274,7 @@ impl<'a> NexusCfg {
Ok(self.keys.get().unwrap())
}
- pub fn host(&self) -> Result<&NexusHostCfg, ValueErr> {
+ pub fn host(&self) -> Result<&NexusHostCfg, CfgErr> {
// TODO use get_or_try_init when stable
if let Some(host) = self.host.get() {
return Ok(host);
@@ -284,7 +284,7 @@ impl<'a> NexusCfg {
Ok(self.host.get().unwrap())
}
- pub fn fetch(&self) -> Result<&NexusFetchCfg, ValueErr> {
+ pub fn fetch(&self) -> Result<&NexusFetchCfg, CfgErr> {
// TODO use get_or_try_init when stable
if let Some(fetch) = self.fetch.get() {
return Ok(fetch);
@@ -294,7 +294,7 @@ impl<'a> NexusCfg {
Ok(self.fetch.get().unwrap())
}
- pub fn submit(&self) -> Result<&NexusSubmitCfg, ValueErr> {
+ pub fn submit(&self) -> Result<&NexusSubmitCfg, CfgErr> {
// TODO use get_or_try_init when stable
if let Some(submit) = self.submit.get() {
return Ok(submit);
@@ -304,7 +304,7 @@ impl<'a> NexusCfg {
Ok(self.submit.get().unwrap())
}
- pub fn ebics(&self) -> Result<&NexusEbicsConfig, ValueErr> {
+ pub fn ebics(&self) -> Result<&NexusEbicsConfig, CfgErr> {
// TODO use get_or_try_init when stable
if let Some(ebics) = self.ebics.get() {
return Ok(ebics);
@@ -314,7 +314,7 @@ impl<'a> NexusCfg {
Ok(self.ebics.get().unwrap())
}
- pub fn setup(&self) -> Result<&NexusSetupConfig, ValueErr> {
+ pub fn setup(&self) -> Result<&NexusSetupConfig, CfgErr> {
// TODO use get_or_try_init when stable
if let Some(setup) = self.setup.get() {
return Ok(setup);
@@ -324,7 +324,7 @@ impl<'a> NexusCfg {
Ok(self.setup.get().unwrap())
}
- pub fn ingest(&self) -> Result<NexusIngestCfg, ValueErr> {
+ pub fn ingest(&self) -> Result<NexusIngestCfg, CfgErr> {
let fetch = self.fetch()?;
Ok(NexusIngestCfg {
account_type: self.account_type,
@@ -337,7 +337,7 @@ impl<'a> NexusCfg {
})
}
- pub fn ebics_setup(&'a self) -> Result<EbicsSetupCfg<'a>, ValueErr> {
+ pub fn ebics_setup(&'a self) -> Result<EbicsSetupCfg<'a>, CfgErr> {
let setup = self.setup()?;
Ok(EbicsSetupCfg {
keys: self.keys()?.ebics(),
@@ -347,7 +347,7 @@ impl<'a> NexusCfg {
})
}
- pub fn expect_full_keys(&self) -> anyhow::Result<(ClientKeys, BankKeys)> {
+ pub fn expect_full_keys(&self) -> Result<(ClientKeys, BankKeys), CfgErr> {
libeufin_ebics::keys::expect_full_keys(&self.keys()?.ebics(), "libeufin-nexus ebics-setup")
}
}