def_time_mut.go 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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/result"
  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. owner *owner.LOwner
  20. }
  21. // MutTime -- возвращает новое внутреннее изменяемое время.
  22. func MutTime[T def_spec_fn.TxtConstraint](owner *owner.LOwner, val T) *MTime {
  23. helpers.If(owner == nil).Hassert("MutTime(): owner==nil")
  24. helpers.If(val == "").Hassert("MutTime(): val is empty")
  25. sf := &MTime{
  26. Mut: def_mut.NewMut(owner, def_spec_base.Time(val)),
  27. owner: owner,
  28. }
  29. return sf
  30. }
  31. // MutTimeAuto -- возвращает новое автоматическое внутреннее изменяемое время.
  32. //
  33. // Вывод: "2006-01-02 15:04:05.000 -07 MST".
  34. func MutTimeAuto(owner *owner.LOwner) *MTime {
  35. _val := time.Now().Local().Format("2006-01-02 15:04:05.000 -07 MST")
  36. val := def_spec_base.Time(_val)
  37. sf := &MTime{
  38. Mut: def_mut.NewMut(owner, val),
  39. owner: owner,
  40. }
  41. return sf
  42. }
  43. // MutTimeFromTuf -- десериализует из def_spec_base.ATxt в строки.
  44. func MutTimeFromTuf(owner *owner.LOwner, txtMsg def_spec_base.Txt) *result.Result[def_spec_base.Txt] {
  45. resRec := tuf.RecFromTuf(owner, "ETime", txtMsg) // Получить текст записи
  46. if resRec.IsErr() {
  47. err := def_err.LetErr(owner, "MutTimeFromTuf(): in extract record from TUF, err=\n\t%v", resRec.Error())
  48. return result.ResErr[def_spec_base.Txt](err)
  49. }
  50. return resRec
  51. }
  52. // Get -- получить время.
  53. //
  54. // Вывод: "2006-01-02 15:04:05.000 -07 MST".
  55. func (sf *MTime) Get() def_spec_base.Time {
  56. return def_spec_base.Time(sf.Mut.Get())
  57. }
  58. // ToTuf -- сериализует себя в строку.
  59. func (sf *MTime) ToTuf() def_spec_base.Txt {
  60. txtRes := tuf.StrToTuf("val", def_spec_base.Txt(sf.Mut.Get()))
  61. lenVal := len(string(sf.Mut.Get()))
  62. isFill := def_spec_base.Bool(lenVal > 0)
  63. txtRes += tuf.BoolToTuf("isFill", isFill)
  64. txtRes = tuf.RecToTuf("MTime", txtRes)
  65. return txtRes
  66. }
  67. // Set -- устанавливает типизированное значение.
  68. func (sf *MTime) Set(val def_spec_base.Time) {
  69. helpers.If(val == "").Hassert("MTime.Set(): val is empty")
  70. sf.Mut.Set(val)
  71. }
  72. // String -- возвращает строку.
  73. func (sf *MTime) String() string {
  74. return string(sf.Mut.Get())
  75. }