/
decoder.go
46 lines (37 loc) · 859 Bytes
/
decoder.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package compress
import (
"bytes"
"io"
)
// Decoder interface.
type Decoder interface {
Read(v []byte) (int, error)
Close() error
SetOrder(o int) error
SetLitWidth(w int) error
}
// DecoderOption function.
type DecoderOption func(Decoder) error
// NewDecoder variadic constructor.
func NewDecoder(algo string, r io.Reader, opts ...DecoderOption) (Decoder, error) {
a, err := Registered(algo)
if err != nil {
return nil, err
}
return a.NewDecoder(r, opts...)
}
// Decode method.
func Decode(algo string, encoded []byte, opts ...DecoderOption) ([]byte, error) {
dec, err := NewDecoder(algo, bytes.NewBuffer(encoded), opts...)
if err != nil {
return nil, err
}
var buf bytes.Buffer
if _, err := io.Copy(&buf, dec); err != nil {
return nil, err
}
if err := dec.Close(); err != nil {
return nil, err
}
return buf.Bytes(), nil
}