62acca2b68
Tests are hidden behind a "testsuite" build tag for now since many tests are failing. Use `go test -tags testsuite` to activate. Use `go generate` to regenerate toml_testgen_test.go. Co-authored-by: Thomas Pelletier <thomas@pelletier.codes>
70 lines
1.2 KiB
Go
70 lines
1.2 KiB
Go
package testsuite
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"fmt"
|
|
|
|
"github.com/pelletier/go-toml/v2"
|
|
)
|
|
|
|
type parser struct{}
|
|
|
|
func (p parser) Decode(input string) (output string, outputIsError bool, retErr error) {
|
|
defer func() {
|
|
if r := recover(); r != nil {
|
|
switch rr := r.(type) {
|
|
case error:
|
|
retErr = rr
|
|
default:
|
|
retErr = fmt.Errorf("%s", rr)
|
|
}
|
|
}
|
|
}()
|
|
|
|
var v interface{}
|
|
|
|
if err := toml.Unmarshal([]byte(input), &v); err != nil {
|
|
return err.Error(), true, nil
|
|
}
|
|
|
|
j, err := json.MarshalIndent(addTag("", v), "", " ")
|
|
if err != nil {
|
|
return "", false, retErr
|
|
}
|
|
|
|
return string(j), false, retErr
|
|
}
|
|
|
|
func (p parser) Encode(input string) (output string, outputIsError bool, retErr error) {
|
|
defer func() {
|
|
if r := recover(); r != nil {
|
|
switch rr := r.(type) {
|
|
case error:
|
|
retErr = rr
|
|
default:
|
|
retErr = fmt.Errorf("%s", rr)
|
|
}
|
|
}
|
|
}()
|
|
|
|
var tmp interface{}
|
|
err := json.Unmarshal([]byte(input), &tmp)
|
|
if err != nil {
|
|
return "", false, err
|
|
}
|
|
|
|
rm, err := rmTag(tmp)
|
|
if err != nil {
|
|
return err.Error(), true, retErr
|
|
}
|
|
|
|
buf := new(bytes.Buffer)
|
|
err = toml.NewEncoder(buf).Encode(rm)
|
|
if err != nil {
|
|
return err.Error(), true, retErr
|
|
}
|
|
|
|
return buf.String(), false, retErr
|
|
}
|