use bytes::Bytes;
use http_body_util::Full;
use hyper::{Method, Request, Response, StatusCode};
use hyperlite::{serve, success, BoxBody, BoxError, Router};
use serde::Serialize;
use std::net::SocketAddr;
use std::sync::Arc;
#[derive(Clone)]
struct AppState;
#[derive(Serialize)]
struct Greeting {
message: String,
}
async fn hello_handler(
_req: Request<BoxBody>,
_state: Arc<AppState>,
) -> Result<Response<Full<Bytes>>, BoxError> {
let greeting = Greeting {
message: "Hello, World!".to_string(),
};
Ok(success(StatusCode::OK, greeting))
}
#[tokio::main]
async fn main() -> Result<(), BoxError> {
let state = AppState;
let router = Router::new(state).route(
"/hello",
Method::GET,
Arc::new(|req, state| Box::pin(hello_handler(req, state))),
);
let addr: SocketAddr = "127.0.0.1:3000"
.parse()
.expect("valid socket address for example server");
println!("Server running on http://{addr}/hello");
serve(addr, router).await
}