Files
EdgeNode/internal/compressions/utils.go

61 lines
1.7 KiB
Go
Raw Normal View History

2021-09-29 19:37:07 +08:00
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
package compressions
import (
"errors"
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
"io"
)
type ContentEncoding = string
const (
ContentEncodingBr ContentEncoding = "br"
ContentEncodingGzip ContentEncoding = "gzip"
ContentEncodingDeflate ContentEncoding = "deflate"
2022-06-27 22:40:36 +08:00
ContentEncodingZSTD ContentEncoding = "zstd"
)
var ErrNotSupportedContentEncoding = errors.New("not supported content encoding")
2022-02-22 19:29:27 +08:00
// AllEncodings 当前支持的所有编码
func AllEncodings() []ContentEncoding {
2022-06-27 22:40:36 +08:00
return []ContentEncoding{
ContentEncodingBr,
ContentEncodingGzip,
ContentEncodingZSTD,
ContentEncodingDeflate,
}
2022-02-22 19:29:27 +08:00
}
// NewReader 获取Reader
func NewReader(reader io.Reader, contentEncoding ContentEncoding) (Reader, error) {
switch contentEncoding {
case ContentEncodingBr:
return NewBrotliReader(reader)
case ContentEncodingGzip:
return NewGzipReader(reader)
case ContentEncodingDeflate:
return NewDeflateReader(reader)
2022-06-27 22:40:36 +08:00
case ContentEncodingZSTD:
return NewZSTDReader(reader)
}
return nil, ErrNotSupportedContentEncoding
}
// NewWriter 获取Writer
2021-09-29 19:37:07 +08:00
func NewWriter(writer io.Writer, compressType serverconfigs.HTTPCompressionType, level int) (Writer, error) {
switch compressType {
case serverconfigs.HTTPCompressionTypeGzip:
return NewGzipWriter(writer, level)
case serverconfigs.HTTPCompressionTypeDeflate:
return NewDeflateWriter(writer, level)
case serverconfigs.HTTPCompressionTypeBrotli:
return NewBrotliWriter(writer, level)
2022-06-27 22:40:36 +08:00
case serverconfigs.HTTPCompressionTypeZSTD:
return NewZSTDWriter(writer, level)
2021-09-29 19:37:07 +08:00
}
return nil, errors.New("invalid compression type '" + compressType + "'")
}