1#![doc = include_str!("../README.md")]
2
3mod abort;
4mod dependency_provider;
5mod inject;
6mod into_response;
7mod minfac_extensions;
8mod routing;
9mod web_component;
10mod ws;
11
12use std::net::SocketAddr;
13
14use futures::{channel::oneshot, future::Shared};
15
16pub use abort::AbortServiceInterface;
17pub use axum::{
18 body::{Body, Bytes},
19 http,
20 response::{sse, AppendHeaders, Html, IntoResponse, Response},
21};
22pub use dependency_provider::DependencyProvider;
23pub use into_response::*;
24pub use minfac_extensions::ServiceCollectionExtensions;
25pub use routing::{MethodRouter, Router};
26pub use web_component::*;
27
28pub mod extract {
29 pub struct Inject<T: minfac::Resolvable>(pub T::ItemPreChecked);
30 pub struct InjectRegistered<T: std::any::Any>(pub T);
31 pub use super::abort::Abort;
32 pub struct InjectAll<T: std::any::Any>(pub ServiceIterator<T>);
33 pub use axum::body::Body;
34 pub use axum::extract::{FromRequestParts, Json, Path, Query};
35 use minfac::ServiceIterator;
36
37 pub mod ws {
38 pub use super::super::ws::{Dropper, WebSocketDropperService, WebSocketUpgrade};
39 pub use axum::extract::ws::{Message, WebSocket};
40 }
41}
42
43pub type MinfacRouter = pilatus::OnceExtractor<axum::Router>;
44
45pub struct Stats {
46 socket: Shared<oneshot::Receiver<SocketAddr>>,
47}
48impl Stats {
49 pub fn new(socket: Shared<oneshot::Receiver<SocketAddr>>) -> Self {
50 Self { socket }
51 }
52 pub async fn socket_addr(&self) -> SocketAddr {
53 self.socket
54 .clone()
55 .await
56 .expect("always resolved when server started")
57 }
58}