| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -2,6 +2,7 @@ use std::error::Error;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					use std::fmt::{Debug, Display, Formatter};
 | 
					 | 
					 | 
					 | 
					use std::fmt::{Debug, Display, Formatter};
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					use chrono::ParseError;
 | 
					 | 
					 | 
					 | 
					use chrono::ParseError;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					use leptos::ServerFnError;
 | 
					 | 
					 | 
					 | 
					use leptos::ServerFnError;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					use log::error;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd)]
 | 
					 | 
					 | 
					 | 
					#[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd)]
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					pub enum AppError {
 | 
					 | 
					 | 
					 | 
					pub enum AppError {
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -28,6 +29,10 @@ impl AppError {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    }
 | 
					 | 
					 | 
					 | 
					    }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					fn log_error(error: &dyn ToString) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    error!("Application error: {}", error.to_string());
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					impl Display for AppError {
 | 
					 | 
					 | 
					 | 
					impl Display for AppError {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
 | 
					 | 
					 | 
					 | 
					    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        write!(f, "{}", self.as_string())
 | 
					 | 
					 | 
					 | 
					        write!(f, "{}", self.as_string())
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -38,6 +43,7 @@ impl Error for AppError {}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					impl From<ServerFnError> for AppError {
 | 
					 | 
					 | 
					 | 
					impl From<ServerFnError> for AppError {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    fn from(value: ServerFnError) -> Self {
 | 
					 | 
					 | 
					 | 
					    fn from(value: ServerFnError) -> Self {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        log_error(&value);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        AppError::ServerError(value.to_string())
 | 
					 | 
					 | 
					 | 
					        AppError::ServerError(value.to_string())
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    }
 | 
					 | 
					 | 
					 | 
					    }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -45,12 +51,14 @@ impl From<ServerFnError> for AppError {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#[cfg(feature = "ssr")]
 | 
					 | 
					 | 
					 | 
					#[cfg(feature = "ssr")]
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					impl From<sqlx::Error> for AppError {
 | 
					 | 
					 | 
					 | 
					impl From<sqlx::Error> for AppError {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    fn from(value: sqlx::Error) -> Self {
 | 
					 | 
					 | 
					 | 
					    fn from(value: sqlx::Error) -> Self {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        log_error(&value);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        AppError::FatalError(value.to_string())
 | 
					 | 
					 | 
					 | 
					        AppError::FatalError(value.to_string())
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    }
 | 
					 | 
					 | 
					 | 
					    }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					impl From<ParseError> for AppError {
 | 
					 | 
					 | 
					 | 
					impl From<ParseError> for AppError {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    fn from(_value: ParseError) -> Self {
 | 
					 | 
					 | 
					 | 
					    fn from(value: ParseError) -> Self {
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        log_error(&value);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        AppError::HourParseError
 | 
					 | 
					 | 
					 | 
					        AppError::HourParseError
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    }
 | 
					 | 
					 | 
					 | 
					    }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -58,6 +66,7 @@ impl From<ParseError> for AppError {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#[cfg(feature = "ssr")]
 | 
					 | 
					 | 
					 | 
					#[cfg(feature = "ssr")]
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					impl From<lettre::address::AddressError> for AppError {
 | 
					 | 
					 | 
					 | 
					impl From<lettre::address::AddressError> for AppError {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    fn from(value: lettre::address::AddressError) -> Self {
 | 
					 | 
					 | 
					 | 
					    fn from(value: lettre::address::AddressError) -> Self {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        log_error(&value);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        AppError::MailAddrParseErr(value.to_string())
 | 
					 | 
					 | 
					 | 
					        AppError::MailAddrParseErr(value.to_string())
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    }
 | 
					 | 
					 | 
					 | 
					    }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -65,6 +74,7 @@ impl From<lettre::address::AddressError> for AppError {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#[cfg(feature = "ssr")]
 | 
					 | 
					 | 
					 | 
					#[cfg(feature = "ssr")]
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					impl From<lettre::error::Error> for AppError {
 | 
					 | 
					 | 
					 | 
					impl From<lettre::error::Error> for AppError {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    fn from(value: lettre::error::Error) -> Self {
 | 
					 | 
					 | 
					 | 
					    fn from(value: lettre::error::Error) -> Self {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        log_error(&value);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        AppError::MailSendError(value.to_string())
 | 
					 | 
					 | 
					 | 
					        AppError::MailSendError(value.to_string())
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    }
 | 
					 | 
					 | 
					 | 
					    }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -72,6 +82,7 @@ impl From<lettre::error::Error> for AppError {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#[cfg(feature = "ssr")]
 | 
					 | 
					 | 
					 | 
					#[cfg(feature = "ssr")]
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					impl From<lettre::transport::smtp::Error> for AppError {
 | 
					 | 
					 | 
					 | 
					impl From<lettre::transport::smtp::Error> for AppError {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    fn from(value: lettre::transport::smtp::Error) -> Self {
 | 
					 | 
					 | 
					 | 
					    fn from(value: lettre::transport::smtp::Error) -> Self {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        log_error(&value);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        AppError::MailSendError(value.to_string())
 | 
					 | 
					 | 
					 | 
					        AppError::MailSendError(value.to_string())
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    }
 | 
					 | 
					 | 
					 | 
					    }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -79,6 +90,7 @@ impl From<lettre::transport::smtp::Error> for AppError {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#[cfg(feature = "ssr")]
 | 
					 | 
					 | 
					 | 
					#[cfg(feature = "ssr")]
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					impl From<lettre::transport::file::Error> for AppError {
 | 
					 | 
					 | 
					 | 
					impl From<lettre::transport::file::Error> for AppError {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    fn from(value: lettre::transport::file::Error) -> Self {
 | 
					 | 
					 | 
					 | 
					    fn from(value: lettre::transport::file::Error) -> Self {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        log_error(&value);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        AppError::MailSendError(value.to_string())
 | 
					 | 
					 | 
					 | 
					        AppError::MailSendError(value.to_string())
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    }
 | 
					 | 
					 | 
					 | 
					    }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -86,6 +98,7 @@ impl From<lettre::transport::file::Error> for AppError {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#[cfg(feature = "ssr")]
 | 
					 | 
					 | 
					 | 
					#[cfg(feature = "ssr")]
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					impl From<std::io::Error> for AppError {
 | 
					 | 
					 | 
					 | 
					impl From<std::io::Error> for AppError {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    fn from(value: std::io::Error) -> Self {
 | 
					 | 
					 | 
					 | 
					    fn from(value: std::io::Error) -> Self {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        log_error(&value);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        AppError::FileIOError(value.to_string())
 | 
					 | 
					 | 
					 | 
					        AppError::FileIOError(value.to_string())
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    }
 | 
					 | 
					 | 
					 | 
					    }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 |