From 35d22d9f8bd50a45a05ef327ba13cb4352730a0c Mon Sep 17 00:00:00 2001 From: Vasiliy Tolstov Date: Mon, 9 Mar 2026 18:52:37 +0300 Subject: [PATCH] RawMessage support Signed-off-by: Vasiliy Tolstov --- codec_test.go | 32 ++++++++++++++++++++++++++++++++ go.mod | 17 +++++------------ go.sum | 44 ++++++++++++++++---------------------------- yaml.go | 8 ++++++++ 4 files changed, 61 insertions(+), 40 deletions(-) diff --git a/codec_test.go b/codec_test.go index 94de8a0..28445d2 100644 --- a/codec_test.go +++ b/codec_test.go @@ -4,7 +4,9 @@ import ( "bytes" "testing" + yamlc "github.com/goccy/go-yaml" "go.unistack.org/micro/v4/codec" + utime "go.unistack.org/micro/v4/util/time" ) func TestFrame(t *testing.T) { @@ -52,3 +54,33 @@ func TestNativeYamlTags(t *testing.T) { t.Fatalf("XXX %#+v\n", s) } } + +func TestDuration(t *testing.T) { + s := &struct { + One utime.Duration `yaml:"timeout"` + }{ + One: 0, + } + err := NewCodec().Unmarshal([]byte(`timeout: "5s"`), s) + if err != nil { + t.Fatal(err) + } + if s.One != 5000000000 { + t.Fatal("invalid duration parsed") + } +} + +func TestRawMessage(t *testing.T) { + s := &struct { + One *yamlc.RawMessage `yaml:"one"` + }{} + + err := NewCodec().Unmarshal([]byte(`--- +one: + two: + - test`), s) + if err != nil { + t.Fatal(err) + } + t.Logf("s %s", s.One) +} diff --git a/go.mod b/go.mod index 2fe436c..3470dfe 100644 --- a/go.mod +++ b/go.mod @@ -1,21 +1,14 @@ module go.unistack.org/micro-codec-yaml/v4 -go 1.22.0 - -toolchain go1.24.2 +go 1.25 require ( - github.com/goccy/go-yaml v1.17.1 - go.unistack.org/micro-proto/v4 v4.1.0 - go.unistack.org/micro/v4 v4.1.3 + github.com/goccy/go-yaml v1.19.2 + go.unistack.org/micro-proto/v4 v4.1.2 + go.unistack.org/micro/v4 v4.1.32 ) require ( - github.com/ash3in/uuidv8 v1.2.0 // indirect - github.com/google/go-cmp v0.6.0 // indirect github.com/google/uuid v1.6.0 // indirect - github.com/kr/pretty v0.3.1 // indirect - github.com/matoous/go-nanoid v1.5.1 // indirect - google.golang.org/protobuf v1.36.5 // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect + google.golang.org/protobuf v1.36.11 // indirect ) diff --git a/go.sum b/go.sum index 759be17..0f4363e 100644 --- a/go.sum +++ b/go.sum @@ -1,32 +1,20 @@ -github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU= -github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU= -github.com/ash3in/uuidv8 v1.2.0 h1:2oogGdtCPwaVtyvPPGin4TfZLtOGE5F+W++E880G6SI= -github.com/ash3in/uuidv8 v1.2.0/go.mod h1:BnU0wJBxnzdEKmVg4xckBkD+VZuecTFTUP3M0dWgyY4= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/goccy/go-yaml v1.17.1 h1:LI34wktB2xEE3ONG/2Ar54+/HJVBriAGJ55PHls4YuY= -github.com/goccy/go-yaml v1.17.1/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/goccy/go-yaml v1.19.2 h1:PmFC1S6h8ljIz6gMRBopkjP1TVT7xuwrButHID66PoM= +github.com/goccy/go-yaml v1.19.2/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= -github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/matoous/go-nanoid v1.5.1 h1:aCjdvTyO9LLnTIi0fgdXhOPPvOHjpXN6Ik9DaNjIct4= -github.com/matoous/go-nanoid v1.5.1/go.mod h1:zyD2a71IubI24efhpvkJz+ZwfwagzgSO6UNiFsZKN7U= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= -github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= -github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= -go.unistack.org/micro-proto/v4 v4.1.0 h1:qPwL2n/oqh9RE3RTTDgt28XK3QzV597VugQPaw9lKUk= -go.unistack.org/micro-proto/v4 v4.1.0/go.mod h1:ArmK7o+uFvxSY3dbJhKBBX4Pm1rhWdLEFf3LxBrMtec= -go.unistack.org/micro/v4 v4.1.3 h1:9QHiLHBTfPtfKyoY3HsLPNVSK0wlAAoMV+9saLz2iR4= -go.unistack.org/micro/v4 v4.1.3/go.mod h1:lr3oYED8Ay1vjK68QqRw30QOtdk/ffpZqMFDasOUhKw= -google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= -google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= +go.unistack.org/micro-proto/v4 v4.1.2 h1:gZbW5rPArfmlh53Kg3hFCKQix4jtiVhPospUzgIEl+Q= +go.unistack.org/micro-proto/v4 v4.1.2/go.mod h1:NL30Cc3uYP1hwu8cGgYWKCvwJriBmx5l94QIMG2rZy0= +go.unistack.org/micro/v4 v4.1.32 h1:rCNLBI4reNJjrd+4qA8mNV/AqnOiHZixO5lJBxieEfc= +go.unistack.org/micro/v4 v4.1.32/go.mod h1:2trbehnUTG3ZELwSRjsH9lzS8zeYD61BXsF8rbv5cHA= +google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= +google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/yaml.go b/yaml.go index 9e860f8..0c8ec68 100644 --- a/yaml.go +++ b/yaml.go @@ -39,6 +39,8 @@ func (c *yamlCodec) Marshal(v interface{}, opts ...codec.Option) ([]byte, error) return []byte(m), nil case *codec.RawMessage: return []byte(*m), nil + case yaml.RawMessage: + return []byte(m), nil } return yaml.Marshal(v) @@ -73,6 +75,12 @@ func (c *yamlCodec) Unmarshal(b []byte, v interface{}, opts ...codec.Option) err case codec.RawMessage: copy(m, b) return nil + case yaml.RawMessage: + copy(m, b) + return nil + case *yaml.RawMessage: + *m = append((*m)[0:0], b...) + return nil } return yaml.Unmarshal(b, v)