#[cfg(all(feature = "server", feature = "extras"))]
fn main() {
use mashrl::{
extras::serve_file,
http::{Body, Headers, Request, Response, ResponseCode},
server::{BoxedDynRead, open_http_server},
};
let port: u16 = 6767;
let address = format!("127.0.0.1:{port}");
let protocol = "http";
eprintln!("Live at {protocol}://{address}");
open_http_server(address, |request| -> Response<BoxedDynRead> {
use std::fmt::Write;
let Request { method, path, headers, body: _request_body } = request;
let method: &str = &method.0;
let path: &str = &path;
if let "GET" = method
&& let "/index.html" = path
{
serve_file(std::path::Path::new("examples/index.html"))
} else if let "POST" = method
&& let "/content.json" = path
{
serve_file(std::path::Path::new("examples/content.json"))
} else {
let mut body = format!("method={method:?} path={path:?}");
writeln!(&mut body).unwrap();
for (key, value) in &headers {
writeln!(&mut body, "{key}: {value}").unwrap();
}
writeln!(&mut body, "--- end ---").unwrap();
let cursor = std::io::Cursor::new(body.into_bytes());
Response {
code: ResponseCode::OK,
headers: Headers::empty(),
body: Box::new(cursor),
}
}
});
}
#[cfg(not(all(feature = "server", feature = "extras")))]
fn main() {
panic!("requires server and extras features")
}