Skip to content

Commit dad0ed9

Browse files
authored
Merge pull request #118 from hotrungnhan/master
feat: Add support for MsgPack
2 parents 4d2cdab + f438ee2 commit dad0ed9

File tree

5 files changed

+65
-0
lines changed

5 files changed

+65
-0
lines changed

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ require (
1111
require (
1212
github.com/davecgh/go-spew v1.1.1 // indirect
1313
github.com/pmezard/go-difflib v1.0.0 // indirect
14+
github.com/shamaton/msgpack/v2 v2.2.3
1415
github.com/x448/float16 v0.8.4 // indirect
1516
gopkg.in/yaml.v3 v3.0.1 // indirect
1617
)

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
66
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
77
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
88
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
9+
github.com/shamaton/msgpack/v2 v2.2.3 h1:uDOHmxQySlvlUYfQwdjxyybAOzjlQsD1Vjy+4jmO9NM=
10+
github.com/shamaton/msgpack/v2 v2.2.3/go.mod h1:6khjYnkx73f7VQU7wjcFS9DFjs+59naVWJv1TB7qdOI=
911
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
1012
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
1113
github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=

http.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ var statusMessage = []string{
153153
// MIME types were copied from https://github.com/nginx/nginx/blob/67d2a9541826ecd5db97d604f23460210fd3e517/conf/mime.types with the following updates:
154154
// - Use "application/xml" instead of "text/xml" as recommended per https://datatracker.ietf.org/doc/html/rfc7303#section-4.1
155155
// - Use "text/javascript" instead of "application/javascript" as recommended per https://www.rfc-editor.org/rfc/rfc9239#name-text-javascript
156+
// - Use "application/vnd.msgpack" from https://www.iana.org/assignments/media-types/application/vnd.msgpack
156157
var mimeExtensions = map[string]string{
157158
"html": "text/html",
158159
"htm": "text/html",
@@ -187,6 +188,7 @@ var mimeExtensions = map[string]string{
187188
"war": "application/java-archive",
188189
"ear": "application/java-archive",
189190
"json": "application/json",
191+
"msgpack": "application/vnd.msgpack",
190192
"hqx": "application/mac-binhex40",
191193
"doc": "application/msword",
192194
"pdf": "application/pdf",

msgpack.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package utils
2+
3+
// MsgPackMarshal returns the MsgPack encoding of v.
4+
type MsgPackMarshal func(v any) ([]byte, error)
5+
6+
// MsgPackUnmarshal parses the MsgPack-encoded data and stores the result
7+
// in the value pointed to by v. If v is nil or not a pointer,
8+
// Unmarshal returns an InvalidUnmarshalError.
9+
type MsgPackUnmarshal func(data []byte, v any) error

msgpack_test.go

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package utils
2+
3+
import (
4+
"testing"
5+
6+
"github.com/shamaton/msgpack/v2"
7+
"github.com/stretchr/testify/require"
8+
)
9+
10+
type sampleMsgPackStructure struct {
11+
ImportantString string `msgpack:"important_string"`
12+
}
13+
14+
func Test_MsgpackEncoder(t *testing.T) {
15+
t.Parallel()
16+
17+
var (
18+
ss = &sampleStructure{
19+
ImportantString: "Hello World",
20+
}
21+
msgpackEncoder = msgpack.Marshal
22+
)
23+
24+
raw, err := msgpackEncoder(ss)
25+
require.NoError(t, err)
26+
27+
var decoded sampleStructure
28+
err = msgpack.Unmarshal(raw, &decoded)
29+
require.NoError(t, err)
30+
require.Equal(t, ss.ImportantString, decoded.ImportantString)
31+
}
32+
33+
func Test_MsgpackDecoder(t *testing.T) {
34+
t.Parallel()
35+
36+
var (
37+
ss = &sampleMsgPackStructure{
38+
ImportantString: "Hello World",
39+
}
40+
msgpackEncoder = msgpack.Marshal
41+
msgpackDecoder = msgpack.Unmarshal
42+
)
43+
44+
raw, err := msgpackEncoder(ss)
45+
require.NoError(t, err)
46+
47+
var decoded sampleMsgPackStructure
48+
err = msgpackDecoder(raw, &decoded)
49+
require.NoError(t, err)
50+
require.Equal(t, "Hello World", decoded.ImportantString)
51+
}

0 commit comments

Comments
 (0)