Source file endpoints.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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
(* generated by: awso-codegen generate-all --botocore-data vendor/botocore/botocore/data -o aws --runtime-dir lib/runtime/awso --cli-dir awso-cli *)
open! Awso_common.Jane_compat
open Values
type ('i, 'o, 'e) t =
  | GetMedia: (GetMediaInput.t, GetMediaOutput.t, GetMediaOutput.error) t 
let method_of_endpoint : type i o e. (i, o, e) t -> _ =
  function | GetMedia -> `POST
let uri_of_endpoint : type i o e. (i, o, e) t -> i -> Uri.t =
  ((fun endpoint x ->
      match endpoint with
      | GetMedia -> (Format.kasprintf Uri.of_string) "/getMedia")
  [@ocaml.warning "-27"])
let to_request (type i) (type o) (type e) (endp : (i, o, e) t) (req : i) =
  let _req = req in
  match endp with
  | GetMedia ->
      let (headers, body) =
        let headers =
          Some ((List.filter_opt []) |> Awso.Http.Headers.of_list) in
        let body =
          Some
            ((`Assoc
                (List.map
                   (List.filter_opt
                      [Option.map req.GetMediaInput.streamName
                         ~f:(fun x -> ("StreamName", (StreamName.to_value x)));
                      Option.map req.GetMediaInput.streamARN
                        ~f:(fun x -> ("StreamARN", (ResourceARN.to_value x)));
                      Some
                        ("StartSelector",
                          (StartSelector.to_value
                             req.GetMediaInput.startSelector))])
                   ~f:(fun (x, y) ->
                         let value =
                           Awso.Botodata.Json.value_to_json_scalar y in
                         (x, value))))
               |> Yojson.Safe.to_string) in
        (headers, body) in
      Awso.Http.Request.make ?headers ?body (method_of_endpoint endp)
let of_response (type i) (type o) (type e) (endpoint : (i, o, e) t)
  (resp : Awso.Http.Response.t) : (o, e) result=
  let code = Awso.Http.Status.to_code (Awso.Http.Response.status resp) in
  let is_success = (code >= 200) && (code < 300) in
  let x_amzn_error_type =
    let headers = Awso.Http.Headers.to_list (Awso.Http.Response.headers resp) in
    match List.Assoc.find ~equal:String.Caseless.equal headers
            "x-amzn-ErrorType"
    with
    | None -> None
    | Some value ->
        (match String.lsplit2 value ~on:':' with
         | None -> Some value
         | Some (v, _) -> Some v) in
  let parse_aws_error error_of_json =
    let body = Awso.Http.Response.body resp in
    let bail () =
      raise
        (Awso.Http.Io.Error.Bad_response
           { Awso.Http.Io.Error.code = code; body; x_amzn_error_type }) in
    match (x_amzn_error_type, error_of_json,
            ((code >= 400) && (code <= 599)))
    with
    | (Some error_type, Some error_of_json, true) ->
        let json = Yojson.Safe.from_string body in
        error_of_json error_type json
    | (None, Some error_of_json, true) ->
        (try
           let json = Yojson.Safe.from_string body in
           match json |> (Yojson.Safe.Util.member "__type") with
           | `String error_type ->
               let error_type =
                 match String.lsplit2 error_type ~on:'#' with
                 | Some (_, s) -> s
                 | None -> error_type in
               error_of_json error_type json
           | `Null -> bail ()
           | _ ->
               failwithf "Error '__type' did not have string type: %s" body
                 ()
         with | _ -> bail ())
    | (None, _, _) | (_, None, _) | (_, _, false) -> bail () in
  let response_to_json resp =
    Yojson.Safe.from_string (Awso.Http.Response.body resp) in
  let _ = parse_aws_error in
  let _ = response_to_json in
  let _ = resp in
  match endpoint with
  | GetMedia ->
      if is_success
      then
        let body = Payload.of_string (Awso.Http.Response.body resp) in
        let headers =
          Awso.Http.Headers.to_list (Awso.Http.Response.headers resp) in
        Ok (GetMediaOutput.of_header_and_body (headers, body))
      else Error (parse_aws_error (Some GetMediaOutput.error_of_json))