etime.go 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package etime
  2. import (
  3. "time"
  4. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
  5. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
  6. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
  7. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/tuf"
  8. )
  9. // ETime -- метка времени.
  10. // Вывод: "2006-01-02 15:04:05.000 -07 MST".
  11. type ETime struct {
  12. core_spec.ITimeFix
  13. isFill defs.Bool // Признак заполнения
  14. }
  15. // NewETime -- создает новый экземпляр ETime.
  16. func NewETime(val core_spec.ITimeFix) core_spec.ITime {
  17. helpers.If(val.Get() == "").Hassert("NewETime(): val is empty")
  18. sf := &ETime{
  19. ITimeFix: val,
  20. isFill: true,
  21. }
  22. return sf
  23. }
  24. // NewETimeAuto -- создаёт фиксированную авто-метку времени.
  25. func NewETimeAuto() core_spec.ITime {
  26. sf := &ETime{
  27. isFill: true,
  28. }
  29. val := defs.TxtFix(time.Now().Local().Format("2006-01-02 15:04:05.000 -07 MST"))
  30. sf.Set(core_spec.ITimeFix(val))
  31. return sf
  32. }
  33. // NewETimeAutoMut -- создаёт изменяемую авто-метку времени.
  34. func NewETimeAutoMut() core_spec.ITimeMut {
  35. sf := &ETime{
  36. isFill: true,
  37. }
  38. val := defs.TxtFix(time.Now().Local().Format("2006-01-02 15:04:05.000 -07 MST"))
  39. sf.Set(val)
  40. return sf
  41. }
  42. // String -- возвращает строку.
  43. func (sf *ETime) String() string {
  44. helpers.If(sf.Get() == "").Hassert("ETime.String(): значение не инициализировано")
  45. return sf.ITimeFix.String()
  46. }
  47. // Time -- возвращает типизированную строку.
  48. func (sf *ETime) Time() core_spec.ITimeFix {
  49. helpers.If(sf.Get() == "").Hassert("ETime.Time(): значение не инициализировано")
  50. return sf.ITimeFix
  51. }
  52. // Set -- устанавливает типизированное значение.
  53. func (sf *ETime) Set(val core_spec.ITimeFix) {
  54. helpers.If(val.Get() == "").Hassert("ETime.Set(): val is empty")
  55. sf.ITimeFix = val
  56. }
  57. // ToTuf -- сериализует себя в строку.
  58. func (sf *ETime) ToTuf() defs.ATxt {
  59. txtRes := tuf.StrToTuf("val", sf.Get())
  60. txtRes += tuf.BoolToTuf("isFill", sf.isFill)
  61. txtRes = tuf.RecToTuf("ETime", txtRes)
  62. return txtRes
  63. }
  64. // FromTuf -- десериализует из defs.ATxt в строки.
  65. func (sf *ETime) FromTuf(txtMsg defs.ATxt) defs.IOption[defs.IErr] {
  66. resRec := tuf.RecFromTuf("ETime", txtMsg) // Получить текст записи
  67. if resRec.IsErr() {
  68. err := defs.Err("ETime.FromTuf(): in extract record from TUF, err=\n\t%v", resRec.Error())
  69. return defs.NewSome(err)
  70. }
  71. return defs.NewNone[defs.IErr]()
  72. }