def_time_mut.go 2.6 KB

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