From c5e0561173a46a8a83e479e7ec8dc357c12fb368 Mon Sep 17 00:00:00 2001
From: Tom Sherman <the.tomsherman@gmail.com>
Date: Tue, 21 Dec 2021 16:45:15 +0000
Subject: [PATCH] Change fetch `method` to a string

---
 examples/fetch_examples.res       |  6 ++--
 lib/js/examples/fetch_examples.js |  6 ++--
 src/Webapi/Webapi__Fetch.res      | 50 +++----------------------------
 src/Webapi/Webapi__Fetch.resi     | 15 ++--------
 4 files changed, 12 insertions(+), 65 deletions(-)

diff --git a/examples/fetch_examples.res b/examples/fetch_examples.res
index 04e76ab3..77e43a04 100644
--- a/examples/fetch_examples.res
+++ b/examples/fetch_examples.res
@@ -8,7 +8,7 @@ let _ = {
 }
 
 let _ = {
-  Fetch.fetchWithInit("/api/hello", Fetch.RequestInit.make(~method_=Post, ()))
+  Fetch.fetchWithInit("/api/hello", Fetch.RequestInit.make(~method="POST", ()))
   ->then(Fetch.Response.text)
   ->then(text => print_endline(text)->resolve)
 }
@@ -31,7 +31,7 @@ let _ = {
   Fetch.fetchWithInit(
     "/api/hello",
     Fetch.RequestInit.make(
-      ~method_=Post,
+      ~method="POST",
       ~body=Fetch.BodyInit.make(Js.Json.stringify(Js.Json.object_(payload))),
       ~headers=Fetch.HeadersInit.make({"Content-Type": "application/json"}),
       (),
@@ -51,7 +51,7 @@ let _ = {
   Fetch.fetchWithInit(
     "/api/upload",
     Fetch.RequestInit.make(
-      ~method_=Post,
+      ~method="POST",
       ~body=Fetch.BodyInit.makeWithFormData(formData),
       ~headers=Fetch.HeadersInit.make({"Accept": "*"}),
       (),
diff --git a/lib/js/examples/fetch_examples.js b/lib/js/examples/fetch_examples.js
index 97149fd4..e6f521f0 100644
--- a/lib/js/examples/fetch_examples.js
+++ b/lib/js/examples/fetch_examples.js
@@ -11,7 +11,7 @@ fetch("/api/hellos/1").then(function (prim) {
       return Promise.resolve((console.log(text), undefined));
     });
 
-fetch("/api/hello", Webapi__Fetch.RequestInit.make(/* Post */2, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined)(undefined)).then(function (prim) {
+fetch("/api/hello", Webapi__Fetch.RequestInit.make("POST", undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined)(undefined)).then(function (prim) {
         return prim.text();
       }).then(function (text) {
       return Promise.resolve((console.log(text), undefined));
@@ -33,7 +33,7 @@ var payload = {};
 
 payload["hello"] = "world";
 
-fetch("/api/hello", Webapi__Fetch.RequestInit.make(/* Post */2, {
+fetch("/api/hello", Webapi__Fetch.RequestInit.make("POST", {
               "Content-Type": "application/json"
             }, Caml_option.some(JSON.stringify(payload)), undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined)(undefined)).then(function (prim) {
       return prim.json();
@@ -47,7 +47,7 @@ formData.append("image0", {
       name: "image0.jpg"
     }, undefined);
 
-fetch("/api/upload", Webapi__Fetch.RequestInit.make(/* Post */2, {
+fetch("/api/upload", Webapi__Fetch.RequestInit.make("POST", {
               Accept: "*"
             }, Caml_option.some(formData), undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined)(undefined)).then(function (prim) {
       return prim.json();
diff --git a/src/Webapi/Webapi__Fetch.res b/src/Webapi/Webapi__Fetch.res
index 72bc00eb..31f7e296 100644
--- a/src/Webapi/Webapi__Fetch.res
+++ b/src/Webapi/Webapi__Fetch.res
@@ -22,47 +22,6 @@ type urlSearchParams /* URL */
 type blob = Webapi__Blob.t
 type file = Webapi__File.t
 
-type requestMethod =
-  | Get
-  | Head
-  | Post
-  | Put
-  | Delete
-  | Connect
-  | Options
-  | Trace
-  | Patch
-  | Other(string)
-let encodeRequestMethod = x =>
-  /* internal */
-
-  switch x {
-  | Get => "GET"
-  | Head => "HEAD"
-  | Post => "POST"
-  | Put => "PUT"
-  | Delete => "DELETE"
-  | Connect => "CONNECT"
-  | Options => "OPTIONS"
-  | Trace => "TRACE"
-  | Patch => "PATCH"
-  | Other(method_) => method_
-  }
-let decodeRequestMethod = x =>
-  /* internal */
-
-  switch x {
-  | "GET" => Get
-  | "HEAD" => Head
-  | "POST" => Post
-  | "PUT" => Put
-  | "DELETE" => Delete
-  | "CONNECT" => Connect
-  | "OPTIONS" => Options
-  | "TRACE" => Trace
-  | "PATCH" => Patch
-  | method_ => Other(method_)
-  }
 
 type referrerPolicy =
   | None
@@ -332,7 +291,7 @@ module RequestInit = {
 
   @obj
   external make: (
-    ~_method: string=?,
+    ~method: string=?,
     ~headers: headersInit=?,
     ~body: bodyInit=?,
     ~referrer: string=?,
@@ -347,7 +306,7 @@ module RequestInit = {
     unit,
   ) => requestInit = ""
   let make = (
-    ~method_: option<requestMethod>=?,
+    ~method: option<string>=?,
     ~headers: option<headersInit>=?,
     ~body: option<bodyInit>=?,
     ~referrer: option<string>=?,
@@ -361,7 +320,7 @@ module RequestInit = {
     ~signal: option<signal>=?,
   ) =>
     make(
-      ~_method=?map(encodeRequestMethod, method_),
+      ~method?,
       ~headers?,
       ~body?,
       ~referrer?,
@@ -388,8 +347,7 @@ module Request = {
   @new external makeWithRequest: t => t = "Request"
   @new external makeWithRequestInit: (t, requestInit) => t = "Request"
 
-  @get external method_: t => string = "method"
-  let method_: t => requestMethod = self => decodeRequestMethod(method_(self))
+  @get external method: t => string = "method"
   @get external url: t => string = "url"
   @get external headers: t => headers = "headers"
   @get external type_: t => string = "type"
diff --git a/src/Webapi/Webapi__Fetch.resi b/src/Webapi/Webapi__Fetch.resi
index f64d76b7..f1a00366 100644
--- a/src/Webapi/Webapi__Fetch.resi
+++ b/src/Webapi/Webapi__Fetch.resi
@@ -24,17 +24,6 @@ type signal = AbortController.signal
 type blob
 type file
 
-type requestMethod =
-  | Get
-  | Head
-  | Post
-  | Put
-  | Delete
-  | Connect
-  | Options
-  | Trace
-  | Patch
-  | Other(string)
 
 type referrerPolicy =
   | None
@@ -151,7 +140,7 @@ module RequestInit: {
   type t = requestInit
 
   let make: (
-    ~method_: requestMethod=?,
+    ~method: string=?,
     ~headers: headersInit=?,
     ~body: bodyInit=?,
     ~referrer: string=?,
@@ -175,7 +164,7 @@ module Request: {
   @new external makeWithRequest: t => t = "Request"
   @new external makeWithRequestInit: (t, requestInit) => t = "Request"
 
-  let method_: t => requestMethod
+  @get external method: t => string = "method"
   @get external url: t => string = "url"
   @get external headers: t => headers = "headers"
   let type_: t => requestType