use goish::prelude::*;
fn main() {
http::HandleFunc("/hello", |w, r| {
Fprintf!(w, "hello, world -- you asked for %s", r.URL.Path);
});
http::HandleFunc("/echo", |w, r| {
let msg = r.FormValue("msg");
if msg.is_empty() {
w.WriteHeader(http::StatusBadRequest);
let _ = w.Write(b"missing ?msg=");
return;
}
Fprintf!(w, "echo: %s", msg);
});
let addr = "127.0.0.1:8080";
let srv = http::Server::new(addr, http::ServeMux::new());
let _ = srv; let server = go!{
let err = http::ListenAndServe(addr, nil);
if err != nil { Println!("server exit:", err); }
};
Println!("server: listening on", addr);
time::Sleep(time::Millisecond * 100i64);
for (path, label) in [
("/hello", "/hello "),
("/echo?msg=howdy", "/echo?msg=...."),
("/missing", "/missing "),
] {
let url = Sprintf!("http://%s%s", addr, path);
let (resp, err) = http::Get(&url);
if err != nil {
Println!("client error:", err);
continue;
}
let body = resp.Body.String();
Printf!("client: GET %s -> %3d %q\n", label, resp.StatusCode, body);
}
Println!("shutdown after demo round-trips");
drop(server);
}