39 lines
1.0 KiB
Plaintext
39 lines
1.0 KiB
Plaintext
|
|
import net.http as http;
|
||
|
|
import logging as logging;
|
||
|
|
import json as json;
|
||
|
|
|
||
|
|
|
||
|
|
type ExampleResponse struct {
|
||
|
|
pub id: i32;
|
||
|
|
pub name: str;
|
||
|
|
pub email: str;
|
||
|
|
}
|
||
|
|
|
||
|
|
type Router struct {
|
||
|
|
logger: logging::Logger;
|
||
|
|
|
||
|
|
pub fn new(logger: logging::Logger): Router {
|
||
|
|
return Self{logger: logger};
|
||
|
|
}
|
||
|
|
|
||
|
|
pub fn get_user_data(self: Self, req: http.Request): IO[Result[http::Response, http::Error]] {
|
||
|
|
let response_data = ExampleResponse{
|
||
|
|
id: 4,
|
||
|
|
name: "Andrew",
|
||
|
|
email: "andrew@boringlang.com",
|
||
|
|
};
|
||
|
|
self.logger.info("getting user data")?;
|
||
|
|
return ok(http::Response::ok(json::dumps(response_data)?));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
pub fn main(args: List[String], os: OS): IO[i32] {
|
||
|
|
let logger = logging::ConsoleLogger::new(os.console.stdout());
|
||
|
|
let router = Router::new(logger);
|
||
|
|
let app = http::Router::new("").add_route("/myroute", router.get_user_data);
|
||
|
|
let http_server = http::Server::new(os.net(), "localhost", 8080, app);
|
||
|
|
let err = http_server.serve_forever()?;
|
||
|
|
logger.info("error serving: ", err)?;
|
||
|
|
return 1;
|
||
|
|
}
|