/
string.go
59 lines (48 loc) · 1.08 KB
/
string.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
package parser
import (
"golang.org/x/text/encoding"
"golang.org/x/text/encoding/ianaindex"
"golang.org/x/text/transform"
"io/ioutil"
"strings"
)
type String struct {
config *StringConfig
decoder *encoding.Decoder
}
func NewString(
config *StringConfig,
) (*String, error) {
var decoder *encoding.Decoder = nil
if config.ConvertFromCharset != "" {
encoding, err := ianaindex.MIME.Encoding(config.ConvertFromCharset)
if err != nil {
return nil, err
}
decoder = encoding.NewDecoder()
}
return &String{
config: config,
decoder: decoder,
}, nil
}
func (str *String) Name() string {
return str.config.Name
}
func (str *String) Primitive() bool {
return str.config.Primitive()
}
func (str *String) GetRegexpPattern() string {
return ".+"
}
func (str *String) Parse(value string) (interface{}, error) {
if str.config.ConvertFromCharset != "" {
rInUTF8 := transform.NewReader(strings.NewReader(value), str.decoder)
convertedValue, err := ioutil.ReadAll(rInUTF8)
if err != nil {
return nil, err
}
value = string(convertedValue)
}
return value, nil
}