(t *testing.T)
| 177 | } |
| 178 | |
| 179 | func TestAddExtension(t *testing.T) { |
| 180 | |
| 181 | type CustomType struct { |
| 182 | Name string |
| 183 | } |
| 184 | |
| 185 | // global extention info. |
| 186 | const extensionID byte = 1 |
| 187 | |
| 188 | encoder := func(rv reflect.Value) ([]byte, error) { |
| 189 | ct := rv.Interface().(CustomType) |
| 190 | return []byte(ct.Name), nil |
| 191 | } |
| 192 | decoder := func(rv reflect.Value, b []byte) error { |
| 193 | rv.Set(reflect.ValueOf(CustomType{Name: string(b)})) |
| 194 | return nil |
| 195 | } |
| 196 | |
| 197 | m := NewMessagePackEncoder() |
| 198 | err := m.AddExtension(reflect.TypeOf(CustomType{}), extensionID, encoder, decoder) |
| 199 | if err != nil { |
| 200 | t.Fatalf("Failed adding extension: %v", err) |
| 201 | } |
| 202 | data := CustomType{Name: "test"} |
| 203 | dataVerify := CustomType{} |
| 204 | err = m.enc.Encode(&data) |
| 205 | assert.NoError(t, err) |
| 206 | assert.NotNil(t, m.Bytes()) |
| 207 | d := NewMessagePackDecoder(m.Bytes()) |
| 208 | err = d.AddExtension(reflect.TypeOf(CustomType{}), extensionID, encoder, decoder) |
| 209 | assert.NoError(t, err) |
| 210 | err = d.Decode(&dataVerify) |
| 211 | assert.NoError(t, err) |
| 212 | assert.EqualValues(t, dataVerify, data) |
| 213 | } |
nothing calls this directly
no test coverage detected