Source file version_error.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
34
35
36
37
38
open Import
open Types

type t =
  { payload : Csexp.t option
  ; message : string
  }

let payload t = t.payload
let message t = t.message

let to_dyn { payload; message } =
  Dyn.record
    [ "message", Dyn.string message; "payload", Dyn.(option Sexp.to_dyn) payload ]
;;

let create ?payload ~message () = { payload; message }

exception E of t

let () =
  Printexc.register_printer (function
    | E { payload; message } ->
      Some
        (let messages =
           match payload with
           | None -> []
           | Some payload -> [ Sexp.pp payload ]
         in
         Format.asprintf "%a@." Pp.to_fmt
         @@ Pp.concat
         @@ (Pp.textf "Version_error: %s" message :: messages))
    | _ -> None)
;;

let to_response_error { payload; message } =
  Response.Error.create ~kind:Invalid_request ?payload ~message ()
;;