def_time_let.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. // package def_time -- внутреннее низменяемое время
  2. package def_time
  3. import (
  4. "time"
  5. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_err"
  6. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec_base"
  7. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec_fn"
  8. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
  9. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/option"
  10. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/tuf"
  11. )
  12. // LTime -- внутренее неизменяемое время.
  13. //
  14. // Вывод: "2006-01-02 15:04:05.000 -07 MST".
  15. type LTime struct {
  16. val def_spec_base.Time
  17. }
  18. // LetTime -- возвращает новое внутреннее неизменяемое время.
  19. func LetTime[T def_spec_fn.TxtConstraint](val T) *LTime {
  20. helpers.If(val == "").Hassert("LetTime(): val is empty")
  21. sf := &LTime{
  22. val: def_spec_base.Time(val),
  23. }
  24. return sf
  25. }
  26. // LetTimeAuto -- возвращает новое автоматическое внутреннее неизменяемое время.
  27. //
  28. // Вывод: "2006-01-02 15:04:05.000 -07 MST".
  29. func LetTimeAuto() *LTime {
  30. _val := time.Now().Local().Format("2006-01-02 15:04:05.000 -07 MST")
  31. val := def_spec_base.Time(_val)
  32. sf := &LTime{
  33. val: val,
  34. }
  35. return sf
  36. }
  37. // LetTimeFromTuf -- десериализует из def_spec_base.ATxt.
  38. func LetTimeFromTuf(txtMsg def_spec_base.Txt) *option.Option[*def_err.LErr] {
  39. resRec := tuf.RecFromTuf("ETime", txtMsg) // Получить текст записи
  40. if resRec.IsErr() {
  41. err := def_err.LetErr("FromTuf(): in extract record from TUF, err=\n\t%v", resRec.Error())
  42. return option.NewSome(err)
  43. }
  44. return option.NewNone[*def_err.LErr]()
  45. }
  46. // Get -- получить время.
  47. //
  48. // Вывод: "2006-01-02 15:04:05.000 -07 MST".
  49. func (sf *LTime) Get() def_spec_base.Time {
  50. return sf.val
  51. }
  52. // ToTuf -- сериализует себя в строку.
  53. func (sf *LTime) ToTuf() def_spec_base.Txt {
  54. txtRes := tuf.StrToTuf("val", def_spec_base.Txt(sf.val))
  55. lenVal := len(sf.val)
  56. isFill := def_spec_base.Bool(lenVal > 0)
  57. txtRes += tuf.BoolToTuf("isFill", isFill)
  58. txtRes = tuf.RecToTuf("LTime", txtRes)
  59. return txtRes
  60. }
  61. // String -- возвращает строку.
  62. func (sf *LTime) String() string {
  63. return string(sf.val)
  64. }