actix_web_nextjs/
error.rs

1use std::io;
2
3use actix_web::ResponseError;
4use tracing::error;
5
6/// Custom error type for SPA service
7#[derive(thiserror::Error, Debug)]
8pub enum SpaError {
9    #[error("File system error: {0}")]
10    FileSystemError(#[from] io::Error),
11    #[error("Failed to serve file: {0}")]
12    ServeFileError(#[from] actix_web::Error),
13    #[error("Build manifest not found")]
14    BuildManifestNotFound,
15    #[error("Path conversion error")]
16    PathConversionError,
17    #[error("Glob pattern error: {0}")]
18    GlobPatternError(#[from] glob::PatternError),
19}
20
21impl ResponseError for SpaError {}
22
23impl From<anyhow::Error> for SpaError {
24    fn from(error: anyhow::Error) -> Self {
25        error!("An unexpected error occurred: {:?}", error);
26        SpaError::ServeFileError(actix_web::Error::from(Box::<dyn std::error::Error>::from(error)))
27    }
28}