arch_node.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. // package arch_node -- архитектурный узел
  2. package arch_node
  3. import (
  4. "fmt"
  5. "github.com/google/uuid"
  6. "gitp78su.ipnodns.ru/svi/kern/v3"
  7. "gitp78su.ipnodns.ru/svi/kern/v3/krn/ktypes"
  8. "gitp78su.ipnodns.ru/svi/goarch/lev0/alias"
  9. )
  10. // ArchNode -- архитектурный узел
  11. type ArchNode struct {
  12. Id_ alias.ArchId `yaml:"id"` // Идентификатор узла
  13. Type_ alias.ArchType `yaml:"type"` // Тип узла
  14. ParentId_ alias.ArchId `yaml:"parent_id"` // ID предка
  15. }
  16. var (
  17. hassert = kern.GetFnHassert()
  18. )
  19. // NewArchNode -- возвращает новый архитектурный узел
  20. func NewArchNode(archType alias.ArchType, parentId alias.ArchId) *ArchNode {
  21. sf := &ArchNode{
  22. Id_: alias.ArchId(uuid.New().String()),
  23. Type_: archType,
  24. ParentId_: parentId,
  25. }
  26. sf.selfCheck()
  27. return sf
  28. }
  29. // ParentId -- возвращает ID родителя
  30. //
  31. //go:fix inline
  32. func (sf *ArchNode) ParentId() alias.ArchId {
  33. return sf.ParentId_
  34. }
  35. // Type -- возвращает тип объекта
  36. //
  37. //go:fix inline
  38. func (sf *ArchNode) Type() alias.ArchType {
  39. return sf.Type_
  40. }
  41. // Id -- возвращает ID объекта
  42. //
  43. //go:fix inline
  44. func (sf *ArchNode) Id() alias.ArchId {
  45. return sf.Id_
  46. }
  47. // SelfCheck -- самопроверка базового элемента
  48. func (sf *ArchNode) selfCheck() {
  49. hassert(sf.Id_ != "", "ArchNode.selfCheck(): id is empty")
  50. hassert(sf.Type_ != "", "ArchNode.selfCheck(): id:%s, Type_ is empty", sf.Id_)
  51. hassert(sf.ParentId_ != "", "ArchNode.selfCheck(): id:%s, ParentId_ is empty", sf.Id_)
  52. }
  53. // InvarNode -- проверка инвариантов
  54. func (sf *ArchNode) InvarNode() ktypes.Option[error] {
  55. if sf.Id_ == "" {
  56. err := fmt.Errorf("ArchNode.InvarNode(): Id_ is empty")
  57. return ktypes.NewSome(err)
  58. }
  59. if sf.Type_ == "" {
  60. err := fmt.Errorf("ArchNode.InvarNode(): id:%s, Type_ is empty", sf.Id_)
  61. return ktypes.NewSome(err)
  62. }
  63. if sf.ParentId_ == "" {
  64. err := fmt.Errorf("ArchNode.InvarNode(): id:%s, ParentId_ is empty", sf.Id_)
  65. return ktypes.NewSome(err)
  66. }
  67. return ktypes.NewNone[error]()
  68. }