1use std::fmt;
4
5pub type SsrResult<T> = Result<T, SsrError>;
7
8#[derive(Debug)]
10pub enum SsrError {
11 BundleLoad(String),
13
14 V8Init(String),
16
17 JsExecution(String),
19
20 Timeout,
22
23 Cache(String),
25
26 PoolFull,
28
29 Config(String),
31
32 Template(String),
34
35 Io(std::io::Error),
37}
38
39impl fmt::Display for SsrError {
40 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
41 match self {
42 SsrError::BundleLoad(msg) => write!(f, "Bundle load error: {}", msg),
43 SsrError::V8Init(msg) => write!(f, "V8 initialization error: {}", msg),
44 SsrError::JsExecution(msg) => write!(f, "JavaScript execution error: {}", msg),
45 SsrError::Timeout => write!(f, "Render timeout"),
46 SsrError::Cache(msg) => write!(f, "Cache error: {}", msg),
47 SsrError::PoolFull => write!(f, "V8 pool is full, request rejected"),
48 SsrError::Template(msg) => write!(f, "Template error: {}", msg),
49 SsrError::Config(msg) => write!(f, "Configuration error: {}", msg),
50 SsrError::Io(err) => write!(f, "IO error: {}", err),
51 }
52 }
53}
54
55impl std::error::Error for SsrError {
56 fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
57 match self {
58 SsrError::Io(err) => Some(err),
59 _ => None,
60 }
61 }
62}
63
64impl From<std::io::Error> for SsrError {
65 fn from(err: std::io::Error) -> Self {
66 SsrError::Io(err)
67 }
68}