1use axum::{
7 extract::State,
8 routing::{get, post},
9 Json, Router,
10};
11
12use crate::rpc::RpcRouter;
13use crate::state::AppState;
14
15pub fn router() -> Router<AppState> {
16 Router::new()
17 .route("/", post(rpc_handler))
18 .route("/methods", get(list_methods))
19}
20
21async fn rpc_handler(
25 State(state): State<AppState>,
26 Json(body): Json<serde_json::Value>,
27) -> Json<serde_json::Value> {
28 let rpc = RpcRouter::new(state);
29 let response = rpc.handle_value(body).await;
30 Json(response)
31}
32
33async fn list_methods(State(state): State<AppState>) -> Json<serde_json::Value> {
35 let rpc = RpcRouter::new(state);
36 let methods = rpc.method_list();
37 Json(serde_json::json!({ "methods": methods }))
38}