package etime import ( "encoding/json" "fmt" "time" mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec" "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs" "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers" ) // ETime -- метка времени. // Вывод: "2006-01-02 15:04:05.000 -07 MST". type ETime struct { defs.ITimeFix isFill bool // Признак заполнения } // NewETime -- создает новый экземпляр ETime. func NewETime(val defs.ITimeFix) mKs.ITime { helpers.Hassert(val.Get() != "", "NewETime(): val is empty") sf := &ETime{ ITimeFix: val, isFill: true, } return sf } // NewETimeAuto -- создаёт фиксированную авто-метку времени. func NewETimeAuto() mKs.ITime { sf := &ETime{ isFill: true, } val := defs.TxtFix(time.Now().Local().Format("2006-01-02 15:04:05.000 -07 MST")) sf.Set(defs.ITimeFix(val)) return sf } // NewETimeAutoMut -- создаёт изменяемую авто-метку времени. func NewETimeAutoMut() mKs.ITimeMut { sf := &ETime{ isFill: true, } val := defs.TxtFix(time.Now().Local().Format("2006-01-02 15:04:05.000 -07 MST")) sf.Set(val) return sf } // String -- возвращает строку. func (sf *ETime) String() string { helpers.Hassert(sf.Get() != "", "ETime.String(): значение не инициализировано") return sf.ITimeFix.String() } // Time -- возвращает типизированную строку. func (sf *ETime) Time() defs.ITimeFix { helpers.Hassert(sf.Get() != "", "ETime.Time(): значение не инициализировано") return sf.ITimeFix } // Set -- устанавливает типизированное значение. func (sf *ETime) Set(val defs.ITimeFix) { helpers.Hassert(val.Get() != "", "ETime.Set(): val is empty") sf.ITimeFix = val } // MarshalJSON -- сериализует себя в строку. func (sf *ETime) MarshalJSON() ([]byte, error) { binMsg, err := json.Marshal(sf) if err != nil { err = fmt.Errorf("ETime.MarshalJSON(): in self marshall, err=\n\t%w", err) return nil, err } return binMsg, err } // UnmarshalJSON -- десериализует из строки. func (sf *ETime) UnmarshalJSON(binMsg []byte) error { if err := json.Unmarshal(binMsg, sf); err != nil { return fmt.Errorf("ETime.UnmarshalJSON(): in self unmarshall, err=\n\t%w", err) } return nil }