From fdf88caf15c6b8f4e1e614f3f91e133d0ac4000a Mon Sep 17 00:00:00 2001 From: ko_oler <kooler89@gmail.com> Date: Tue, 6 Feb 2024 11:38:02 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B0=20=D1=81=D0=B8=D0=B3=D0=BD=D0=B0=D1=82=D1=83=D1=80=D0=B0?= =?UTF-8?q?=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B8=20FromMap?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- id/id.go | 39 +++++++++++++++++++++------------------ id/id_test.go | 9 +++++---- 2 files changed, 26 insertions(+), 22 deletions(-) diff --git a/id/id.go b/id/id.go index 920b4edb..d3212dea 100644 --- a/id/id.go +++ b/id/id.go @@ -93,42 +93,45 @@ func Join(parts ...string) string { return s } -func (id *ID) FromMap(m map[string]any) error { +func FromMap(m map[string]any) (*ID, error) { if m == nil { - return errors.New("nil map") + return nil, errors.New("nil map") } + v := new(ID) + switch m["type"] { case Organization: - id.Descriptor = new(OrganizationID) + v.Descriptor = new(OrganizationID) case Service: - id.Descriptor = new(ServiceID) + v.Descriptor = new(ServiceID) case User: - id.Descriptor = new(UserID) + v.Descriptor = new(UserID) case Space: - id.Descriptor = new(SpaceID) + v.Descriptor = new(SpaceID) case Environment: - id.Descriptor = new(EnvironmentID) + v.Descriptor = new(EnvironmentID) case Client: - id.Descriptor = new(ClientID) + v.Descriptor = new(ClientID) case Role: - id.Descriptor = new(RoleID) + v.Descriptor = new(RoleID) case Collection: - id.Descriptor = new(CollectionID) + v.Descriptor = new(CollectionID) case Schema: - id.Descriptor = new(SchemaID) + v.Descriptor = new(SchemaID) case Item: - id.Descriptor = new(ItemID) + v.Descriptor = new(ItemID) case Revision: - id.Descriptor = new(RevisionID) + v.Descriptor = new(RevisionID) case Field: - id.Descriptor = new(FieldID) + v.Descriptor = new(FieldID) default: - return errors.New("unknown type") + return nil, errors.New("unknown type") } - if err := id.Descriptor.FromMap(m); err != nil { - return err + + if err := v.Descriptor.FromMap(m); err != nil { + return nil, err } - return nil + return v, nil } diff --git a/id/id_test.go b/id/id_test.go index 757586d8..a5a75cc5 100644 --- a/id/id_test.go +++ b/id/id_test.go @@ -3,6 +3,7 @@ package id import ( "testing" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -282,10 +283,10 @@ func Test_Map(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - v := new(ID) - _ = v.FromMap(tt.id.ToMap()) - require.Equal(t, tt.id, v, "проверка FromMap для типа ID, должен быть равен исходному значению") - require.Equal(t, v.ToMap(), tt.id.ToMap()) + v, err := FromMap(tt.id.ToMap()) + require.NoError(t, err) + assert.Equal(t, tt.id, v, "проверка FromMap для типа ID, должен быть равен исходному значению") + assert.Equal(t, v.ToMap(), tt.id.ToMap()) }) } } -- GitLab