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