consensus/cmd/httputils/compress.go
DataHoarder 55661a12da
All checks were successful
continuous-integration/drone/push Build is passing
WIP: Bootstrap-based responsive interface, CSS only
2024-03-20 13:37:26 +01:00

63 lines
1.4 KiB
Go

package httputils
import (
"slices"
"strings"
)
type ContentEncoding string
/*
func (e ContentEncoding) NewPipe(r io.Reader) (reader io.Reader, err error) {
switch e {
case ContentEncodingNone:
case ContentEncodingGzip:
case ContentEncodingBrotli:
case ContentEncodingZstd:
default:
panic("not supported")
}
}
func (e ContentEncoding) Compress(in, buf []byte) (out []byte, err error) {
switch e {
case ContentEncodingNone:
return append(buf, in...), nil
case ContentEncodingGzip:
case ContentEncodingBrotli:
case ContentEncodingZstd:
default:
panic("not supported")
}
}
*/
const (
ContentEncodingNone ContentEncoding = ""
ContentEncodingGzip ContentEncoding = "gzip"
ContentEncodingBrotli ContentEncoding = "br"
ContentEncodingZstd ContentEncoding = "zstd"
)
func SelectEncodingServerPreference(acceptEncoding string) (contentEncoding ContentEncoding) {
encodings := strings.Split(acceptEncoding, ",")
for i := range encodings {
//drop preference
e := strings.Split(encodings[i], ";")
encodings[i] = strings.TrimSpace(e[0])
}
if slices.Contains(encodings, string(ContentEncodingZstd)) {
return ContentEncodingZstd
} else if slices.Contains(encodings, string(ContentEncodingBrotli)) {
return ContentEncodingBrotli
} else if slices.Contains(encodings, string(ContentEncodingGzip)) {
return ContentEncodingGzip
} else {
return ContentEncodingNone
}
}