/
encoding.go
67 lines (52 loc) · 1.49 KB
/
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package main
import (
"github.com/porech/file-encoding-converter/src/rds"
"golang.org/x/text/encoding"
"golang.org/x/text/encoding/charmap"
)
type EncoderDecoder interface {
Encode(string) ([]byte, error)
Decode([]byte) (string, error)
}
type NullEncoderDecoder struct{}
func NewNullEncoderDecoder() EncoderDecoder {
return &NullEncoderDecoder{}
}
func (_ NullEncoderDecoder) Encode(str string) ([]byte, error) {
return []byte(str), nil
}
func (_ NullEncoderDecoder) Decode(bytes []byte) (string, error) {
return string(bytes), nil
}
type BuiltinEncoderDecoder struct {
encoder *encoding.Encoder
decoder *encoding.Decoder
}
func NewCharmapEncoderDecoder(charmap *charmap.Charmap) EncoderDecoder {
return &BuiltinEncoderDecoder{
encoder: charmap.NewEncoder(),
decoder: charmap.NewDecoder(),
}
}
func NewUnicodeEncoderDecoder(charmap encoding.Encoding) EncoderDecoder {
return &BuiltinEncoderDecoder{
encoder: charmap.NewEncoder(),
decoder: charmap.NewDecoder(),
}
}
func (c BuiltinEncoderDecoder) Encode(str string) ([]byte, error) {
return c.encoder.Bytes([]byte(str))
}
func (c BuiltinEncoderDecoder) Decode(bytes []byte) (string, error) {
return c.decoder.String(string(bytes))
}
type RDSEncoderDecoder struct{}
func NewRDSEncoderDecoder() EncoderDecoder {
return &RDSEncoderDecoder{}
}
func (_ RDSEncoderDecoder) Encode(str string) ([]byte, error) {
return rds.Encode(str), nil
}
func (_ RDSEncoderDecoder) Decode(bytes []byte) (string, error) {
return rds.Decode(bytes), nil
}