Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/pgiii/nucleus-http

Rust Web Framework for WebApps and Servers
https://github.com/pgiii/nucleus-http

html http http-server rust web web-framework website

Last synced: about 1 month ago
JSON representation

Rust Web Framework for WebApps and Servers

Awesome Lists containing this project

README

        

# nucleus-http
Rust Web frame work

## Basic Example With State and Serving Static Files
``` rust
use nucleus_http::{
request::Request,
routes::{Route, Router},
Server,
};
use std::sync::{Arc, RwLock};
use tracing_subscriber::prelude::*;
use tracing_subscriber::{fmt, EnvFilter};

#[derive(Debug, Clone)]
struct AppState {
greeting: String,
bye: String,
views: Arc>,
}

#[tokio::main]
async fn main() -> tokio::io::Result<()> {
let fmt_layer = fmt::layer()
.with_target(false)
.with_thread_names(true)
.pretty();
let filter_layer = EnvFilter::try_from_default_env()
.or_else(|_| EnvFilter::try_new("debug"))
.unwrap();
tracing_subscriber::registry()
.with(filter_layer)
.with(fmt_layer)
.init();
let listener_ip = "0.0.0.0:7878";
log::info!("Listening on {listener_ip}");

let state = AppState {
greeting: "HI".to_owned(),
bye: "Bye".to_owned(),
views: Arc::new(RwLock::new(0)),
};
let mut router = Router::new(state);
let route = Route::get("/state", print_greeting);
router.add_route(route).await;
router.add_route(Route::get("/hello", get)).await;
router.add_route(Route::get_static("/", "index.html")).await;
let server = Server::bind(listener_ip, router.clone(), "./").await?;
server.serve().await.unwrap();
Ok(())
}

async fn print_greeting(state: AppState, request: Request) -> Result {
let mut views_write = state.views.write().unwrap();
let response = format!(
"{} {} and {}, Viewed: {}",
state.greeting,
request.path(),
state.bye,
views_write
);
*views_write += 1;
Ok(response)
}

async fn get(_: AppState, _: Request) -> Result {
Ok("Hello From Sync Func".to_string())
}
```