// package elem_base -- базовый объект
package elem_base
import (
"encoding/json"
"fmt"
"gitp78su.ipnodns.ru/svi/goarch/lev0/alias"
"gitp78su.ipnodns.ru/svi/goarch/pkg/elems/label"
)
// ElemBase -- базовый объект
type ElemBase struct {
*label.Label `json:"label"` // название объекта
Id_ alias.Id `json:"id"` // Идентификатор объекта
Type_ alias.Type `json:"type"` // Тип объекта
Elem_ map[string]interface{} // Набор полей
StrElem_ string // Строковое представление объекта
}
// NewElemBase -- возвращает новый базовый объект
func NewElemBase(elem map[string]interface{}) (*ElemBase, error) {
binElem, _ := json.MarshalIndent(elem, "", " ")
_id0, isOk := elem["id"]
if !isOk {
return nil, fmt.Errorf("NewElemBase(): field 'id' not found
%+v", string(binElem))
}
id, isOk := _id0.(string)
if !isOk {
return nil, fmt.Errorf("NewElemBase(): field 'id'(%+v) not string
%+v", _id0, string(binElem))
}
if id == "" {
return nil, fmt.Errorf("NewElemBase(): id is empty
%+v", string(binElem))
}
_type, isOk := elem["type"]
if !isOk {
return nil, fmt.Errorf("NewElemBase(): id=%q, field 'type' not found
%+v", id, string(binElem))
}
strType, isOk := _type.(string)
if !isOk {
return nil, fmt.Errorf("NewElemBase(): id=%q, field 'type'(%+v) not string
%+v", id, _type, string(binElem))
}
sf := &ElemBase{
Elem_: elem,
StrElem_: string(binElem),
Label: label.NewLabel(elem),
Id_: alias.Id(id),
Type_: alias.Type(strType),
}
return sf, nil
}
// Elem -- возвращает элементы словаря
func (sf *ElemBase) Elem() map[string]interface{} {
return sf.Elem_
}
// Type -- возвращает тип объекта
func (sf *ElemBase) Type() alias.Type {
return sf.Type_
}
// Id -- возвращает ID объекта
func (sf *ElemBase) Id() alias.Id {
return sf.Id_
}