From 7faca878a31624a71841ff10770116c657469541 Mon Sep 17 00:00:00 2001 From: Lykin <137850705+tiny-craft@users.noreply.github.com> Date: Tue, 30 Jan 2024 01:30:44 +0800 Subject: [PATCH] perf: add auto format detect for `yaml` and `xml` --- backend/utils/convert/convert.go | 12 ++++++++++++ backend/utils/convert/xml_convert.go | 22 ++++++++++++++++++++++ backend/utils/convert/yaml_convert.go | 23 +++++++++++++++++++++++ 3 files changed, 57 insertions(+) create mode 100644 backend/utils/convert/xml_convert.go create mode 100644 backend/utils/convert/yaml_convert.go diff --git a/backend/utils/convert/convert.go b/backend/utils/convert/convert.go index cd8a2df..5180581 100644 --- a/backend/utils/convert/convert.go +++ b/backend/utils/convert/convert.go @@ -14,6 +14,8 @@ type DataConvert interface { var ( jsonConv JsonConvert + yamlConv YamlConvert + xmlConv XmlConvert base64Conv Base64Convert binaryConv BinaryConvert hexConv HexConvert @@ -197,6 +199,16 @@ func autoViewAs(str string) (value, resultFormat string) { 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 value, ok = hexConv.Decode(str); ok { resultFormat = types.FORMAT_HEX diff --git a/backend/utils/convert/xml_convert.go b/backend/utils/convert/xml_convert.go new file mode 100644 index 0000000..c1c4342 --- /dev/null +++ b/backend/utils/convert/xml_convert.go @@ -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 +} diff --git a/backend/utils/convert/yaml_convert.go b/backend/utils/convert/yaml_convert.go new file mode 100644 index 0000000..edbe601 --- /dev/null +++ b/backend/utils/convert/yaml_convert.go @@ -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 +}