yaml.go 834 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. package parser
  2. import (
  3. "github.com/go-playground/validator/v10"
  4. "gopkg.in/yaml.v3"
  5. )
  6. func UnmarshalYaml[T any](text string, validator ...validator.Validate) (T, error) {
  7. return UnmarshalYamlBytes[T]([]byte(text), validator...)
  8. }
  9. func UnmarshalYamlBytes[T any](data []byte, validator ...validator.Validate) (T, error) {
  10. var result T
  11. err := yaml.Unmarshal(data, &result)
  12. if err != nil {
  13. return result, err
  14. }
  15. if len(validator) > 0 {
  16. if err := validator[0].Struct(result); err != nil {
  17. return result, err
  18. }
  19. }
  20. return result, err
  21. }
  22. func MarshalYaml[T any](data T) string {
  23. return string(MarshalYamlBytes(data))
  24. }
  25. func MarshalYamlBytes[T any](data T) []byte {
  26. b, _ := yaml.Marshal(data)
  27. return b
  28. }
  29. func UnmarshalYaml2Map(yaml []byte) (map[string]any, error) {
  30. return UnmarshalYamlBytes[map[string]any](yaml)
  31. }