forked from mitchellh/mapstructure
-
Notifications
You must be signed in to change notification settings - Fork 34
Open
Description
Problem:
The metadata struct doesn't seem to populate when Decoding a Struct into a map.
Example:
https://go.dev/play/p/tNdbyQI4GE3
package main
import (
"fmt"
"github.com/go-viper/mapstructure/v2"
)
type ExampleStruct struct {
ID string `mapstructure:"id"`
Name string `mapstructure:"name"`
Description string `mapstructure:"description"`
Hidden string `mapstructure:"-"`
unexported string
}
func main() {
p := &ExampleStruct{
ID: "123",
Name: "test",
Description: "desc",
Hidden: "hidden",
unexported: "unexported value",
}
// Use the struct as input to create a map as output
var resultMap map[string]any
var metadata mapstructure.Metadata
// Decode FROM the struct TO a map
err := mapstructure.DecodeMetadata(p, &resultMap, &metadata)
if err != nil {
fmt.Printf("Error decoding: %v\n", err)
return
}
fmt.Printf("Original struct: %+v \n", p)
fmt.Println("Decode results: ", resultMap)
fmt.Println("Metadata Keys: ", metadata.Keys)
fmt.Println("Metadata Unused:", metadata.Unused)
fmt.Println("Metadata Unset: ", metadata.Unset)
}Output:
Original struct: &{ID:123 Name:test Description:desc Hidden:hidden unexported:unexported value}
Decode results: map[description:desc id:123 name:test]
Metadata Keys: []
Metadata Unused: []
Metadata Unset: []
Program exited.
Expected:
Original struct: &{ID:123 Name:test Description:desc Hidden:hidden unexported:unexported value}
Decode results: map[description:desc id:123 name:test]
Metadata Keys: [id name description]
Metadata Unused: []
Metadata Unset: [unexported -]
Program exited.
Metadata
Metadata
Assignees
Labels
No labels