From 6b7780bb69289f7c463c36780611059fa118f5d8 Mon Sep 17 00:00:00 2001
From: Semyon Krestyaninov <krestyaninov@perx.ru>
Date: Wed, 19 Feb 2025 08:47:27 +0300
Subject: [PATCH] wip

---
 encode/json.go        |  4 +++-
 encode/reader_test.go | 12 ++++++------
 encode/writer_test.go |  6 +++---
 encode/yaml.go        |  4 +++-
 4 files changed, 15 insertions(+), 11 deletions(-)

diff --git a/encode/json.go b/encode/json.go
index ce591620..7c608756 100644
--- a/encode/json.go
+++ b/encode/json.go
@@ -11,7 +11,9 @@ import (
 // при кодировании или декодировании JSON.
 const bufferSize = 4096
 
-var JSON = &jsonCodec{}
+func JSONCodec() Codec {
+	return &jsonCodec{}
+}
 
 type jsonCodec struct{}
 
diff --git a/encode/reader_test.go b/encode/reader_test.go
index f023937e..a83b1cc3 100644
--- a/encode/reader_test.go
+++ b/encode/reader_test.go
@@ -15,7 +15,7 @@ func TestReader(t *testing.T) {
 	}
 	t.Run("json", func(t *testing.T) {
 		t.Run("primitive", func(t *testing.T) {
-			reader := encode.NewReader[int](encode.JSON, strings.NewReader("5"))
+			reader := encode.NewReader[int](encode.JSONCodec(), strings.NewReader("5"))
 
 			next := reader.Next()
 			assert.True(t, next)
@@ -27,7 +27,7 @@ func TestReader(t *testing.T) {
 			assert.Equal(t, 5, current)
 		})
 		t.Run("struct", func(t *testing.T) {
-			reader := encode.NewReader[user](encode.JSON, strings.NewReader(`{"name":"Gopher"}`))
+			reader := encode.NewReader[user](encode.JSONCodec(), strings.NewReader(`{"name":"Gopher"}`))
 
 			next := reader.Next()
 			assert.True(t, next)
@@ -39,7 +39,7 @@ func TestReader(t *testing.T) {
 			assert.Equal(t, user{"Gopher"}, current)
 		})
 		t.Run("valid array", func(t *testing.T) {
-			reader := encode.NewReader[int](encode.JSON, strings.NewReader("[1, 2, 3]"))
+			reader := encode.NewReader[int](encode.JSONCodec(), strings.NewReader("[1, 2, 3]"))
 			var result []int
 			for reader.Next() {
 				result = append(result, reader.Current())
@@ -49,7 +49,7 @@ func TestReader(t *testing.T) {
 			assert.Equal(t, []int{1, 2, 3}, result)
 		})
 		t.Run("invalid array", func(t *testing.T) {
-			reader := encode.NewReader[int](encode.JSON, strings.NewReader(`[1, 2, "3", 4]`))
+			reader := encode.NewReader[int](encode.JSONCodec(), strings.NewReader(`[1, 2, "3", 4]`))
 			var result []int
 			for reader.Next() {
 				result = append(result, reader.Current())
@@ -61,7 +61,7 @@ func TestReader(t *testing.T) {
 	})
 	t.Run("yaml", func(t *testing.T) {
 		t.Run("struct", func(t *testing.T) {
-			reader := encode.NewReader[user](encode.YAML, strings.NewReader(`name: "Gopher"`))
+			reader := encode.NewReader[user](encode.YAMLCodec(), strings.NewReader(`name: "Gopher"`))
 			next := reader.Next()
 			assert.True(t, next)
 			err := reader.Err()
@@ -73,7 +73,7 @@ func TestReader(t *testing.T) {
 			input := `name: "Gopher"
 ---
 name: "John"`
-			reader := encode.NewReader[user](encode.YAML, strings.NewReader(input))
+			reader := encode.NewReader[user](encode.YAMLCodec(), strings.NewReader(input))
 			var result []user
 			for reader.Next() {
 				result = append(result, reader.Current())
diff --git a/encode/writer_test.go b/encode/writer_test.go
index 10ee250c..3364f8e4 100644
--- a/encode/writer_test.go
+++ b/encode/writer_test.go
@@ -16,7 +16,7 @@ func TestWriter(t *testing.T) {
 	t.Run("json", func(t *testing.T) {
 		t.Run("valid array", func(t *testing.T) {
 			buf := &bytes.Buffer{}
-			writer := encode.NewWriter[int](encode.JSON, buf)
+			writer := encode.NewWriter[int](encode.JSONCodec(), buf)
 
 			err := writer.Write(1, 2, 3)
 			require.NoError(t, err)
@@ -31,7 +31,7 @@ func TestWriter(t *testing.T) {
 		})
 		t.Run("struct", func(t *testing.T) {
 			buf := &bytes.Buffer{}
-			writer := encode.NewWriter[user](encode.JSON, buf)
+			writer := encode.NewWriter[user](encode.JSONCodec(), buf)
 
 			err := writer.Write(user{"Gopher"}, user{"John"})
 			require.NoError(t, err)
@@ -45,7 +45,7 @@ func TestWriter(t *testing.T) {
 	t.Run("yaml", func(t *testing.T) {
 		t.Run("valid array", func(t *testing.T) {
 			buf := &bytes.Buffer{}
-			writer := encode.NewWriter[user](encode.YAML, buf)
+			writer := encode.NewWriter[user](encode.YAMLCodec(), buf)
 
 			err := writer.Write(
 				user{Name: "Gopher"},
diff --git a/encode/yaml.go b/encode/yaml.go
index d85ec2ad..54dd3cfd 100644
--- a/encode/yaml.go
+++ b/encode/yaml.go
@@ -8,7 +8,9 @@ import (
 	"gopkg.in/yaml.v3"
 )
 
-var YAML = &yamlCodec{}
+func YAMLCodec() Codec {
+	return &yamlCodec{}
+}
 
 type yamlCodec struct{}
 
-- 
GitLab