From b7f09da234c7065e84c4ee814e919ef6a194a5d9 Mon Sep 17 00:00:00 2001 From: librelois <c@elo.tf> Date: Wed, 17 Mar 2021 23:57:12 +0100 Subject: [PATCH] [feat] gva:bca: impl Error for BcaReqExecError --- Cargo.lock | 1 + rust-libs/modules/gva/bca/src/lib.rs | 26 +++++++++++----------- rust-libs/modules/gva/bca/types/Cargo.toml | 1 + rust-libs/modules/gva/bca/types/src/lib.rs | 11 ++++++--- 4 files changed, 23 insertions(+), 16 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 58e18e952..8a925ab9a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1166,6 +1166,7 @@ dependencies = [ "bincode", "dubp", "serde", + "thiserror", ] [[package]] diff --git a/rust-libs/modules/gva/bca/src/lib.rs b/rust-libs/modules/gva/bca/src/lib.rs index b4928cee5..e615dbd11 100644 --- a/rust-libs/modules/gva/bca/src/lib.rs +++ b/rust-libs/modules/gva/bca/src/lib.rs @@ -34,7 +34,7 @@ use async_bincode::AsyncBincodeReader; use bincode::Options as _; use dubp::crypto::keys::{ed25519::Ed25519KeyPair, Signator}; use duniter_bca_types::{ - bincode_opts, BcaReq, BcaReqTypeV0, BcaResp, BcaRespTypeV0, BcaRespV0, ReqExecError, + bincode_opts, BcaReq, BcaReqExecError, BcaReqTypeV0, BcaResp, BcaRespTypeV0, BcaRespV0, }; use duniter_dbs::{FileBackend, SharedDbs}; use futures::{prelude::stream::FuturesUnordered, StreamExt, TryStream, TryStreamExt}; @@ -146,11 +146,11 @@ impl BcaExecutor { let resp = match req_res { Ok(resp) => Ok(resp), Err(e) => Err(if e.is_cancelled() { - ReqExecError::Cancelled + BcaReqExecError::Cancelled } else if e.is_panic() { - ReqExecError::Panic + BcaReqExecError::Panic } else { - ReqExecError::Unknown + BcaReqExecError::Unknown }), }; let mut resp_buffer = RespBytes::new(); @@ -163,8 +163,8 @@ impl BcaExecutor { .await } Err(e) => { - let req_res: Result<BcaResp, ReqExecError> = - Err(ReqExecError::InvalidReq(e.to_string())); + let req_res: Result<BcaResp, BcaReqExecError> = + Err(BcaReqExecError::InvalidReq(e.to_string())); let mut resp_buffer = RespBytes::new(); bincode_opts() .serialize_into(&mut resp_buffer, &req_res) @@ -294,8 +294,8 @@ mod tests { //println!("bytes={:?}", bytes); let bytes_res = bca_executor.execute::<&[u8]>(&bytes[..], false).await; //println!("bytes_res={:?}", bytes_res); - let bca_res: Vec<Result<BcaResp, ReqExecError>> = - AsyncBincodeReader::<_, Result<BcaResp, ReqExecError>>::from(&bytes_res[..]) + let bca_res: Vec<Result<BcaResp, BcaReqExecError>> = + AsyncBincodeReader::<_, Result<BcaResp, BcaReqExecError>>::from(&bytes_res[..]) .try_collect::<Vec<_>>() .await?; @@ -332,14 +332,14 @@ mod tests { //println!("bytes={:?}", bytes); let bytes_res = bca_executor.execute::<&[u8]>(&bytes[..], false).await; //println!("bytes_res={:?}", bytes_res); - let bca_res: Vec<Result<BcaResp, ReqExecError>> = - AsyncBincodeReader::<_, Result<BcaResp, ReqExecError>>::from(&bytes_res[..]) + let bca_res: Vec<Result<BcaResp, BcaReqExecError>> = + AsyncBincodeReader::<_, Result<BcaResp, BcaReqExecError>>::from(&bytes_res[..]) .try_collect::<Vec<_>>() .await?; assert_eq!( bca_res, - vec![Err(ReqExecError::InvalidReq( + vec![Err(BcaReqExecError::InvalidReq( "io error: unexpected end of file".to_owned() ))] ); @@ -376,8 +376,8 @@ mod tests { //println!("bytes={:?}", bytes); let bytes_res = bca_executor.execute::<&[u8]>(&bytes[..], false).await; //println!("bytes_res={:?}", bytes_res); - let bca_res: Vec<Result<BcaResp, ReqExecError>> = - AsyncBincodeReader::<_, Result<BcaResp, ReqExecError>>::from(&bytes_res[..]) + let bca_res: Vec<Result<BcaResp, BcaReqExecError>> = + AsyncBincodeReader::<_, Result<BcaResp, BcaReqExecError>>::from(&bytes_res[..]) .try_collect::<Vec<_>>() .await?; diff --git a/rust-libs/modules/gva/bca/types/Cargo.toml b/rust-libs/modules/gva/bca/types/Cargo.toml index 8c6c10bd9..69634c022 100644 --- a/rust-libs/modules/gva/bca/types/Cargo.toml +++ b/rust-libs/modules/gva/bca/types/Cargo.toml @@ -9,6 +9,7 @@ edition = "2018" bincode = "1.3" dubp = { version = "0.49.0" } serde = { version = "1.0.105", features = ["derive"] } +thiserror = "1.0.20" [features] default = ["duniter"] diff --git a/rust-libs/modules/gva/bca/types/src/lib.rs b/rust-libs/modules/gva/bca/types/src/lib.rs index 7b614366e..fd00de4f3 100644 --- a/rust-libs/modules/gva/bca/types/src/lib.rs +++ b/rust-libs/modules/gva/bca/types/src/lib.rs @@ -31,6 +31,7 @@ use dubp::crypto::hashs::Hash; use dubp::crypto::keys::ed25519::{PublicKey, Signature}; use dubp::wallet::prelude::*; use serde::{Deserialize, Serialize}; +use thiserror::Error; pub fn bincode_opts() -> impl bincode::Options { bincode::options() @@ -83,12 +84,16 @@ pub enum BcaRespTypeV0 { Pong, } -pub type BcaResult = Vec<Result<BcaResp, ReqExecError>>; +pub type BcaResult = Vec<Result<BcaResp, BcaReqExecError>>; -#[derive(Clone, Debug, Deserialize, PartialEq, Eq, Serialize)] -pub enum ReqExecError { +#[derive(Clone, Debug, Deserialize, Error, PartialEq, Eq, Serialize)] +pub enum BcaReqExecError { + #[error("task cancelled")] Cancelled, + #[error("Invalid request: {0}")] InvalidReq(String), + #[error("task panicked")] Panic, + #[error("Unknown error")] Unknown, } -- GitLab