Skip to content
Snippets Groups Projects
Verified Commit 77af24d7 authored by Volker Schukai's avatar Volker Schukai :alien:
Browse files

feat: set support slieces #8

parent b88fef16
No related branches found
No related tags found
No related merge requests found
......@@ -45,3 +45,48 @@ func TestSetValue(t *testing.T) {
assert.Equal(t, v, nv)
}
type Issue7Routing struct {
P PathValue `json:"p" yaml:"p"`
X string `json:"x" yaml:"x"`
}
type Issue7Server struct {
Routing []Issue7Routing `json:"routing" yaml:"routing"`
}
type Issue7Config struct {
Server Issue7Server `json:"server" yaml:"server"`
}
func TestPathRewrite(t *testing.T) {
obj := Issue7Config{
Server: Issue7Server{
Routing: []Issue7Routing{
{
P: "./test",
X: "testX",
},
},
},
}
v, err := GetValue[*Issue7Config](&obj, "Server.Routing.0.P")
assert.Nil(t, err)
assert.Equal(t, v, PathValue("./test"))
nv := PathValue("newValue")
err = SetValue[*Issue7Config](&obj, "Server.Routing.0.P", nv)
assert.Nil(t, err)
if obj.Server.Routing[0].P != "newValue" {
t.Fatalf("expected newValue, got: %s", obj.Server.Routing[0].P)
}
v, err = GetValue[*Issue7Config](&obj, "Server.Routing.0.P")
assert.Nil(t, err)
assert.Equal(t, v, nv)
}
......@@ -85,6 +85,19 @@ func SetValue[D any](obj D, keyWithDots string, newValue any) error {
switch v.Elem().Kind() {
case reflect.Struct:
v = v.Elem().FieldByName(key)
case reflect.Slice:
// index is a number and get v from slice with index
index, err := strconv.Atoi(key)
if err != nil {
return newInvalidPathError(keyWithDots)
}
if index >= v.Elem().Len() {
return newInvalidPathError(keyWithDots)
}
v = v.Elem().Index(index)
default:
return newUnsupportedTypePathError(keyWithDots, v.Type())
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment