/// Generic response builder for handlers /// /// Reduces complexity by centralizing response formatting logic. use actix_web::HttpResponse; use serde_json::json; /// Build a success response (200 OK) pub fn success_response(data: T) -> HttpResponse { HttpResponse::Ok().json(data) } /// Build an error response (400 Bad Request) pub fn bad_request(error: &str) -> HttpResponse { HttpResponse::BadRequest().json(json!({ "error": error })) } /// Build a not found response (404 Not Found) pub fn not_found(error: &str) -> HttpResponse { HttpResponse::NotFound().json(json!({ "error": error })) } /// Build an internal server error response (500) pub fn internal_error(error: &str) -> HttpResponse { HttpResponse::InternalServerError().json(json!({ "error": error })) } /// Build an unauthorized response (401) pub fn unauthorized(error: &str) -> HttpResponse { HttpResponse::Unauthorized().json(json!({ "error": error })) } #[cfg(test)] mod tests { use super::*; #[test] fn test_success_response_builds() { let resp = success_response(json!({"status": "ok"})); assert_eq!(resp.status(), 200); } #[test] fn test_bad_request_response_builds() { let resp = bad_request("Invalid input"); assert_eq!(resp.status(), 400); } #[test] fn test_not_found_response_builds() { let resp = not_found("Not found"); assert_eq!(resp.status(), 404); } #[test] fn test_internal_error_response_builds() { let resp = internal_error("Server error"); assert_eq!(resp.status(), 500); } }