rework metadata
All checks were successful
pr / test (pull_request) Successful in 2m10s
lint / lint (pull_request) Successful in 10m35s

Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
This commit is contained in:
2024-03-09 17:21:20 +03:00
parent 4b261083d6
commit 2f8c0d9f9d
12 changed files with 152 additions and 279 deletions

View File

@@ -158,17 +158,28 @@ func Metadata(md ...any) Option {
case metadata.Metadata:
result = metadata.Copy(vt)
case map[string]string:
result = make(metadata.Metadata, len(vt))
for k, v := range vt {
result.Set(k, v)
}
case map[string][]string:
result = metadata.Copy(vt)
default:
result = metadata.New(0)
}
} else {
result = metadata.New(len(md) / 2)
for idx := 0; idx < len(md)/2; idx += 2 {
k, kok := md[idx].(string)
v, vok := md[idx+1].(string)
if kok && vok {
result.Set(k, v)
for idx := 0; idx <= len(md)/2; idx += 2 {
k, ok := md[idx].(string)
switch vt := md[idx+1].(type) {
case string:
if ok {
result.Set(k, vt)
}
case []string:
if ok {
result.Append(k, vt...)
}
}
}
}

View File

@@ -100,40 +100,29 @@ func TestMetadataAny(t *testing.T) {
}{
{
"strings_even",
[]any{"key1", "val1", "key2", "val2"},
metadata.Metadata{
"Key1": "val1",
"Key2": "val2",
},
[]any{"Strkey1", []string{"val1"}, "Strkey2", []string{"val2"}},
metadata.Pairs("Strkey1", "val1", "Strkey2", "val2"),
},
{
"strings_odd",
[]any{"key1", "val1", "key2"},
metadata.Metadata{
"Key1": "val1",
},
metadata.Pairs("Key1", "val1"),
},
{
Name: "map",
Data: map[string]string{
"key1": "val1",
"key2": "val2",
Data: map[string][]string{
"Mapkey1": {"val1"},
"Mapkey2": {"val2"},
},
Expected: metadata.Metadata{
"Key1": "val1",
"Key2": "val2",
"Mapkey1": []string{"val1"},
"Mapkey2": []string{"val2"},
},
},
{
"metadata.Metadata",
metadata.Metadata{
"key1": "val1",
"key2": "val2",
},
metadata.Metadata{
"Key1": "val1",
"Key2": "val2",
},
metadata.Pairs("key1", "val1", "key2", "val2"),
metadata.Pairs("Key1", "val1", "Key2", "val2"),
},
}
@@ -143,8 +132,9 @@ func TestMetadataAny(t *testing.T) {
var opts []options.Option
switch valData := tt.Data.(type) {
case []any:
fmt.Printf("%s any %#+v\n", tt.Name, valData)
opts = append(opts, options.Metadata(valData...))
case map[string]string, metadata.Metadata:
case map[string]string, map[string][]string, metadata.Metadata:
opts = append(opts, options.Metadata(valData))
}
@@ -153,7 +143,7 @@ func TestMetadataAny(t *testing.T) {
t.Fatal(err)
}
if !reflect.Equal(tt.Expected, src.Metadata) {
t.Fatal(fmt.Sprintf("expected: %v, actual: %v", tt.Expected, src.Metadata))
t.Fatalf("expected: %v, actual: %v", tt.Expected, src.Metadata)
}
}
})