Skip to main content

mina_node_native/http_server/routes/
discovery.rs

1//! Discovery endpoints.
2//!
3//! - `GET /discovery/routing_table` - Get Kademlia routing table
4//! - `GET /discovery/bootstrap_stats` - Get bootstrap statistics
5
6use axum::{extract::State, Json};
7use utoipa_axum::{router::OpenApiRouter, routes};
8
9use mina_node::rpc::{
10    RpcDiscoveryBoostrapStatsResponse, RpcDiscoveryRoutingTableResponse, RpcRequest,
11};
12
13use crate::http_server::{AppResult, AppState};
14
15/// Discovery routes
16pub fn routes() -> OpenApiRouter<AppState> {
17    OpenApiRouter::new()
18        .routes(routes!(routing_table))
19        .routes(routes!(bootstrap_stats))
20}
21
22/// Kademlia routing table
23#[utoipa::path(
24    get,
25    path = "/discovery/routing_table",
26    tag = "discovery",
27    responses(
28        (status = 200, description = "Routing table")
29    )
30)]
31async fn routing_table(
32    State(state): State<AppState>,
33) -> AppResult<Json<RpcDiscoveryRoutingTableResponse>> {
34    jsonify_rpc!(state, RpcRequest::DiscoveryRoutingTable)
35}
36
37/// Bootstrap statistics
38#[utoipa::path(
39    get,
40    path = "/discovery/bootstrap_stats",
41    tag = "discovery",
42    responses(
43        (status = 200, description = "Bootstrap statistics")
44    )
45)]
46async fn bootstrap_stats(
47    State(state): State<AppState>,
48) -> AppResult<Json<RpcDiscoveryBoostrapStatsResponse>> {
49    jsonify_rpc!(state, RpcRequest::DiscoveryBoostrapStats)
50}