| 74 | type RouterState = Arc<InnerRouterState>; |
| 75 | |
| 76 | pub async fn run_http_server( |
| 77 | conf: crate::BrokerConfig, |
| 78 | discord_state: Arc<InMemoryCache>, |
| 79 | ready: Arc<AtomicBool>, |
| 80 | broker_handle: BrokerHandle, |
| 81 | ) { |
| 82 | let app = Router::new() |
| 83 | // .route("/guilds/:guild_id/stream_events", get(handle_stream_events)) |
| 84 | .route("/guilds/:guild_id", get(handle_get_guild)) |
| 85 | .route( |
| 86 | "/guilds/:guild_id/voice_states", |
| 87 | get(handle_get_guild_voice_states), |
| 88 | ) |
| 89 | .route("/guilds/:guild_id/emojis", get(handle_get_emojis)) |
| 90 | .route("/guilds/:guild_id/channels", get(handle_get_channels)) |
| 91 | .route( |
| 92 | "/guilds/:guild_id/channels/:channel_id", |
| 93 | get(handle_get_channel), |
| 94 | ) |
| 95 | .route("/guilds/:guild_id/members", get(handle_get_members)) |
| 96 | .route("/guilds/:guild_id/roles", get(handle_get_roles)) |
| 97 | .route("/guilds/:guild_id/roles/:role_id", get(handle_get_role)) |
| 98 | .route("/connected_guilds", get(handle_get_connected_guilds)) |
| 99 | .with_state(RouterState::new(InnerRouterState { |
| 100 | broker_handle, |
| 101 | discord_state, |
| 102 | ready_tracker: ready, |
| 103 | })) |
| 104 | .layer(axum_metrics_layer::MetricsLayer { |
| 105 | name_prefix: "bl.broker", |
| 106 | }); |
| 107 | |
| 108 | // let make_service = app.into_make_service(); |
| 109 | |
| 110 | // run it with hyper on configured address |
| 111 | info!("Starting hype on address: {}", conf.http_api_listen_addr); |
| 112 | |
| 113 | let listener = tokio::net::TcpListener::bind(conf.http_api_listen_addr) |
| 114 | .await |
| 115 | .unwrap(); |
| 116 | axum::serve(listener, app).await.unwrap(); |
| 117 | } |
| 118 | |
| 119 | async fn handle_get_guild( |
| 120 | Path(guild_id_u): Path<u64>, |