Source file service.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
open Core
open Async_kernel

type request = Request.t * Body.Reader.t [@@deriving sexp_of]
type response = Response.t * Body.Writer.t [@@deriving sexp_of]
type t = request -> response Deferred.t

let body request = Body.Reader.pipe (snd request)
let header request key = Headers.find (Request.headers (fst request)) key
let header_multi request key = Headers.find_multi (Request.headers (fst request)) key
let resource request = Request.path (fst request)
let meth request = Request.meth (fst request)

let respond_string ?(headers = []) ?(status = `Ok) body =
  let body = Body.Writer.string body in
  let headers = Headers.of_rev_list headers in
  let response = Response.create ~headers status in
  return (response, body)
;;

let respond_bigstring ?(headers = []) ?(status = `Ok) body =
  let body = Body.Writer.bigstring body in
  let headers = Headers.of_rev_list headers in
  let response = Response.create ~headers status in
  return (response, body)
;;

let respond_stream ?(headers = []) ?(status = `Ok) body =
  let body = Body.Writer.stream body in
  let headers = Headers.of_rev_list headers in
  let response = Response.create ~headers status in
  return (response, body)
;;