use serde::Serialize; use serde_json::json; use axum::{ Json, Router, response::IntoResponse, routing::{ get, post, }, }; use reqwest::StatusCode; mod get_feeds; mod create_session; mod get_users; mod new_user; use crate::AppState; pub type ApiResult = Result, ApiError>; pub struct ApiResponse(pub StatusCode, pub T); pub struct ApiError { pub status: StatusCode, pub error: &'static str, pub message: String, } pub fn router() -> Router { Router::new() .route("/create_session", post(create_session::handler)) .route("/get_feeds", get(get_feeds::handler)) .route("/get_users", get(get_users::handler)) .route("/new_user", post(new_user::handler)) } impl IntoResponse for ApiError { fn into_response(self) -> axum::response::Response { let body = json!({ "error": self.error, "message": self.message }); (self.status, Json(body)).into_response() } } impl IntoResponse for ApiResponse { fn into_response(self) -> axum::response::Response { (self.0, Json(self.1)).into_response() } }