mirror of
https://github.com/TeaOSLab/EdgeNode.git
synced 2025-11-03 23:20:25 +08:00
52 lines
1.5 KiB
Go
52 lines
1.5 KiB
Go
// 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"
|
|
)
|
|
|
|
var ErrNotSupportedContentEncoding = errors.New("not supported content encoding")
|
|
|
|
// AllEncodings 当前支持的所有编码
|
|
func AllEncodings() []ContentEncoding {
|
|
return []ContentEncoding{ContentEncodingBr, ContentEncodingGzip, ContentEncodingDeflate}
|
|
}
|
|
|
|
// 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)
|
|
}
|
|
return nil, ErrNotSupportedContentEncoding
|
|
}
|
|
|
|
// NewWriter 获取Writer
|
|
// TODO 考虑重用Writer
|
|
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)
|
|
}
|
|
return nil, errors.New("invalid compression type '" + compressType + "'")
|
|
}
|