Koucha/koucha/src/bin/webapi/routes/mod.rs
2026-05-12 21:07:10 -07:00

49 lines
1.1 KiB
Rust

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<T> = Result<ApiResponse<T>, ApiError>;
pub struct ApiResponse<T>(pub StatusCode, pub T);
pub struct ApiError {
pub status: StatusCode,
pub error: &'static str,
pub message: String,
}
pub fn router() -> Router<AppState> {
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<T: Serialize> IntoResponse for ApiResponse<T> {
fn into_response(self) -> axum::response::Response {
(self.0, Json(self.1)).into_response()
}
}