package etime import ( "encoding/json" "fmt" "time" "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs" "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers" mKt "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec" ) // ETime -- метка времени. // Вывод: "2006-01-02 15:04:05.000 -07 MST". type ETime struct { val defs.Time isMut bool // Мутабельность isFill bool // Признак заполнения } // NewETime -- создает новый экземпляр ETime. func NewETime(val defs.Time) mKt.ITime { helpers.Hassert(val != "", "NewETime(): val is empty") sf := &ETime{ val: val, isFill: true, } return sf } // NewETimeAuto -- создаёт фиксированную авто-метку времени. func NewETimeAuto() mKt.ITime { sf := &ETime{ isFill: true, } val := time.Now().Local().Format("2006-01-02 15:04:05.000 -07 MST") sf.Set(defs.Time(val)) return sf } // NewETimeAutoMut -- создаёт изменяемую авто-метку времени. func NewETimeAutoMut() mKt.ITimeMut { sf := &ETime{ isFill: true, isMut: true, } val := time.Now().Local().Format("2006-01-02 15:04:05.000 -07 MST") sf.Set(defs.Time(val)) return sf } // String -- возвращает строку. func (sf *ETime) String() string { helpers.Hassert(sf.val != "", "ETime.String(): значение не инициализировано") return string(sf.val) } // Get -- возвращает типизированную строку. func (sf *ETime) Get() defs.Time { helpers.Hassert(sf.val != "", "ETime.Get(): значение не инициализировано") return sf.val } // Set -- устанавливает типизированное значение. func (sf *ETime) Set(val defs.Time) { helpers.Hassert(sf.isMut, "ETime.Set(): значение фиксировано") helpers.Hassert(val != "", "ETime.Set(): val is empty") sf.val = 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 }