use super::{
ConfigError, DatabaseError, NetworkError, SerializationError, StorageError, ValidationError,
};
use thiserror::Error;
#[derive(Error, Debug)]
pub enum BaseError {
#[error("AId error: {0}")]
Aid(#[from] crate::aid::credential::AidError),
#[error("Realm error: {0}")]
Realm(#[from] crate::realm::RealmError),
#[error("Identity service error: {message}")]
IdentityService { message: String },
#[error("Signaling service error: {message}")]
SignalingService { message: String },
#[error("Admin service error: {message}")]
ControlService { message: String },
#[error("TURN service error: {message}")]
TurnService { message: String },
#[error("STUN service error: {message}")]
StunService { message: String },
#[error("Configuration error: {0}")]
Config(#[from] ConfigError),
#[error("Network error: {0}")]
Network(#[from] NetworkError),
#[error("Database error: {0}")]
Database(#[from] DatabaseError),
#[error("Storage error: {0}")]
Storage(#[from] StorageError),
#[error("IO error: {0}")]
Io(#[from] std::io::Error),
#[error("Serialization error: {0}")]
Serialization(#[from] SerializationError),
#[error("Validation error: {0}")]
Validation(#[from] ValidationError),
#[error("General error: {message}")]
General { message: String },
#[error("Internal error: {message}")]
Internal { message: String },
}
impl BaseError {
pub fn general(message: impl Into<String>) -> Self {
Self::General {
message: message.into(),
}
}
pub fn internal(message: impl Into<String>) -> Self {
Self::Internal {
message: message.into(),
}
}
pub fn identity_service(message: impl Into<String>) -> Self {
Self::IdentityService {
message: message.into(),
}
}
pub fn signaling_service(message: impl Into<String>) -> Self {
Self::SignalingService {
message: message.into(),
}
}
pub fn control_service(message: impl Into<String>) -> Self {
Self::ControlService {
message: message.into(),
}
}
pub fn turn_service(message: impl Into<String>) -> Self {
Self::TurnService {
message: message.into(),
}
}
pub fn stun_service(message: impl Into<String>) -> Self {
Self::StunService {
message: message.into(),
}
}
}
pub type Result<T> = std::result::Result<T, BaseError>;