package proto
import (
"io"
"reflect"
)
func makeUnmarshalMessage(sub *unmarshalInfo , name string ) unmarshaler {
return func (b []byte , f pointer , w int ) ([]byte , error ) {
if w != WireBytes {
return nil , errInternalBadWireType
}
x , n := decodeVarint (b )
if n == 0 {
return nil , io .ErrUnexpectedEOF
}
b = b [n :]
if x > uint64 (len (b )) {
return nil , io .ErrUnexpectedEOF
}
v := f
if v .isNil () {
v = valToPointer (reflect .New (sub .typ ))
f .setPointer (v )
}
err := sub .unmarshal (v , b [:x ])
if err != nil {
if r , ok := err .(*RequiredNotSetError ); ok {
r .field = name + "." + r .field
} else {
return nil , err
}
}
return b [x :], err
}
}
func makeUnmarshalMessageSlice(sub *unmarshalInfo , name string ) unmarshaler {
return func (b []byte , f pointer , w int ) ([]byte , error ) {
if w != WireBytes {
return nil , errInternalBadWireType
}
x , n := decodeVarint (b )
if n == 0 {
return nil , io .ErrUnexpectedEOF
}
b = b [n :]
if x > uint64 (len (b )) {
return nil , io .ErrUnexpectedEOF
}
v := valToPointer (reflect .New (sub .typ ))
err := sub .unmarshal (v , b [:x ])
if err != nil {
if r , ok := err .(*RequiredNotSetError ); ok {
r .field = name + "." + r .field
} else {
return nil , err
}
}
f .appendRef (v , sub .typ )
return b [x :], err
}
}
func makeUnmarshalCustomPtr(sub *unmarshalInfo , name string ) unmarshaler {
return func (b []byte , f pointer , w int ) ([]byte , error ) {
if w != WireBytes {
return nil , errInternalBadWireType
}
x , n := decodeVarint (b )
if n == 0 {
return nil , io .ErrUnexpectedEOF
}
b = b [n :]
if x > uint64 (len (b )) {
return nil , io .ErrUnexpectedEOF
}
s := f .asPointerTo (reflect .PtrTo (sub .typ )).Elem ()
s .Set (reflect .New (sub .typ ))
m := s .Interface ().(custom )
if err := m .Unmarshal (b [:x ]); err != nil {
return nil , err
}
return b [x :], nil
}
}
func makeUnmarshalCustomSlice(sub *unmarshalInfo , name string ) unmarshaler {
return func (b []byte , f pointer , w int ) ([]byte , error ) {
if w != WireBytes {
return nil , errInternalBadWireType
}
x , n := decodeVarint (b )
if n == 0 {
return nil , io .ErrUnexpectedEOF
}
b = b [n :]
if x > uint64 (len (b )) {
return nil , io .ErrUnexpectedEOF
}
m := reflect .New (sub .typ )
c := m .Interface ().(custom )
if err := c .Unmarshal (b [:x ]); err != nil {
return nil , err
}
v := valToPointer (m )
f .appendRef (v , sub .typ )
return b [x :], nil
}
}
func makeUnmarshalCustom(sub *unmarshalInfo , name string ) unmarshaler {
return func (b []byte , f pointer , w int ) ([]byte , error ) {
if w != WireBytes {
return nil , errInternalBadWireType
}
x , n := decodeVarint (b )
if n == 0 {
return nil , io .ErrUnexpectedEOF
}
b = b [n :]
if x > uint64 (len (b )) {
return nil , io .ErrUnexpectedEOF
}
m := f .asPointerTo (sub .typ ).Interface ().(custom )
if err := m .Unmarshal (b [:x ]); err != nil {
return nil , err
}
return b [x :], nil
}
}
func makeUnmarshalTime(sub *unmarshalInfo , name string ) unmarshaler {
return func (b []byte , f pointer , w int ) ([]byte , error ) {
if w != WireBytes {
return nil , errInternalBadWireType
}
x , n := decodeVarint (b )
if n == 0 {
return nil , io .ErrUnexpectedEOF
}
b = b [n :]
if x > uint64 (len (b )) {
return nil , io .ErrUnexpectedEOF
}
m := ×tamp {}
if err := Unmarshal (b [:x ], m ); err != nil {
return nil , err
}
t , err := timestampFromProto (m )
if err != nil {
return nil , err
}
s := f .asPointerTo (sub .typ ).Elem ()
s .Set (reflect .ValueOf (t ))
return b [x :], nil
}
}
func makeUnmarshalTimePtr(sub *unmarshalInfo , name string ) unmarshaler {
return func (b []byte , f pointer , w int ) ([]byte , error ) {
if w != WireBytes {
return nil , errInternalBadWireType
}
x , n := decodeVarint (b )
if n == 0 {
return nil , io .ErrUnexpectedEOF
}
b = b [n :]
if x > uint64 (len (b )) {
return nil , io .ErrUnexpectedEOF
}
m := ×tamp {}
if err := Unmarshal (b [:x ], m ); err != nil {
return nil , err
}
t , err := timestampFromProto (m )
if err != nil {
return nil , err
}
s := f .asPointerTo (reflect .PtrTo (sub .typ )).Elem ()
s .Set (reflect .ValueOf (&t ))
return b [x :], nil
}
}
func makeUnmarshalTimePtrSlice(sub *unmarshalInfo , name string ) unmarshaler {
return func (b []byte , f pointer , w int ) ([]byte , error ) {
if w != WireBytes {
return nil , errInternalBadWireType
}
x , n := decodeVarint (b )
if n == 0 {
return nil , io .ErrUnexpectedEOF
}
b = b [n :]
if x > uint64 (len (b )) {
return nil , io .ErrUnexpectedEOF
}
m := ×tamp {}
if err := Unmarshal (b [:x ], m ); err != nil {
return nil , err
}
t , err := timestampFromProto (m )
if err != nil {
return nil , err
}
slice := f .getSlice (reflect .PtrTo (sub .typ ))
newSlice := reflect .Append (slice , reflect .ValueOf (&t ))
slice .Set (newSlice )
return b [x :], nil
}
}
func makeUnmarshalTimeSlice(sub *unmarshalInfo , name string ) unmarshaler {
return func (b []byte , f pointer , w int ) ([]byte , error ) {
if w != WireBytes {
return nil , errInternalBadWireType
}
x , n := decodeVarint (b )
if n == 0 {
return nil , io .ErrUnexpectedEOF
}
b = b [n :]
if x > uint64 (len (b )) {
return nil , io .ErrUnexpectedEOF
}
m := ×tamp {}
if err := Unmarshal (b [:x ], m ); err != nil {
return nil , err
}
t , err := timestampFromProto (m )
if err != nil {
return nil , err
}
slice := f .getSlice (sub .typ )
newSlice := reflect .Append (slice , reflect .ValueOf (t ))
slice .Set (newSlice )
return b [x :], nil
}
}
func makeUnmarshalDurationPtr(sub *unmarshalInfo , name string ) unmarshaler {
return func (b []byte , f pointer , w int ) ([]byte , error ) {
if w != WireBytes {
return nil , errInternalBadWireType
}
x , n := decodeVarint (b )
if n == 0 {
return nil , io .ErrUnexpectedEOF
}
b = b [n :]
if x > uint64 (len (b )) {
return nil , io .ErrUnexpectedEOF
}
m := &duration {}
if err := Unmarshal (b [:x ], m ); err != nil {
return nil , err
}
d , err := durationFromProto (m )
if err != nil {
return nil , err
}
s := f .asPointerTo (reflect .PtrTo (sub .typ )).Elem ()
s .Set (reflect .ValueOf (&d ))
return b [x :], nil
}
}
func makeUnmarshalDuration(sub *unmarshalInfo , name string ) unmarshaler {
return func (b []byte , f pointer , w int ) ([]byte , error ) {
if w != WireBytes {
return nil , errInternalBadWireType
}
x , n := decodeVarint (b )
if n == 0 {
return nil , io .ErrUnexpectedEOF
}
b = b [n :]
if x > uint64 (len (b )) {
return nil , io .ErrUnexpectedEOF
}
m := &duration {}
if err := Unmarshal (b [:x ], m ); err != nil {
return nil , err
}
d , err := durationFromProto (m )
if err != nil {
return nil , err
}
s := f .asPointerTo (sub .typ ).Elem ()
s .Set (reflect .ValueOf (d ))
return b [x :], nil
}
}
func makeUnmarshalDurationPtrSlice(sub *unmarshalInfo , name string ) unmarshaler {
return func (b []byte , f pointer , w int ) ([]byte , error ) {
if w != WireBytes {
return nil , errInternalBadWireType
}
x , n := decodeVarint (b )
if n == 0 {
return nil , io .ErrUnexpectedEOF
}
b = b [n :]
if x > uint64 (len (b )) {
return nil , io .ErrUnexpectedEOF
}
m := &duration {}
if err := Unmarshal (b [:x ], m ); err != nil {
return nil , err
}
d , err := durationFromProto (m )
if err != nil {
return nil , err
}
slice := f .getSlice (reflect .PtrTo (sub .typ ))
newSlice := reflect .Append (slice , reflect .ValueOf (&d ))
slice .Set (newSlice )
return b [x :], nil
}
}
func makeUnmarshalDurationSlice(sub *unmarshalInfo , name string ) unmarshaler {
return func (b []byte , f pointer , w int ) ([]byte , error ) {
if w != WireBytes {
return nil , errInternalBadWireType
}
x , n := decodeVarint (b )
if n == 0 {
return nil , io .ErrUnexpectedEOF
}
b = b [n :]
if x > uint64 (len (b )) {
return nil , io .ErrUnexpectedEOF
}
m := &duration {}
if err := Unmarshal (b [:x ], m ); err != nil {
return nil , err
}
d , err := durationFromProto (m )
if err != nil {
return nil , err
}
slice := f .getSlice (sub .typ )
newSlice := reflect .Append (slice , reflect .ValueOf (d ))
slice .Set (newSlice )
return b [x :], nil
}
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .