def_time_mut.go 2.6 KB

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