
QuickStart.pudu
Pudu44 lines1.7 KB
1/** @Examples.QuickStart.Program — a factory, a named client, and one request */2module QuickStart34import Std.Concurrent as Concurrent5import Std.Http.Server.Reply as Reply6import Std.Http.Server.Route as Route7import Std.Http.Server as Server8import Std.Io as Io9import PuduLangHttpClient.Client as Client10import PuduLangHttpClient.Factory.Builder as Builder11import PuduLangHttpClient.Factory as Factory12import PuduLangHttpClient as HttpClient131415fn serve() -> (Server.Running, Str) {16 let running = match Server.start("127.0.0.1", 0) {17 case Ok(found) => found18 case Err(problem) => panic(show(problem))19 }20 let server = Server.server(&Route.routing(&[Route.get("/greeting", |_request: Route.Request| Reply.text(200, "hello from pudu"))]))21 let _serving = Concurrent.start(fn() -> () { let _ran = Server.run(&server, &running, 0) })22 (running, "http://127.0.0.1:" + show(Server.portOf(&running)) + "/")23}242526fn main() -> Int {27 let (running, base) = serve()28 let factory = match Factory.build([29 Builder.named("greeter").withBaseAddress(base).withDefaultHeader("user-agent", "quick-start/1.0").withTimeout(5000)30 ]) {31 case Ok(built) => built32 case Err(invalid) => panic(Factory.explain(&invalid))33 }34 let client = Factory.createClient(&factory, "greeter")35 let greeting = Client.getText(&client, "greeting")36 let _said = Io.writeLine(match greeting {37 case Ok(text) => text38 case Err(failure) => HttpClient.describe(&failure)39 })40 Factory.dispose(&factory)41 let _stopped = Server.stop(&running)42 if greeting == Ok("hello from pudu") { 0 } else { 1 }43}44