refactor(server,common): introduce custom error types with thiserror and miette

This commit is contained in:
2026-02-11 16:29:59 +02:00
parent cda6024062
commit 818cfd5598
10 changed files with 134 additions and 61 deletions

View File

@@ -5,11 +5,15 @@ authors.workspace = true
edition.workspace = true
[dependencies]
miette.workspace = true
rcgen.workspace = true
rustls.workspace = true
serde.workspace = true
serde_json.workspace = true
strum.workspace = true
thiserror.workspace = true
tokio.workspace = true
toml.workspace = true
[dev-dependencies]
cargo-husky.workspace = true

65
common/src/error.rs Normal file
View File

@@ -0,0 +1,65 @@
use miette::Diagnostic;
use thiserror::Error;
/// Result type using the common's custom error type.
pub type Result<T> = std::result::Result<T, Error>;
#[derive(Debug, Error, Diagnostic)]
pub enum Error {
/// File or network I/O error.
#[error(transparent)]
#[diagnostic(code(common::io_error))]
Io(#[from] std::io::Error),
#[error(transparent)]
#[diagnostic(code(common::rustls_error))]
Tls(#[from] rustls::Error),
/// TOML configuration file parse error.
#[error(transparent)]
#[diagnostic(code(common::toml_error))]
Toml(#[from] toml::de::Error),
#[error(transparent)]
#[diagnostic(code(common::json_error))]
Json(#[from] serde_json::Error),
#[error(transparent)]
#[diagnostic(code(common::rcgen_error))]
RCGen(#[from] rcgen::Error),
/// Configuration validation or missing required fields.
#[error("Config error: {0}")]
#[diagnostic(code(common::config_error))]
Config(String),
/// Invalid key exchange mode string.
#[error("Invalid mode: {0}")]
#[diagnostic(code(common::invalid_mode))]
InvalidMode(String),
/// Protocol-level error (malformed requests, unexpected responses).
#[error("Protocol error: {0}")]
#[diagnostic(code(common::protocol_error))]
Protocol(String),
}
impl Error {
/// Create an invalid mode error.
#[inline]
pub fn invalid_mode(error: impl Into<String>) -> Self {
Self::InvalidMode(error.into())
}
/// Create a config error.
#[inline]
pub fn config(error: impl Into<String>) -> Self {
Self::Config(error.into())
}
/// Create a protocol error.
#[inline]
pub fn protocol(error: impl Into<String>) -> Self {
Self::Protocol(error.into())
}
}

View File

@@ -1,8 +1,10 @@
//! Common types and utilities for the TLS benchmark harness.
pub mod cert;
pub mod error;
pub mod protocol;
pub use error::Error;
use serde::{Deserialize, Serialize};
use std::fmt;
use strum::{Display, EnumString};