49 lines
1.1 KiB
Rust
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()
|
|
}
|
|
}
|