...
1
16
17 package runtime
18
19 import (
20 "fmt"
21 )
22
23 type ProtobufMarshaller interface {
24 MarshalTo(data []byte) (int, error)
25 }
26
27 type ProtobufReverseMarshaller interface {
28 MarshalToSizedBuffer(data []byte) (int, error)
29 }
30
31
32
33 func (m *Unknown) NestedMarshalTo(data []byte, b ProtobufMarshaller, size uint64) (int, error) {
34
35 msgSize := m.Size()
36 if b != nil {
37 msgSize += int(size) + sovGenerated(size) + 1
38 }
39
40
41 i := msgSize
42 i -= len(m.ContentType)
43 copy(data[i:], m.ContentType)
44 i = encodeVarintGenerated(data, i, uint64(len(m.ContentType)))
45 i--
46 data[i] = 0x22
47 i -= len(m.ContentEncoding)
48 copy(data[i:], m.ContentEncoding)
49 i = encodeVarintGenerated(data, i, uint64(len(m.ContentEncoding)))
50 i--
51 data[i] = 0x1a
52 if b != nil {
53 if r, ok := b.(ProtobufReverseMarshaller); ok {
54 n1, err := r.MarshalToSizedBuffer(data[:i])
55 if err != nil {
56 return 0, err
57 }
58 i -= int(size)
59 if uint64(n1) != size {
60
61
62 return 0, fmt.Errorf("the Size() value of %T was %d, but NestedMarshalTo wrote %d bytes to data", b, size, n1)
63 }
64 } else {
65 i -= int(size)
66 n1, err := b.MarshalTo(data[i:])
67 if err != nil {
68 return 0, err
69 }
70 if uint64(n1) != size {
71
72
73 return 0, fmt.Errorf("the Size() value of %T was %d, but NestedMarshalTo wrote %d bytes to data", b, size, n1)
74 }
75 }
76 i = encodeVarintGenerated(data, i, size)
77 i--
78 data[i] = 0x12
79 }
80 n2, err := m.TypeMeta.MarshalToSizedBuffer(data[:i])
81 if err != nil {
82 return 0, err
83 }
84 i -= n2
85 i = encodeVarintGenerated(data, i, uint64(n2))
86 i--
87 data[i] = 0xa
88 return msgSize - i, nil
89 }
90
View as plain text