generalbots/src/meet/webinar_api/error.rs
Rodrigo Rodriguez 5ea171d126
Some checks failed
BotServer CI / build (push) Failing after 1m34s
Refactor: Split large files into modular subdirectories
Split 20+ files over 1000 lines into focused subdirectories for better
maintainability and code organization. All changes maintain backward
compatibility through re-export wrappers.

Major splits:
- attendance/llm_assist.rs (2074→7 modules)
- basic/keywords/face_api.rs → face_api/ (7 modules)
- basic/keywords/file_operations.rs → file_ops/ (8 modules)
- basic/keywords/hear_talk.rs → hearing/ (6 modules)
- channels/wechat.rs → wechat/ (10 modules)
- channels/youtube.rs → youtube/ (5 modules)
- contacts/mod.rs → contacts_api/ (6 modules)
- core/bootstrap/mod.rs → bootstrap/ (5 modules)
- core/shared/admin.rs → admin_*.rs (5 modules)
- designer/canvas.rs → canvas_api/ (6 modules)
- designer/mod.rs → designer_api/ (6 modules)
- docs/handlers.rs → handlers_api/ (11 modules)
- drive/mod.rs → drive_handlers.rs, drive_types.rs
- learn/mod.rs → types.rs
- main.rs → main_module/ (7 modules)
- meet/webinar.rs → webinar_api/ (8 modules)
- paper/mod.rs → (10 modules)
- security/auth.rs → auth_api/ (7 modules)
- security/passkey.rs → (4 modules)
- sources/mod.rs → sources_api/ (5 modules)
- tasks/mod.rs → task_api/ (5 modules)

Stats: 38,040 deletions, 1,315 additions across 318 files

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-12 21:09:30 +00:00

54 lines
2.1 KiB
Rust

use axum::{http::StatusCode, response::IntoResponse};
#[derive(Debug, Clone)]
pub enum WebinarError {
DatabaseConnection,
NotFound,
NotAuthorized,
CreateFailed,
UpdateFailed,
JoinFailed,
InvalidState(String),
InvalidInput(String),
FeatureDisabled(String),
RegistrationNotRequired,
RegistrationFailed,
AlreadyRegistered,
MaxParticipantsReached,
}
impl std::fmt::Display for WebinarError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::DatabaseConnection => write!(f, "Database connection failed"),
Self::NotFound => write!(f, "Webinar not found"),
Self::NotAuthorized => write!(f, "Not authorized"),
Self::CreateFailed => write!(f, "Failed to create"),
Self::UpdateFailed => write!(f, "Failed to update"),
Self::JoinFailed => write!(f, "Failed to join"),
Self::InvalidState(msg) => write!(f, "Invalid state: {msg}"),
Self::InvalidInput(msg) => write!(f, "Invalid input: {msg}"),
Self::FeatureDisabled(msg) => write!(f, "Feature disabled: {msg}"),
Self::RegistrationNotRequired => write!(f, "Registration not required"),
Self::RegistrationFailed => write!(f, "Registration failed"),
Self::AlreadyRegistered => write!(f, "Already registered"),
Self::MaxParticipantsReached => write!(f, "Maximum participants reached"),
}
}
}
impl std::error::Error for WebinarError {}
impl IntoResponse for WebinarError {
fn into_response(self) -> axum::response::Response {
let status = match self {
Self::NotFound => StatusCode::NOT_FOUND,
Self::NotAuthorized => StatusCode::FORBIDDEN,
Self::AlreadyRegistered => StatusCode::CONFLICT,
Self::InvalidInput(_) | Self::InvalidState(_) => StatusCode::BAD_REQUEST,
Self::MaxParticipantsReached => StatusCode::SERVICE_UNAVAILABLE,
_ => StatusCode::INTERNAL_SERVER_ERROR,
};
(status, self.to_string()).into_response()
}
}