/
interface.go
58 lines (49 loc) · 1.4 KB
/
interface.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
47
48
49
50
51
52
53
54
55
56
57
58
package enc
import (
"github.com/pkg/errors"
"strings"
)
type Encoder interface {
// Name is the user-friendly name of this encoder
Name() string
// Code represends the short (one-letter) code for the encoder
Code() byte
// Encode will take an array of bytes and encode it using this encoder
Encode([]byte) []byte
// Decode is the reverse proces of encoding
Decode([]byte) ([]byte, error)
// Return a list of test patterns for the specified encoding
TestPatterns() [][]byte
// Expansion ratio; e.g. the encoded array is this times longer than the original input
Ratio() float64
}
// Declare a list of encodings
var (
Base32Encoding Encoder = &Base32Encoder{}
Base64Encoding Encoder = &Base64Encoder{}
Base64uEncoding Encoder = &Base64uEncoder{}
Base85Encoding Encoder = &Base85Encoder{}
Base91Encoding Encoder = &Base91Encoder{}
Base128Encoding Encoder = &Base128Encoder{}
Base192Encoding Encoder = &Base192Encoder{}
RawEncoding Encoder = &RawEncoder{}
)
// FromCode will return an encoder based on encoder code
func FromCode(code byte) (Encoder, error) {
code = strings.ToUpper(string(code))[0]
for _, enc := range []Encoder{
Base32Encoding,
Base64Encoding,
Base64uEncoding,
Base85Encoding,
Base91Encoding,
Base128Encoding,
Base192Encoding,
RawEncoding,
} {
if enc.Code() == code {
return enc, nil
}
}
return nil, errors.Errorf("Unknown codec type: %v", code)
}