perf: add auto format detect for `yaml` and `xml`
This commit is contained in:
parent
74d789ac8e
commit
7faca878a3
|
@ -14,6 +14,8 @@ type DataConvert interface {
|
||||||
|
|
||||||
var (
|
var (
|
||||||
jsonConv JsonConvert
|
jsonConv JsonConvert
|
||||||
|
yamlConv YamlConvert
|
||||||
|
xmlConv XmlConvert
|
||||||
base64Conv Base64Convert
|
base64Conv Base64Convert
|
||||||
binaryConv BinaryConvert
|
binaryConv BinaryConvert
|
||||||
hexConv HexConvert
|
hexConv HexConvert
|
||||||
|
@ -197,6 +199,16 @@ func autoViewAs(str string) (value, resultFormat string) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if value, ok = yamlConv.Decode(str); ok {
|
||||||
|
resultFormat = types.FORMAT_YAML
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if value, ok = xmlConv.Decode(str); ok {
|
||||||
|
resultFormat = types.FORMAT_XML
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if strutil.ContainsBinary(str) {
|
if strutil.ContainsBinary(str) {
|
||||||
if value, ok = hexConv.Decode(str); ok {
|
if value, ok = hexConv.Decode(str); ok {
|
||||||
resultFormat = types.FORMAT_HEX
|
resultFormat = types.FORMAT_HEX
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
package convutil
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/xml"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
type XmlConvert struct{}
|
||||||
|
|
||||||
|
func (XmlConvert) Encode(str string) (string, bool) {
|
||||||
|
return str, true
|
||||||
|
}
|
||||||
|
|
||||||
|
func (XmlConvert) Decode(str string) (string, bool) {
|
||||||
|
trimedStr := strings.TrimSpace(str)
|
||||||
|
if !strings.HasPrefix(trimedStr, "<") && !strings.HasSuffix(trimedStr, ">") {
|
||||||
|
return str, false
|
||||||
|
}
|
||||||
|
var obj any
|
||||||
|
err := xml.Unmarshal([]byte(trimedStr), &obj)
|
||||||
|
return str, err == nil
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
package convutil
|
||||||
|
|
||||||
|
import (
|
||||||
|
"gopkg.in/yaml.v3"
|
||||||
|
"log"
|
||||||
|
)
|
||||||
|
|
||||||
|
type YamlConvert struct{}
|
||||||
|
|
||||||
|
func (YamlConvert) Encode(str string) (string, bool) {
|
||||||
|
return str, true
|
||||||
|
}
|
||||||
|
|
||||||
|
func (YamlConvert) Decode(str string) (string, bool) {
|
||||||
|
var obj map[string]any
|
||||||
|
err := yaml.Unmarshal([]byte(str), &obj)
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err.Error())
|
||||||
|
} else {
|
||||||
|
log.Println(obj)
|
||||||
|
}
|
||||||
|
return str, err == nil
|
||||||
|
}
|
Loading…
Reference in New Issue