nucleus-http

Rust Web frame work

Basic Example With State and Serving Static Files

``` rust use nucleushttp::{ request::Request, routes::{Route, Router}, Server, }; use std::sync::{Arc, RwLock}; use tracingsubscriber::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 fmtlayer = fmt::layer() .withtarget(false) .withthreadnames(true) .pretty(); let filterlayer = EnvFilter::tryfromdefaultenv() .orelse(|| EnvFilter::trynew("debug")) .unwrap(); tracingsubscriber::registry() .with(filterlayer) .with(fmtlayer) .init(); let listenerip = "0.0.0.0:7878"; log::info!("Listening on {listenerip}");

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 printgreeting(state: AppState, request: Request) -> Result { let mut viewswrite = state.views.write().unwrap(); let response = format!( "{} {} and {}, Viewed: {}", state.greeting, request.path(), state.bye, viewswrite ); *viewswrite += 1; Ok(response) }

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