From ebe94ee45815568e73a27d193fb9da6ef03d43f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Flc=E3=82=9B?= Date: Thu, 23 Nov 2023 08:10:41 +0800 Subject: [PATCH] refactor(serializer): remove contract (#33) * refactor(serializer): remove contract * refactor(serializer): remove contract --- cache/redis/store.go | 8 +++--- serializer/README.md | 30 ++++++++++++++++++++ serializer/example_test.go | 24 ++++++++++++++++ serializer/{ => json}/json.go | 10 ++----- serializer/json/json_test.go | 35 ++++++++++++++++++++++++ serializer/json_test.go | 7 ----- {contract => serializer}/serializable.go | 5 +++- 7 files changed, 100 insertions(+), 19 deletions(-) create mode 100644 serializer/README.md create mode 100644 serializer/example_test.go rename serializer/{ => json}/json.go (58%) create mode 100644 serializer/json/json_test.go delete mode 100644 serializer/json_test.go rename {contract => serializer}/serializable.go (52%) diff --git a/cache/redis/store.go b/cache/redis/store.go index de8158ae..e8b252c6 100644 --- a/cache/redis/store.go +++ b/cache/redis/store.go @@ -4,16 +4,16 @@ import ( "context" "time" - serializerContract "github.com/go-packagist/go-kratos-components/contract" "github.com/go-packagist/go-kratos-components/contract/cache" "github.com/go-packagist/go-kratos-components/serializer" + "github.com/go-packagist/go-kratos-components/serializer/json" "github.com/redis/go-redis/v9" ) type options struct { prefix string redis redis.Cmdable - serializer serializerContract.Serializable + serializer serializer.Serializable } func (o *options) setup() { @@ -22,7 +22,7 @@ func (o *options) setup() { } if o.serializer == nil { - o.serializer = serializer.JsonSerializer + o.serializer = json.Serializer } } @@ -42,7 +42,7 @@ func Redis(redis redis.Cmdable) Option { } } -func Serializer(serializer serializerContract.Serializable) Option { +func Serializer(serializer serializer.Serializable) Option { return func(o *options) { o.serializer = serializer } diff --git a/serializer/README.md b/serializer/README.md new file mode 100644 index 00000000..9d25c225 --- /dev/null +++ b/serializer/README.md @@ -0,0 +1,30 @@ +# Serializer + +## Usage + +```go +package serializer_test + +import ( + "log" + + "github.com/go-packagist/go-kratos-components/serializer/json" +) + +var j = json.Serializer + +func ExampleJSON() { + bytes, err := j.Serialize(map[string]string{ + "key": "value", + }) + if err != nil { + log.Fatal(err) + } + + var dest map[string]string + err = j.Unserialize(bytes, &dest) + if err != nil { + log.Fatal(err) + } +} +``` \ No newline at end of file diff --git a/serializer/example_test.go b/serializer/example_test.go new file mode 100644 index 00000000..0148a622 --- /dev/null +++ b/serializer/example_test.go @@ -0,0 +1,24 @@ +package serializer_test + +import ( + "log" + + "github.com/go-packagist/go-kratos-components/serializer/json" +) + +var j = json.Serializer + +func ExampleJSON() { + bytes, err := j.Serialize(map[string]string{ + "key": "value", + }) + if err != nil { + log.Fatal(err) + } + + var dest map[string]string + err = j.Unserialize(bytes, &dest) + if err != nil { + log.Fatal(err) + } +} diff --git a/serializer/json.go b/serializer/json/json.go similarity index 58% rename from serializer/json.go rename to serializer/json/json.go index 6b3454f8..a182305e 100644 --- a/serializer/json.go +++ b/serializer/json/json.go @@ -1,19 +1,15 @@ -package serializer +package json import ( "encoding/json" - "github.com/go-packagist/go-kratos-components/contract" + "github.com/go-packagist/go-kratos-components/serializer" ) -var JsonSerializer = newJsonSerializer() +var Serializer serializer.Serializable = &jsonSerializer{} type jsonSerializer struct{} -func newJsonSerializer() contract.Serializable { - return &jsonSerializer{} -} - func (j *jsonSerializer) Serialize(data interface{}) ([]byte, error) { return json.Marshal(data) } diff --git a/serializer/json/json_test.go b/serializer/json/json_test.go new file mode 100644 index 00000000..2d6cc802 --- /dev/null +++ b/serializer/json/json_test.go @@ -0,0 +1,35 @@ +package json + +import ( + "encoding/json" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestSerializer(t *testing.T) { + var j1, j2 = Serializer, Serializer + + assert.Same(t, j1, j2) + + var data = map[string]interface{}{ + "foo": "bar", + } + + // marshal + bytes1, err := json.Marshal(data) + assert.NoError(t, err) + + bytes2, err := j1.Serialize(data) + assert.NoError(t, err) + + assert.Equal(t, bytes1, bytes2) + + // unmarshal + var dest1, dest2 = make(map[string]interface{}), make(map[string]interface{}) + assert.NoError(t, json.Unmarshal(bytes1, &dest1)) + assert.NoError(t, j1.Unserialize(bytes1, &dest2)) + + assert.Equal(t, dest1, dest2) + +} diff --git a/serializer/json_test.go b/serializer/json_test.go deleted file mode 100644 index 1932846d..00000000 --- a/serializer/json_test.go +++ /dev/null @@ -1,7 +0,0 @@ -package serializer - -import "testing" - -func TestJsonSerializer(t *testing.T) { - // encode := -} diff --git a/contract/serializable.go b/serializer/serializable.go similarity index 52% rename from contract/serializable.go rename to serializer/serializable.go index e00035c2..94cfb15a 100644 --- a/contract/serializable.go +++ b/serializer/serializable.go @@ -1,6 +1,9 @@ -package contract +package serializer type Serializable interface { + // Serialize the given data into bytes. Serialize(data interface{}) ([]byte, error) + + // Unserialize the given bytes into the given data. Unserialize(src []byte, dest interface{}) error }