use thiserror::Error;
#[derive(Error, Debug)]
pub enum OtlpError {
#[error("Configuration error: {0}")]
Config(#[from] OtlpConfigError),
#[error("Export error: {0}")]
Export(#[from] OtlpExportError),
#[error("I/O error: {0}")]
Io(#[from] std::io::Error),
#[error("Server error: {0}")]
Server(#[from] OtlpServerError),
}
#[derive(Error, Debug)]
pub enum OtlpConfigError {
#[error("Invalid output directory: {0}")]
InvalidOutputDir(String),
#[error("Invalid interval: {0}")]
InvalidInterval(String),
#[error("Missing required field: {0}")]
MissingRequiredField(String),
#[error("Invalid URL format: {0}")]
InvalidUrl(String),
#[error("Configuration validation failed: {0}")]
ValidationFailed(String),
}
#[derive(Error, Debug)]
pub enum OtlpExportError {
#[error("Message buffer is full")]
BufferFull,
#[error("Serialization error: {0}")]
SerializationError(String),
#[error("Remote forwarding failed: {0}")]
ForwardingError(String),
#[error("Arrow IPC conversion error: {0}")]
ArrowConversionError(String),
#[error("Cleanup error: {0}")]
CleanupError(String),
#[error("Format conversion error: {0}")]
FormatConversionError(String),
}
#[allow(clippy::enum_variant_names)]
#[derive(Error, Debug)]
pub enum OtlpServerError {
#[error("Failed to bind server address: {0}")]
BindError(String),
#[error("Failed to start server: {0}")]
StartupError(String),
#[error("Server shutdown error: {0}")]
ShutdownError(String),
}
impl From<anyhow::Error> for OtlpError {
fn from(err: anyhow::Error) -> Self {
OtlpError::Io(std::io::Error::other(err.to_string()))
}
}