mirror of
https://github.com/taigrr/wasm-experiments
synced 2025-01-18 04:03:21 -08:00
Couple small changes
Add extra HTTP verbs, Generate verb string representation, disallow body for GET, HEAD, Use more pointers.
This commit is contained in:
parent
70424ed5a8
commit
8e3e7d54de
@ -2,7 +2,10 @@
|
|||||||
|
|
||||||
package fetch
|
package fetch
|
||||||
|
|
||||||
|
//go:generate bash -c "GOROOT=$GOPATH/src/github.com/neelance/go/ GOOS=js GOARCH=wasm stringer -type Method"
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
@ -13,28 +16,16 @@ import (
|
|||||||
|
|
||||||
type Method int
|
type Method int
|
||||||
|
|
||||||
func (m Method) String() string {
|
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods
|
||||||
switch m {
|
|
||||||
case GET:
|
|
||||||
return "GET"
|
|
||||||
case POST:
|
|
||||||
return "POST"
|
|
||||||
case PUT:
|
|
||||||
return "PUT"
|
|
||||||
case DELETE:
|
|
||||||
return "DELETE"
|
|
||||||
case PATCH:
|
|
||||||
return "PATCH"
|
|
||||||
}
|
|
||||||
|
|
||||||
panic("unsupported method")
|
|
||||||
}
|
|
||||||
|
|
||||||
const (
|
const (
|
||||||
GET Method = iota
|
GET Method = iota
|
||||||
|
HEAD
|
||||||
POST
|
POST
|
||||||
PUT
|
PUT
|
||||||
DELETE
|
DELETE
|
||||||
|
CONNECT
|
||||||
|
OPTIONS
|
||||||
|
TRACE
|
||||||
PATCH
|
PATCH
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -42,20 +33,26 @@ type Request struct {
|
|||||||
Method Method
|
Method Method
|
||||||
URL *url.URL
|
URL *url.URL
|
||||||
Headers http.Header
|
Headers http.Header
|
||||||
Body []byte
|
Body io.Reader
|
||||||
}
|
}
|
||||||
|
|
||||||
type Response struct {
|
type Response struct {
|
||||||
URL url.URL
|
URL *url.URL
|
||||||
Headers http.Header
|
Headers http.Header
|
||||||
Body io.Reader
|
Body io.ReadCloser
|
||||||
StatusCode int
|
StatusCode int
|
||||||
}
|
}
|
||||||
|
|
||||||
func Fetch(req Request) (Response, error) {
|
func Fetch(req *Request) (*Response, error) {
|
||||||
init := js.Global.Get("Object").New()
|
init := js.Global.Get("Object").New()
|
||||||
init.Set("method", req.Method.String())
|
init.Set("method", req.Method.String())
|
||||||
init.Set("body", req.Body)
|
if req.Body != nil {
|
||||||
|
switch req.Method {
|
||||||
|
case GET, HEAD:
|
||||||
|
return nil, errors.New("cannot use body with GET or HEAD HTTP methods")
|
||||||
|
}
|
||||||
|
init.Set("body", req.Body)
|
||||||
|
}
|
||||||
|
|
||||||
headers := js.Global.Get("Headers").New()
|
headers := js.Global.Get("Headers").New()
|
||||||
for header, values := range req.Headers {
|
for header, values := range req.Headers {
|
||||||
@ -71,5 +68,5 @@ func Fetch(req Request) (Response, error) {
|
|||||||
|
|
||||||
promise := js.Global.Call("fetch", req.URL.String(), init)
|
promise := js.Global.Call("fetch", req.URL.String(), init)
|
||||||
promise.Call("then", cb)
|
promise.Call("then", cb)
|
||||||
return Response{}, nil
|
return &Response{}, nil
|
||||||
}
|
}
|
||||||
|
16
fetch/fetch/method_string.go
Normal file
16
fetch/fetch/method_string.go
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
// Code generated by "stringer -type Method"; DO NOT EDIT.
|
||||||
|
|
||||||
|
package fetch
|
||||||
|
|
||||||
|
import "strconv"
|
||||||
|
|
||||||
|
const _Method_name = "GETHEADPOSTPUTDELETECONNECTOPTIONSTRACEPATCH"
|
||||||
|
|
||||||
|
var _Method_index = [...]uint8{0, 3, 7, 11, 14, 20, 27, 34, 39, 44}
|
||||||
|
|
||||||
|
func (i Method) String() string {
|
||||||
|
if i < 0 || i >= Method(len(_Method_index)-1) {
|
||||||
|
return "Method(" + strconv.FormatInt(int64(i), 10) + ")"
|
||||||
|
}
|
||||||
|
return _Method_name[_Method_index[i]:_Method_index[i+1]]
|
||||||
|
}
|
@ -3,6 +3,8 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
|
||||||
@ -12,15 +14,15 @@ import (
|
|||||||
func main() {
|
func main() {
|
||||||
headers := http.Header{}
|
headers := http.Header{}
|
||||||
headers.Add("Content-Type", "application/json")
|
headers.Add("Content-Type", "application/json")
|
||||||
req := fetch.Request{
|
req := &fetch.Request{
|
||||||
URL: &url.URL{
|
URL: &url.URL{
|
||||||
Scheme: "http",
|
Scheme: "http",
|
||||||
Host: "httpbin.org",
|
Host: "httpbin.org",
|
||||||
Path: "anything",
|
Path: "anything",
|
||||||
},
|
},
|
||||||
Method: fetch.POST,
|
Method: fetch.POST,
|
||||||
Body: []byte(`{"key": "value"}`),
|
Body: bytes.NewBuffer([]byte(`{"key": "value"}`)),
|
||||||
Headers: headers,
|
Headers: headers,
|
||||||
}
|
}
|
||||||
fetch.Fetch(req)
|
fmt.Println(fetch.Fetch(req))
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user