map2struct.go 493 B

123456789101112131415161718192021222324252627282930
  1. package parser
  2. import (
  3. "fmt"
  4. "github.com/mitchellh/mapstructure"
  5. )
  6. func MapToStruct[T any](m map[string]any) (*T, error) {
  7. var s T
  8. decoder := &mapstructure.DecoderConfig{
  9. Metadata: nil,
  10. Result: &s,
  11. TagName: "json",
  12. Squash: true,
  13. }
  14. d, err := mapstructure.NewDecoder(decoder)
  15. if err != nil {
  16. return nil, fmt.Errorf("error creating decoder: %s", err)
  17. }
  18. err = d.Decode(m)
  19. if err != nil {
  20. return nil, fmt.Errorf("error decoding map: %s", err)
  21. }
  22. return &s, nil
  23. }