~/bend-docscommunity

src/io.bend source

src/io.bend on the hub · documented module

import Baseimport ./http.bend as Httpimport ./json.bend as Jsontype ResponseHeader is Data:  ResponseHeader{name: String, value: String}type Response is Data:  Response{status: U32, body: String, headers: List<&2, ResponseHeader>}# Names from the transport are lowercase. Pass a lowercase lookup name.def header_step(equal: Bool, value: String, rest: Unit -> Maybe<String>) -> Maybe<String>:  match equal:    case True{}: Some{value}    case False{}: rest(Unit{})def header(+name: String, headers: List<&2, ResponseHeader>) -> Maybe<String>:  match headers:    case Nil{}: None{}    case Con{ResponseHeader{key, value}, tail}:      header_step(String.eq(name, key), value, u => header(name, tail))def header_values_step(equal: Bool, value: String, rest: List<String>) -> List<String>:  match equal:    case True{}: Con{value, rest}    case False{}: restdef header_values(+name: String, headers: List<&2, ResponseHeader>) -> List<String>:  match headers:    case Nil{}: Nil{}    case Con{ResponseHeader{key, value}, tail}:      header_values_step(String.eq(name, key), value, header_values(name, tail))type HttpResult is Data:  HttpOk{response: Response}  HttpError{code: String, message: String}type JsonResult is Data:  JsonOk{status: U32, value: Json.Json}  JsonError{code: String, message: String}def Stiff.send(request: Http.Request) -> IO(HttpResult):  import "./effects/stiff.c"def finish_json(status: U32, result: Json.ParseResult) -> IO(JsonResult):  match result:    case Json.JsonDone{value}:      IO.pure(JsonResult, JsonOk{status, value})    case Json.JsonFailure{code, message}:      IO.pure(JsonResult, JsonError{code, message})def decode_response(result: HttpResult) -> IO(JsonResult):  match result:    case HttpOk{Response{status, body, headers}}:      do IO<JsonResult>:        parsed : Json.ParseResult <- Json.Json.parse(body)        finish_json(status, parsed)    case HttpError{code, message}:      IO.pure(JsonResult, JsonError{code, message})def Stiff.send_json(request: Http.Request) -> IO(JsonResult):  IO.bind(HttpResult, JsonResult, Stiff.send(request), decode_response)