123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138open!Coreopen!Importletrequest_body_arg(op:Botodata.operationoption)=letop=Option.value_exn~message:"No op?"opinletaction=op.nameinletloc=!Ast_helper.default_locinmatchop.inputwith|None->[%exprNone]|Someinput->[%exprletmeta=["Action",[[%eAst_convenience.straction]];"Version",[apiVersion]]inletquery=[%eAst_convenience.evar(Shape.capitalized_idinput.shape^".to_query")]req|>Awsm.Client.Query.renderinSome(Uri.encoded_of_query(meta@query))];;letto_requestendpoints=letloc=!Ast_helper.default_locinletexpr=Endpoint.casesendpoints~f:(funendpoint->[%exprletheaders=Awsm.Http.Headers.of_list["content-type","application/x-www-form-urlencoded; charset=utf-8"]inletbody=[%erequest_body_arg(Endpoint.opendpoint)]inAwsm.Http.Request.make?body~headers(method_of_endpointendp)])|>Ast_helper.Exp.match_[%exprendp]in[%striletto_request(typeioe)(endp:(i,o,e)t)(req:i)=let_req=reqin[%eexpr];;];;let%expect_test"to_request"=letmake_op~name~input_shape=letmake_input~shape={Botodata.shape;documentation=None;deprecated=None;xmlNamespace=None;locationName=None}inSome{Botodata.name;http={Botodata.method_=`GET;requestUri=[];responseCode=None};input=Some(make_input~shape:input_shape);output=None;errors=None;documentation=None;documentationUrl=None;alias=None;deprecated=None;deprecatedMessage=None;authtype=None;idempotent=None;httpChecksum=None;endpoint=None;endpointdiscovery=None}in[Endpoint.create_test"Name1"~op:(make_op~name:"foo"~input_shape:"Name1")~request_module:(Some"Module1");Endpoint.create_test"Name2"~op:(make_op~name:"bar"~input_shape:"Name2")~request_module:(Some"Module2");Endpoint.create_test"Name3"~op:(make_op~name:"baz"~input_shape:"Name3")~request_module:None]|>to_request|>List.return|>Util.structure_to_string|>printf"%s%!";[%expect{|
let to_request (type i) (type o) (type e) (endp : (i, o, e) t) (req : i) =
let _req = req in
match endp with
| Name1 ->
let headers =
Awsm.Http.Headers.of_list
[("content-type",
"application/x-www-form-urlencoded; charset=utf-8")] in
let body =
let meta = [("Action", ["foo"]); ("Version", [apiVersion])] in
let query = (Name1.to_query req) |> Awsm.Client.Query.render in
Some (Uri.encoded_of_query (meta @ query)) in
Awsm.Http.Request.make ?body ~headers (method_of_endpoint endp)
| Name2 ->
let headers =
Awsm.Http.Headers.of_list
[("content-type",
"application/x-www-form-urlencoded; charset=utf-8")] in
let body =
let meta = [("Action", ["bar"]); ("Version", [apiVersion])] in
let query = (Name2.to_query req) |> Awsm.Client.Query.render in
Some (Uri.encoded_of_query (meta @ query)) in
Awsm.Http.Request.make ?body ~headers (method_of_endpoint endp)
| Name3 ->
let headers =
Awsm.Http.Headers.of_list
[("content-type",
"application/x-www-form-urlencoded; charset=utf-8")] in
let body =
let meta = [("Action", ["baz"]); ("Version", [apiVersion])] in
let query = (Name3.to_query req) |> Awsm.Client.Query.render in
Some (Uri.encoded_of_query (meta @ query)) in
Awsm.Http.Request.make ?body ~headers (method_of_endpoint endp) |}];;letmake_error_expression~loc~labelendpoint=matchEndpoint.opendpointwith|None->[%exprNone]|Someoperation->(matchoperation.output,operation.errorswith|None,_|_,None->[%exprNone]|Some_,Some_->letto_error=Endpoint.in_result_moduleendpointlabel|>Option.value_exn~message:"no result module"~error:(Error.create_s[%message(endpoint:Endpoint.t)])in[%exprSome[%eto_error]]);;