From cee7bea85c19e6900e8d599da60555d0817cb02a Mon Sep 17 00:00:00 2001 From: Nicolas Lepage <19571875+nlepage@users.noreply.github.com> Date: Tue, 26 Nov 2019 23:35:43 +0100 Subject: [PATCH] :construction: --- response_writer.go | 52 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 response_writer.go diff --git a/response_writer.go b/response_writer.go new file mode 100644 index 0000000..a87cd56 --- /dev/null +++ b/response_writer.go @@ -0,0 +1,52 @@ +package wasmhttp + +import ( + "bytes" + "net/http" + "syscall/js" +) + +// ResponseWriter implements http.ResponseWriter +type ResponseWriter struct { + header http.Header + buf *bytes.Buffer + statusCode int +} + +// NewResponseWriter creates a new ResponseWriter +func NewResponseWriter() *ResponseWriter { + return &ResponseWriter{ + header: http.Header{}, + buf: bytes.NewBuffer(nil), + statusCode: 0, + } +} + +var _ http.ResponseWriter = (*ResponseWriter)(nil) + +func (rw *ResponseWriter) Header() http.Header { + return rw.header +} + +func (rw *ResponseWriter) Write(p []byte) (int, error) { + return rw.buf.Write(p) +} + +func (rw *ResponseWriter) WriteHeader(statusCode int) { + rw.statusCode = statusCode +} + +func (rw *ResponseWriter) JSResponse() js.Value { + init := js.Global().Get("Object").New() + + if rw.statusCode != 0 { + init.Set("status", rw.statusCode) + } + + //FIXME headers + + jsBody := js.Global().Get("Uint8Array").New(rw.buf.Len()) + js.CopyBytesToJS(jsBody, rw.buf.Bytes()) + + return js.Global().Get("Response").New(jsBody, init) +}