fn main() {
use smol::{net::TcpListener, stream::StreamExt};
use std::sync::Arc;
use trillium_http::HttpContext;
smol::block_on(async {
let context = Arc::new(HttpContext::default());
let listener = TcpListener::bind("localhost:0").await.unwrap();
let local_addr = listener.local_addr().unwrap();
println!("listening on http://{local_addr}");
let server = smol::spawn({
let context = context.clone();
async move {
let mut incoming = context.swansong().interrupt(listener.incoming());
while let Some(Ok(stream)) = incoming.next().await {
smol::spawn(context.clone().run(stream, |mut conn| async move {
conn.set_response_body("hello world");
conn.set_status(200);
conn
}))
.detach()
}
}
});
use trillium_client::Client;
use trillium_smol::ClientConfig;
let client = Client::new(ClientConfig::default()).with_base(local_addr);
let mut client_conn = client.get("/").await.unwrap();
assert_eq!(client_conn.status().unwrap(), 200);
assert_eq!(
client_conn.response_body().read_string().await.unwrap(),
"hello world"
);
server.await;
})
}