@@ -24,35 +24,38 @@ func (vtprotoCodecV2) Name() string {
2424}
2525
2626func (c * vtprotoCodecV2 ) Marshal (v any ) (mem.BufferSlice , error ) {
27- if m , ok := v .(proto.VtprotoMessage ); ok {
28- size := m .SizeVT ()
29- if mem .IsBelowBufferPoolingThreshold (size ) {
30- buf := make ([]byte , 0 , size )
31- if _ , err := m .MarshalToSizedBufferVT (buf [:size ]); err != nil {
32- return nil , err
33- }
34- }
27+ m , ok := v .(proto.VtprotoMessage )
28+ if ! ok {
29+ return c .fallback .Marshal (v )
30+ }
3531
36- pool := mem . DefaultBufferPool ()
37- buf := pool . Get (size )
38- if _ , err := m . MarshalToSizedBufferVT (( * buf )[: size ]); err != nil {
39- pool . Put (buf )
32+ size := m . SizeVT ()
33+ if mem . IsBelowBufferPoolingThreshold (size ) {
34+ buf := make ([] byte , 0 , size )
35+ if _ , err := m . MarshalToSizedBufferVT (buf [: size ]); err != nil {
4036 return nil , err
4137 }
38+ return mem.BufferSlice {mem .SliceBuffer (buf )}, nil
39+ }
4240
43- return mem.BufferSlice {mem .NewBuffer (buf , pool )}, nil
41+ pool := mem .DefaultBufferPool ()
42+ buf := pool .Get (size )
43+ if _ , err := m .MarshalToSizedBufferVT ((* buf )[:size ]); err != nil {
44+ pool .Put (buf )
45+ return nil , err
4446 }
45- return c . fallback . Marshal ( v )
47+ return mem. BufferSlice { mem . NewBuffer ( buf , pool )}, nil
4648}
4749
4850func (c * vtprotoCodecV2 ) Unmarshal (data mem.BufferSlice , v any ) error {
49- if m , ok := v .(proto.VtprotoMessage ); ok {
50- buf := data .MaterializeToBuffer (mem .DefaultBufferPool ())
51- defer buf .Free ()
52-
53- return m .UnmarshalVT (buf .ReadOnlyData ())
51+ m , ok := v .(proto.VtprotoMessage )
52+ if ! ok {
53+ return c .fallback .Unmarshal (data , v )
5454 }
55- return c .fallback .Unmarshal (data , v )
55+
56+ buf := data .MaterializeToBuffer (mem .DefaultBufferPool ())
57+ defer buf .Free ()
58+ return m .UnmarshalVT (buf .ReadOnlyData ())
5659}
5760
5861// RegisterCodec registers the vtprotoCodec to encode/decode proto messages with
0 commit comments