1
0
mirror of https://github.com/taigrr/wasm-experiments synced 2025-01-18 04:03:21 -08:00

Add experimental Fetch API package

This commit is contained in:
Johan Brandhorst 2018-03-02 21:26:42 +00:00
parent 60bc902fb2
commit 5c7c23d888
No known key found for this signature in database
GPG Key ID: 266C7D9B44EAA057
3 changed files with 97 additions and 0 deletions

7
fetch/Makefile Normal file
View File

@ -0,0 +1,7 @@
build: clean compile
clean:
rm -f ../html/test.wasm
compile:
GOOS=js GOARCH=wasm GOROOT=$(GOPATH)/src/github.com/neelance/go/ $(GOPATH)/src/github.com/neelance/go/bin/go build -o ../html/test.wasm main.go

66
fetch/fetch/fetch.go Normal file
View File

@ -0,0 +1,66 @@
package fetch
import (
"io"
"net/http"
"net/url"
"runtime/js"
)
type Method int
func (m Method) String() string {
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 (
GET Method = iota
POST
PUT
DELETE
PATCH
)
type Request struct {
Method Method
URL *url.URL
Headers http.Header
Body []byte
}
type Response struct {
URL url.URL
Headers http.Header
Body io.Reader
StatusCode int
}
func Fetch(req Request) (Response, error) {
init := js.Global.Get("Object").New()
init.Set("method", req.Method.String())
init.Set("body", req.Body)
headers := js.Global.Get("Headers").New()
for header, values := range req.Headers {
for _, value := range values {
headers.Call("append", header, value)
}
}
init.Set("headers", headers)
promise := js.Global.Call("fetch", req.URL.String(), init)
return Response{}, nil
}

24
fetch/main.go Normal file
View File

@ -0,0 +1,24 @@
package main
import (
"net/http"
"net/url"
"github.com/johanbrandhorst/wasm-experiments/fetch/fetch"
)
func main() {
headers := http.Header{}
headers.Add("Content-Type", "application/json")
req := fetch.Request{
URL: &url.URL{
Scheme: "http",
Host: "httpbin.org",
Path: "anything",
},
Method: fetch.POST,
Body: []byte(`{"key": "value"}`),
Headers: headers,
}
fetch.Fetch(req)
}