feat: add flush and finish for compression writer

This commit is contained in:
2026-07-03 02:58:16 +02:00
parent db9ac7c28c
commit 40eb3a146e

View File

@@ -4,6 +4,7 @@ import (
"bufio"
"bytes"
"compress/gzip"
"errors"
"mime"
"net"
"net/http"
@@ -378,3 +379,44 @@ func (w *compressionWriter) Write(data []byte) (int, error) {
}
return w.gzip.Write(data)
}
//nolint:unused
func (w *compressionWriter) Flush() {
if w.mode == compressionUndecided {
if w.canCompress(w.buffer.Bytes()) {
w.startGzip()
_ = w.flushBuffer()
} else {
w.startPlain()
_ = w.flushBuffer()
}
}
if w.mode == compressionGzip {
_ = w.gzip.Flush()
}
w.ResponseWriter.Flush()
}
//nolint:unused
func (w *compressionWriter) finish() error {
if w.mode == compressionUndecided {
if w.Status() == http.StatusNotModified {
addVary(w.Header(), "Accept-Encoding")
}
if w.buffer.Len() > 0 || w.status != 0 {
w.startPlain()
if err := w.flushBuffer(); err != nil {
return err
}
w.ResponseWriter.WriteHeaderNow()
}
return nil
}
if w.mode == compressionPlain {
return w.flushBuffer()
}
if w.gzip == nil {
return errors.New("gzip writer was not initialized")
}
return w.gzip.Close()
}