/
base32_encoding.go
40 lines (32 loc) · 1006 Bytes
/
base32_encoding.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
package encoding
import (
"encoding/base32"
"io"
"io/ioutil"
)
var (
Base32StdEncoding = NewBase32Encoding(base32.StdEncoding)
Base32URLEncoding = NewBase32Encoding(base32.HexEncoding)
)
func NewBase32Encoding(encoding *base32.Encoding) ByteEncoding {
return &base32Encoding{encoding: encoding}
}
type base32Encoding struct {
encoding *base32.Encoding
}
func (e base32Encoding) StreamEncode(downstream io.Writer) (io.WriteCloser, error) {
return base32.NewEncoder(e.encoding, downstream), nil
}
func (e base32Encoding) StreamDecode(upstream io.Reader) (io.ReadCloser, error) {
return ioutil.NopCloser(base32.NewDecoder(e.encoding, upstream)), nil
}
func (e base32Encoding) Encode(src []byte) ([]byte, error) {
dst := make([]byte, e.encoding.EncodedLen(len(src)))
e.encoding.Encode(dst, src)
return dst, nil
}
func (e base32Encoding) Decode(src []byte) ([]byte, error) {
dst := make([]byte, e.encoding.DecodedLen(len(src)))
n, err := e.encoding.Decode(dst, src)
return dst[:n], err
}