-
InfluxDB
Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
-
bloom
The simplest way to de-Google your life and business: Inbox, Calendar, Files, Contacts & much more (by skerkour)
-
SaaSHub
SaaSHub - Software Alternatives and Reviews. SaaSHub helps you find the best software and product alternatives
My heart goes to axum. I find it has the cleanest API, it is built on top of hyper, which is (certainly) the most tested and reliable HTTP stack in Rust, and because it is developed by tokio's team.
tide
rouille
iron
#[derive(Clone)] struct MyMiddleware { inner: S, } impl Service> for MyMiddleware where S: Service, Response = Response> + Clone + Send + 'static, S::Future: Send + 'static, { type Response = S::Response; type Error = S::Error; type Future = BoxFuture<'static, Result>; fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll> { self.inner.poll_ready(cx) } fn call(&mut self, mut req: Request) -> Self::Future { println!("before"); // best practice is to clone the inner service like this // see https://github.com/tower-rs/tower/issues/547 for details let clone = self.inner.clone(); let mut inner = std::mem::replace(&mut self.inner, clone); Box::pin(async move { let res: Response = inner.call(req).await?; println!("after"); Ok(res) }) } } fn main() { let app = Router::new() .route("/", get(|| async { /* ... */ })) .layer(layer_fn(|inner| MyMiddleware { inner })); }
For larger projects, I think that actix-web is the incontestable winner. That's why it's my choice for Bloom.
Want to learn Rust, Cybersecurity and applied Cryptography? Take a look at my book Black Hat Rust!