| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- // package vmask -- набор масок для защиты "снизу"
- package vmask
- import (
- "encoding/json"
- )
- // AMask -- маска значения-объекта.
- type AMask byte
- // Mask -- маска для защиты "снизу".
- type Mask struct {
- Val AMask // `json:"mask"` Набор признаков.
- }
- // VMask -- обёртка маски для защиты "снизу".
- type VMask struct {
- val Mask // Набор признаков.
- }
- const (
- CanMut = AMask(0) // Признак мутабельности значения
- CanDefault = AMask(1) // Признак значения по умолчанию
- IsAuto = AMask(2) // Признак авто-инициализации
- )
- // NewVMask -- создать маску для защиты "снизу".
- func NewVMask(mask AMask) VMask {
- sf := VMask{
- val: Mask{
- Val: mask,
- },
- }
- return sf
- }
- // IsAuto -- возвращает признак авто-инициализации.
- func (sf *VMask) IsAuto() bool {
- return sf.val.Val&IsAuto != 0
- }
- // CanDefault -- возвращает признак значения по умолчанию.
- func (sf *VMask) CanDefault() bool {
- return sf.val.Val&CanDefault != 0
- }
- // CanMut -- возвращает признак мутабельности.
- func (sf *VMask) CanMut() bool {
- return sf.val.Val&CanMut != 0
- }
- // Get -- возвращает маску значения.
- func (sf *VMask) Get() AMask {
- return sf.val.Val
- }
- // MarshalJSON -- реализация интерфейса Marshaler.
- func (sf *VMask) MarshalJSON() ([]byte, error) {
- // Возвращаем кастомную строку JSON
- return json.Marshal(sf.val)
- }
- // UnmarshalJSON -- реализация интерфейса Unmarshaler.
- func (sf *VMask) UnmarshalJSON(binData []byte) error {
- var mask Mask
- if err := json.Unmarshal(binData, &mask); err != nil {
- return err
- }
- sf.val = mask
- return nil
- }
- // String -- строковое представление маски.
- func (sf *VMask) String() string {
- out := ""
- if sf.CanMut() {
- out += "CanMut"
- }
- if sf.CanDefault() {
- if len(out) > 0 {
- out += "|"
- }
- out += "CanDefault"
- }
- if sf.IsAuto() {
- if len(out) > 0 {
- out += "|"
- }
- out += "IsAuto"
- }
- return "[" + out + "]"
- }
|