field_converter.go 849 B

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