time.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435
  1. package rest
  2. import (
  3. "fmt"
  4. "reflect"
  5. "time"
  6. )
  7. // Time используется для формирования объекта времени из формата UnixMilli, а так же выгрузки в этот формат в результирующем объекте
  8. type Time time.Time
  9. // RestFields выгружает объект в результирующий объект в формат UnixMilli
  10. func (s *Time) RestFields(fieldName string, names ...any) (any, IErrorArgs) {
  11. if len(names) > 0 {
  12. return nil, ErrorFiled(fmt.Sprintf("%v.%v", fieldName, names[0]), "field is not exists")
  13. }
  14. return time.Time(*s).UnixMilli(), nil
  15. }
  16. // RestFrom формирует из поля типа int64 объект времени
  17. func (s *Time) RestFrom(source any) (err IErrorArgs) {
  18. defer func() {
  19. if r := recover(); r != nil {
  20. err = ErrorMessage("ErrParse", fmt.Sprintf("time: expected millisecond timestamp, given: %v", source))
  21. }
  22. }()
  23. rVal := reflect.ValueOf(source)
  24. *s = Time(time.UnixMilli(rVal.Int()))
  25. return
  26. }
  27. // Time возвращает объект времени типа time.Time
  28. func (s *Time) Time() time.Time {
  29. return time.Time(*s)
  30. }