use std::fmt;
pub type SsrResult<T> = Result<T, SsrError>;
#[derive(Debug)]
pub enum SsrError {
BundleLoad(String),
V8Init(String),
JsExecution(String),
Timeout,
Cache(String),
PoolFull,
Config(String),
Template(String),
Io(std::io::Error),
}
impl fmt::Display for SsrError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
SsrError::BundleLoad(msg) => write!(f, "Bundle load error: {}", msg),
SsrError::V8Init(msg) => write!(f, "V8 initialization error: {}", msg),
SsrError::JsExecution(msg) => write!(f, "JavaScript execution error: {}", msg),
SsrError::Timeout => write!(f, "Render timeout"),
SsrError::Cache(msg) => write!(f, "Cache error: {}", msg),
SsrError::PoolFull => write!(f, "V8 pool is full, request rejected"),
SsrError::Template(msg) => write!(f, "Template error: {}", msg),
SsrError::Config(msg) => write!(f, "Configuration error: {}", msg),
SsrError::Io(err) => write!(f, "IO error: {}", err),
}
}
}
impl std::error::Error for SsrError {
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
match self {
SsrError::Io(err) => Some(err),
_ => None,
}
}
}
impl From<std::io::Error> for SsrError {
fn from(err: std::io::Error) -> Self {
SsrError::Io(err)
}
}