cloudflare-workers/internal/jshttp/responsewriter.go

39 lines
746 B
Go
Raw Normal View History

2023-02-23 23:20:21 +09:00
package jshttp
import (
"io"
"net/http"
"sync"
)
type ResponseWriterBuffer struct {
2023-02-22 19:23:56 +09:00
HeaderValue http.Header
StatusCode int
Reader *io.PipeReader
Writer *io.PipeWriter
ReadyCh chan struct{}
Once sync.Once
}
var _ http.ResponseWriter = &ResponseWriterBuffer{}
2023-02-22 19:23:56 +09:00
// Ready indicates that ResponseWriterBuffer is ready to be converted to Response.
func (w *ResponseWriterBuffer) Ready() {
w.Once.Do(func() {
close(w.ReadyCh)
})
}
func (w *ResponseWriterBuffer) Write(data []byte) (n int, err error) {
2023-02-22 19:23:56 +09:00
w.Ready()
return w.Writer.Write(data)
}
func (w *ResponseWriterBuffer) Header() http.Header {
2023-02-22 19:23:56 +09:00
return w.HeaderValue
}
func (w *ResponseWriterBuffer) WriteHeader(statusCode int) {
2023-02-22 19:23:56 +09:00
w.StatusCode = statusCode
}