added unmarshal

This commit is contained in:
Kofo Okesola 2025-04-16 20:48:25 +01:00
parent cc4ffc9abc
commit 6eff475c6f
4 changed files with 135 additions and 2 deletions

View File

@ -35,6 +35,28 @@ type Action struct {
Fail string `json:"fail" yaml:"fail"` Fail string `json:"fail" yaml:"fail"`
} }
func (a *Action) UnmarshalYAML(unmarshal func(interface{}) error) error {
var tmp struct {
Type string `yaml:"type"`
NewConfig map[string]interface{} `yaml:"config"`
Next string `yaml:"next"`
Fail string `yaml:"fail"`
}
if err := unmarshal(&tmp); err != nil {
return err
}
config, err := json.Marshal(tmp.NewConfig)
if err != nil {
return err
}
a.Type = tmp.Type
a.Config = config
a.NewConfig = tmp.NewConfig
a.Next = tmp.Next
a.Fail = tmp.Fail
return nil
}
type ConditionalExpressions struct { type ConditionalExpressions struct {
Value string `json:"value" yaml:"value"` Value string `json:"value" yaml:"value"`
Type string `json:"type" yaml:"type"` Type string `json:"type" yaml:"type"`
@ -65,3 +87,25 @@ type DatasourceConfig struct {
NewConfig map[string]interface{} `yaml:"config"` NewConfig map[string]interface{} `yaml:"config"`
Type string `json:"type" yaml:"type"` Type string `json:"type" yaml:"type"`
} }
func (d *DatasourceConfig) UnmarshalYAML(unmarshal func(interface{}) error) error {
var tmp struct {
Type string `yaml:"type"`
NewConfig map[string]interface{} `yaml:"config"`
ID string `yaml:"id"`
}
if err := unmarshal(&tmp); err != nil {
return err
}
data, err := json.Marshal(tmp.NewConfig)
if err != nil {
return err
}
d.Type = tmp.Type
d.Config = data
d.ID = tmp.ID
d.NewConfig = tmp.NewConfig
return nil
}

View File

@ -0,0 +1,75 @@
package apiconfig
import (
"encoding/json"
"github.com/stretchr/testify/assert"
"gopkg.in/yaml.v3"
"testing"
)
func TestUnmarshalActionYAML(t *testing.T) {
yamlData := `
type: some_type
config:
key1: value1
key2: value2
next: next_action
fail: fail_action
`
var action Action
err := yaml.Unmarshal([]byte(yamlData), &action)
if err != nil {
t.Fatalf("Failed to unmarshal Action: %v", err)
}
if action.Type != "some_type" {
t.Errorf("Expected Type to be 'some_type', but got '%s'", action.Type)
}
expectedConfig := map[string]interface{}{
"key1": "value1",
"key2": "value2",
}
var config map[string]interface{}
if err := json.Unmarshal(action.Config, &config); err != nil {
t.Fatalf("Failed to unmarshal action.Config: %v", err)
}
assert.Equal(t, expectedConfig, config)
}
func TestUnmarshalDatasourceConfigYAML(t *testing.T) {
yamlData := `
id: some_id
type: some_type
config:
key3: value3
key4: value4
`
var datasourceConfig DatasourceConfig
err := yaml.Unmarshal([]byte(yamlData), &datasourceConfig)
if err != nil {
t.Fatalf("Failed to unmarshal DatasourceConfig: %v", err)
}
if datasourceConfig.ID != "some_id" {
t.Errorf("Expected ID to be 'some_id', but got '%s'", datasourceConfig.ID)
}
if datasourceConfig.Type != "some_type" {
t.Errorf("Expected Type to be 'some_type', but got '%s'", datasourceConfig.Type)
}
expectedConfig := map[string]interface{}{
"key3": "value3",
"key4": "value4",
}
var config map[string]interface{}
if err := json.Unmarshal(datasourceConfig.Config, &config); err != nil {
t.Fatalf("Failed to unmarshal datasourceConfig.Config: %v", err)
}
assert.Equal(t, expectedConfig, config)
}

4
go.mod
View File

@ -5,9 +5,13 @@ go 1.22.4
require ( require (
google.golang.org/grpc v1.67.1 google.golang.org/grpc v1.67.1
google.golang.org/protobuf v1.35.1 google.golang.org/protobuf v1.35.1
gopkg.in/yaml.v3 v3.0.1
) )
require ( require (
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/stretchr/testify v1.10.0 // indirect
golang.org/x/net v0.28.0 // indirect golang.org/x/net v0.28.0 // indirect
golang.org/x/sys v0.24.0 // indirect golang.org/x/sys v0.24.0 // indirect
golang.org/x/text v0.17.0 // indirect golang.org/x/text v0.17.0 // indirect

14
go.sum
View File

@ -1,3 +1,11 @@
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE= golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE=
golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg= golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg=
golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg= golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg=
@ -8,7 +16,9 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 h1:
google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU=
google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E= google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E=
google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA=
google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg=
google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw=
google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA= google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA=
google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=