msgpack_test.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. package msgpack_test
  2. import (
  3. "bytes"
  4. "encoding/gob"
  5. "fmt"
  6. "reflect"
  7. "testing"
  8. "github.com/vmihailenco/msgpack/v5"
  9. )
  10. func Encode(v interface{}) ([]byte, error) {
  11. enc := msgpack.GetEncoder()
  12. var buf bytes.Buffer
  13. enc.Reset(&buf)
  14. err := enc.Encode(v)
  15. b := buf.Bytes()
  16. msgpack.PutEncoder(enc)
  17. if err != nil {
  18. return nil, err
  19. }
  20. return b, err
  21. }
  22. func Decode(data []byte, v interface{}) error {
  23. dec := msgpack.GetDecoder()
  24. dec.Reset(bytes.NewReader(data))
  25. err := dec.Decode(v)
  26. msgpack.PutDecoder(dec)
  27. return err
  28. }
  29. func TestA(t *testing.T) {
  30. v := int(0)
  31. in := map[string]interface{}{"v": v}
  32. bs, e := Encode(in)
  33. if e != nil {
  34. fmt.Println(e)
  35. }
  36. out := map[string]interface{}{}
  37. e = Decode(bs, &out)
  38. if e != nil {
  39. fmt.Println(e)
  40. }
  41. fmt.Println(fmt.Sprintf("input: %v %v", reflect.TypeOf(in["v"]), in["v"]))
  42. fmt.Println(fmt.Sprintf("output: %v %v", reflect.TypeOf(out["v"]), out["v"]))
  43. fmt.Println()
  44. }
  45. func TestB(t *testing.T) {
  46. in := map[string]interface{}{
  47. "int": int(0),
  48. "int8": int8(0),
  49. "int16": int16(0),
  50. "int32": int32(0),
  51. "int64": int64(0),
  52. // "struct": struct{ A string }{A: "a"}, // gob: type not registered for interface: struct { A string }
  53. }
  54. var buf bytes.Buffer
  55. e := gob.NewEncoder(&buf).Encode(in)
  56. if e != nil {
  57. fmt.Println(e)
  58. }
  59. out := map[string]interface{}{}
  60. e = gob.NewDecoder(&buf).Decode(&out)
  61. if e != nil {
  62. fmt.Println(e)
  63. }
  64. for k, v := range in {
  65. fmt.Println(fmt.Sprintf("input: %s = %v(%v)", k, reflect.TypeOf(v), v))
  66. }
  67. for k, v := range out {
  68. fmt.Println(fmt.Sprintf("output: %s = %v(%v)", k, reflect.TypeOf(v), v))
  69. }
  70. fmt.Println()
  71. }
  72. func TestC(t *testing.T) {
  73. in := map[string]interface{}{
  74. "int": int(0),
  75. "int8": int8(0),
  76. "int16": int16(0),
  77. "int32": int32(0),
  78. "int64": int64(0),
  79. "struct": struct{ A string }{A: "a"},
  80. }
  81. var buf bytes.Buffer
  82. e := msgpack.NewEncoder(&buf).Encode(in)
  83. if e != nil {
  84. fmt.Println(e)
  85. }
  86. out := map[string]interface{}{}
  87. e = msgpack.NewDecoder(&buf).Decode(&out)
  88. if e != nil {
  89. fmt.Println(e)
  90. }
  91. for k, v := range in {
  92. fmt.Println(fmt.Sprintf("input: %s = %v(%v)", k, reflect.TypeOf(v), v))
  93. }
  94. for k, v := range out {
  95. fmt.Println(fmt.Sprintf("output: %s = %v(%v)", k, reflect.TypeOf(v), v))
  96. }
  97. fmt.Println()
  98. }