Pudu programming language
Menu
Package

@chrismichaelps / pudu-lang-httpclient

Named HTTP clients for Pudu: a client factory, delegating handlers, pooled keep-alive connections, handler lifetimes, logging, and resilience

0.1.1Apache-2.01

InstallClose

QuickStart.pudu

Pudu44 lines1.7 KB

GitHub ↗
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 HttpClient1314/// Starts a local server answering `/greeting` and answers its address.15fn 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}2425/// Fetches a greeting through a named client and answers 0 when it arrived.26fn 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