field_converter.go 773 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. package rest
  2. import (
  3. "fmt"
  4. "time"
  5. )
  6. var (
  7. fieldConverters = make(map[string]*FieldConverter)
  8. )
  9. type FieldConverter struct {
  10. Pack func(any) any
  11. Unpack func(any) (any, error)
  12. }
  13. func RegisterFieldConverter(name string, converter *FieldConverter) {
  14. fieldConverters[name] = converter
  15. }
  16. var (
  17. fcTime = &FieldConverter{
  18. Pack: func(v any) any {
  19. t := v.(time.Time)
  20. return t.Format("02.01.2006 15:04")
  21. },
  22. Unpack: func(val any) (any, error) {
  23. ts, check := val.(string)
  24. if !check {
  25. return nil, fmt.Errorf("expected string")
  26. }
  27. layout := "02.01.2006 15:04"
  28. parsedTime, err := time.Parse(layout, ts)
  29. if err != nil {
  30. return nil, err
  31. }
  32. return parsedTime, nil
  33. },
  34. }
  35. )
  36. func init() {
  37. RegisterFieldConverter("time.Time", fcTime)
  38. }