...

Source file src/github.com/gogo/protobuf/proto/wrappers.go

Documentation: github.com/gogo/protobuf/proto

     1  // Protocol Buffers for Go with Gadgets
     2  //
     3  // Copyright (c) 2018, The GoGo Authors. All rights reserved.
     4  // http://github.com/gogo/protobuf
     5  //
     6  // Redistribution and use in source and binary forms, with or without
     7  // modification, are permitted provided that the following conditions are
     8  // met:
     9  //
    10  //     * Redistributions of source code must retain the above copyright
    11  // notice, this list of conditions and the following disclaimer.
    12  //     * Redistributions in binary form must reproduce the above
    13  // copyright notice, this list of conditions and the following disclaimer
    14  // in the documentation and/or other materials provided with the
    15  // distribution.
    16  //
    17  // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    18  // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    19  // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    20  // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    21  // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    22  // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    23  // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    24  // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    25  // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    26  // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    27  // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    28  
    29  package proto
    30  
    31  import (
    32  	"io"
    33  	"reflect"
    34  )
    35  
    36  func makeStdDoubleValueMarshaler(u *marshalInfo) (sizer, marshaler) {
    37  	return func(ptr pointer, tagsize int) int {
    38  			t := ptr.asPointerTo(u.typ).Interface().(*float64)
    39  			v := &float64Value{*t}
    40  			siz := Size(v)
    41  			return tagsize + SizeVarint(uint64(siz)) + siz
    42  		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
    43  			t := ptr.asPointerTo(u.typ).Interface().(*float64)
    44  			v := &float64Value{*t}
    45  			buf, err := Marshal(v)
    46  			if err != nil {
    47  				return nil, err
    48  			}
    49  			b = appendVarint(b, wiretag)
    50  			b = appendVarint(b, uint64(len(buf)))
    51  			b = append(b, buf...)
    52  			return b, nil
    53  		}
    54  }
    55  
    56  func makeStdDoubleValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) {
    57  	return func(ptr pointer, tagsize int) int {
    58  			if ptr.isNil() {
    59  				return 0
    60  			}
    61  			t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*float64)
    62  			v := &float64Value{*t}
    63  			siz := Size(v)
    64  			return tagsize + SizeVarint(uint64(siz)) + siz
    65  		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
    66  			if ptr.isNil() {
    67  				return b, nil
    68  			}
    69  			t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*float64)
    70  			v := &float64Value{*t}
    71  			buf, err := Marshal(v)
    72  			if err != nil {
    73  				return nil, err
    74  			}
    75  			b = appendVarint(b, wiretag)
    76  			b = appendVarint(b, uint64(len(buf)))
    77  			b = append(b, buf...)
    78  			return b, nil
    79  		}
    80  }
    81  
    82  func makeStdDoubleValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
    83  	return func(ptr pointer, tagsize int) int {
    84  			s := ptr.getSlice(u.typ)
    85  			n := 0
    86  			for i := 0; i < s.Len(); i++ {
    87  				elem := s.Index(i)
    88  				t := elem.Interface().(float64)
    89  				v := &float64Value{t}
    90  				siz := Size(v)
    91  				n += siz + SizeVarint(uint64(siz)) + tagsize
    92  			}
    93  			return n
    94  		},
    95  		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
    96  			s := ptr.getSlice(u.typ)
    97  			for i := 0; i < s.Len(); i++ {
    98  				elem := s.Index(i)
    99  				t := elem.Interface().(float64)
   100  				v := &float64Value{t}
   101  				siz := Size(v)
   102  				buf, err := Marshal(v)
   103  				if err != nil {
   104  					return nil, err
   105  				}
   106  				b = appendVarint(b, wiretag)
   107  				b = appendVarint(b, uint64(siz))
   108  				b = append(b, buf...)
   109  			}
   110  
   111  			return b, nil
   112  		}
   113  }
   114  
   115  func makeStdDoubleValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
   116  	return func(ptr pointer, tagsize int) int {
   117  			s := ptr.getSlice(reflect.PtrTo(u.typ))
   118  			n := 0
   119  			for i := 0; i < s.Len(); i++ {
   120  				elem := s.Index(i)
   121  				t := elem.Interface().(*float64)
   122  				v := &float64Value{*t}
   123  				siz := Size(v)
   124  				n += siz + SizeVarint(uint64(siz)) + tagsize
   125  			}
   126  			return n
   127  		},
   128  		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
   129  			s := ptr.getSlice(reflect.PtrTo(u.typ))
   130  			for i := 0; i < s.Len(); i++ {
   131  				elem := s.Index(i)
   132  				t := elem.Interface().(*float64)
   133  				v := &float64Value{*t}
   134  				siz := Size(v)
   135  				buf, err := Marshal(v)
   136  				if err != nil {
   137  					return nil, err
   138  				}
   139  				b = appendVarint(b, wiretag)
   140  				b = appendVarint(b, uint64(siz))
   141  				b = append(b, buf...)
   142  			}
   143  
   144  			return b, nil
   145  		}
   146  }
   147  
   148  func makeStdDoubleValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
   149  	return func(b []byte, f pointer, w int) ([]byte, error) {
   150  		if w != WireBytes {
   151  			return nil, errInternalBadWireType
   152  		}
   153  		x, n := decodeVarint(b)
   154  		if n == 0 {
   155  			return nil, io.ErrUnexpectedEOF
   156  		}
   157  		b = b[n:]
   158  		if x > uint64(len(b)) {
   159  			return nil, io.ErrUnexpectedEOF
   160  		}
   161  		m := &float64Value{}
   162  		if err := Unmarshal(b[:x], m); err != nil {
   163  			return nil, err
   164  		}
   165  		s := f.asPointerTo(sub.typ).Elem()
   166  		s.Set(reflect.ValueOf(m.Value))
   167  		return b[x:], nil
   168  	}
   169  }
   170  
   171  func makeStdDoubleValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
   172  	return func(b []byte, f pointer, w int) ([]byte, error) {
   173  		if w != WireBytes {
   174  			return nil, errInternalBadWireType
   175  		}
   176  		x, n := decodeVarint(b)
   177  		if n == 0 {
   178  			return nil, io.ErrUnexpectedEOF
   179  		}
   180  		b = b[n:]
   181  		if x > uint64(len(b)) {
   182  			return nil, io.ErrUnexpectedEOF
   183  		}
   184  		m := &float64Value{}
   185  		if err := Unmarshal(b[:x], m); err != nil {
   186  			return nil, err
   187  		}
   188  		s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()
   189  		s.Set(reflect.ValueOf(&m.Value))
   190  		return b[x:], nil
   191  	}
   192  }
   193  
   194  func makeStdDoubleValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
   195  	return func(b []byte, f pointer, w int) ([]byte, error) {
   196  		if w != WireBytes {
   197  			return nil, errInternalBadWireType
   198  		}
   199  		x, n := decodeVarint(b)
   200  		if n == 0 {
   201  			return nil, io.ErrUnexpectedEOF
   202  		}
   203  		b = b[n:]
   204  		if x > uint64(len(b)) {
   205  			return nil, io.ErrUnexpectedEOF
   206  		}
   207  		m := &float64Value{}
   208  		if err := Unmarshal(b[:x], m); err != nil {
   209  			return nil, err
   210  		}
   211  		slice := f.getSlice(reflect.PtrTo(sub.typ))
   212  		newSlice := reflect.Append(slice, reflect.ValueOf(&m.Value))
   213  		slice.Set(newSlice)
   214  		return b[x:], nil
   215  	}
   216  }
   217  
   218  func makeStdDoubleValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
   219  	return func(b []byte, f pointer, w int) ([]byte, error) {
   220  		if w != WireBytes {
   221  			return nil, errInternalBadWireType
   222  		}
   223  		x, n := decodeVarint(b)
   224  		if n == 0 {
   225  			return nil, io.ErrUnexpectedEOF
   226  		}
   227  		b = b[n:]
   228  		if x > uint64(len(b)) {
   229  			return nil, io.ErrUnexpectedEOF
   230  		}
   231  		m := &float64Value{}
   232  		if err := Unmarshal(b[:x], m); err != nil {
   233  			return nil, err
   234  		}
   235  		slice := f.getSlice(sub.typ)
   236  		newSlice := reflect.Append(slice, reflect.ValueOf(m.Value))
   237  		slice.Set(newSlice)
   238  		return b[x:], nil
   239  	}
   240  }
   241  
   242  func makeStdFloatValueMarshaler(u *marshalInfo) (sizer, marshaler) {
   243  	return func(ptr pointer, tagsize int) int {
   244  			t := ptr.asPointerTo(u.typ).Interface().(*float32)
   245  			v := &float32Value{*t}
   246  			siz := Size(v)
   247  			return tagsize + SizeVarint(uint64(siz)) + siz
   248  		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
   249  			t := ptr.asPointerTo(u.typ).Interface().(*float32)
   250  			v := &float32Value{*t}
   251  			buf, err := Marshal(v)
   252  			if err != nil {
   253  				return nil, err
   254  			}
   255  			b = appendVarint(b, wiretag)
   256  			b = appendVarint(b, uint64(len(buf)))
   257  			b = append(b, buf...)
   258  			return b, nil
   259  		}
   260  }
   261  
   262  func makeStdFloatValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) {
   263  	return func(ptr pointer, tagsize int) int {
   264  			if ptr.isNil() {
   265  				return 0
   266  			}
   267  			t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*float32)
   268  			v := &float32Value{*t}
   269  			siz := Size(v)
   270  			return tagsize + SizeVarint(uint64(siz)) + siz
   271  		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
   272  			if ptr.isNil() {
   273  				return b, nil
   274  			}
   275  			t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*float32)
   276  			v := &float32Value{*t}
   277  			buf, err := Marshal(v)
   278  			if err != nil {
   279  				return nil, err
   280  			}
   281  			b = appendVarint(b, wiretag)
   282  			b = appendVarint(b, uint64(len(buf)))
   283  			b = append(b, buf...)
   284  			return b, nil
   285  		}
   286  }
   287  
   288  func makeStdFloatValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
   289  	return func(ptr pointer, tagsize int) int {
   290  			s := ptr.getSlice(u.typ)
   291  			n := 0
   292  			for i := 0; i < s.Len(); i++ {
   293  				elem := s.Index(i)
   294  				t := elem.Interface().(float32)
   295  				v := &float32Value{t}
   296  				siz := Size(v)
   297  				n += siz + SizeVarint(uint64(siz)) + tagsize
   298  			}
   299  			return n
   300  		},
   301  		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
   302  			s := ptr.getSlice(u.typ)
   303  			for i := 0; i < s.Len(); i++ {
   304  				elem := s.Index(i)
   305  				t := elem.Interface().(float32)
   306  				v := &float32Value{t}
   307  				siz := Size(v)
   308  				buf, err := Marshal(v)
   309  				if err != nil {
   310  					return nil, err
   311  				}
   312  				b = appendVarint(b, wiretag)
   313  				b = appendVarint(b, uint64(siz))
   314  				b = append(b, buf...)
   315  			}
   316  
   317  			return b, nil
   318  		}
   319  }
   320  
   321  func makeStdFloatValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
   322  	return func(ptr pointer, tagsize int) int {
   323  			s := ptr.getSlice(reflect.PtrTo(u.typ))
   324  			n := 0
   325  			for i := 0; i < s.Len(); i++ {
   326  				elem := s.Index(i)
   327  				t := elem.Interface().(*float32)
   328  				v := &float32Value{*t}
   329  				siz := Size(v)
   330  				n += siz + SizeVarint(uint64(siz)) + tagsize
   331  			}
   332  			return n
   333  		},
   334  		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
   335  			s := ptr.getSlice(reflect.PtrTo(u.typ))
   336  			for i := 0; i < s.Len(); i++ {
   337  				elem := s.Index(i)
   338  				t := elem.Interface().(*float32)
   339  				v := &float32Value{*t}
   340  				siz := Size(v)
   341  				buf, err := Marshal(v)
   342  				if err != nil {
   343  					return nil, err
   344  				}
   345  				b = appendVarint(b, wiretag)
   346  				b = appendVarint(b, uint64(siz))
   347  				b = append(b, buf...)
   348  			}
   349  
   350  			return b, nil
   351  		}
   352  }
   353  
   354  func makeStdFloatValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
   355  	return func(b []byte, f pointer, w int) ([]byte, error) {
   356  		if w != WireBytes {
   357  			return nil, errInternalBadWireType
   358  		}
   359  		x, n := decodeVarint(b)
   360  		if n == 0 {
   361  			return nil, io.ErrUnexpectedEOF
   362  		}
   363  		b = b[n:]
   364  		if x > uint64(len(b)) {
   365  			return nil, io.ErrUnexpectedEOF
   366  		}
   367  		m := &float32Value{}
   368  		if err := Unmarshal(b[:x], m); err != nil {
   369  			return nil, err
   370  		}
   371  		s := f.asPointerTo(sub.typ).Elem()
   372  		s.Set(reflect.ValueOf(m.Value))
   373  		return b[x:], nil
   374  	}
   375  }
   376  
   377  func makeStdFloatValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
   378  	return func(b []byte, f pointer, w int) ([]byte, error) {
   379  		if w != WireBytes {
   380  			return nil, errInternalBadWireType
   381  		}
   382  		x, n := decodeVarint(b)
   383  		if n == 0 {
   384  			return nil, io.ErrUnexpectedEOF
   385  		}
   386  		b = b[n:]
   387  		if x > uint64(len(b)) {
   388  			return nil, io.ErrUnexpectedEOF
   389  		}
   390  		m := &float32Value{}
   391  		if err := Unmarshal(b[:x], m); err != nil {
   392  			return nil, err
   393  		}
   394  		s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()
   395  		s.Set(reflect.ValueOf(&m.Value))
   396  		return b[x:], nil
   397  	}
   398  }
   399  
   400  func makeStdFloatValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
   401  	return func(b []byte, f pointer, w int) ([]byte, error) {
   402  		if w != WireBytes {
   403  			return nil, errInternalBadWireType
   404  		}
   405  		x, n := decodeVarint(b)
   406  		if n == 0 {
   407  			return nil, io.ErrUnexpectedEOF
   408  		}
   409  		b = b[n:]
   410  		if x > uint64(len(b)) {
   411  			return nil, io.ErrUnexpectedEOF
   412  		}
   413  		m := &float32Value{}
   414  		if err := Unmarshal(b[:x], m); err != nil {
   415  			return nil, err
   416  		}
   417  		slice := f.getSlice(reflect.PtrTo(sub.typ))
   418  		newSlice := reflect.Append(slice, reflect.ValueOf(&m.Value))
   419  		slice.Set(newSlice)
   420  		return b[x:], nil
   421  	}
   422  }
   423  
   424  func makeStdFloatValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
   425  	return func(b []byte, f pointer, w int) ([]byte, error) {
   426  		if w != WireBytes {
   427  			return nil, errInternalBadWireType
   428  		}
   429  		x, n := decodeVarint(b)
   430  		if n == 0 {
   431  			return nil, io.ErrUnexpectedEOF
   432  		}
   433  		b = b[n:]
   434  		if x > uint64(len(b)) {
   435  			return nil, io.ErrUnexpectedEOF
   436  		}
   437  		m := &float32Value{}
   438  		if err := Unmarshal(b[:x], m); err != nil {
   439  			return nil, err
   440  		}
   441  		slice := f.getSlice(sub.typ)
   442  		newSlice := reflect.Append(slice, reflect.ValueOf(m.Value))
   443  		slice.Set(newSlice)
   444  		return b[x:], nil
   445  	}
   446  }
   447  
   448  func makeStdInt64ValueMarshaler(u *marshalInfo) (sizer, marshaler) {
   449  	return func(ptr pointer, tagsize int) int {
   450  			t := ptr.asPointerTo(u.typ).Interface().(*int64)
   451  			v := &int64Value{*t}
   452  			siz := Size(v)
   453  			return tagsize + SizeVarint(uint64(siz)) + siz
   454  		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
   455  			t := ptr.asPointerTo(u.typ).Interface().(*int64)
   456  			v := &int64Value{*t}
   457  			buf, err := Marshal(v)
   458  			if err != nil {
   459  				return nil, err
   460  			}
   461  			b = appendVarint(b, wiretag)
   462  			b = appendVarint(b, uint64(len(buf)))
   463  			b = append(b, buf...)
   464  			return b, nil
   465  		}
   466  }
   467  
   468  func makeStdInt64ValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) {
   469  	return func(ptr pointer, tagsize int) int {
   470  			if ptr.isNil() {
   471  				return 0
   472  			}
   473  			t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*int64)
   474  			v := &int64Value{*t}
   475  			siz := Size(v)
   476  			return tagsize + SizeVarint(uint64(siz)) + siz
   477  		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
   478  			if ptr.isNil() {
   479  				return b, nil
   480  			}
   481  			t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*int64)
   482  			v := &int64Value{*t}
   483  			buf, err := Marshal(v)
   484  			if err != nil {
   485  				return nil, err
   486  			}
   487  			b = appendVarint(b, wiretag)
   488  			b = appendVarint(b, uint64(len(buf)))
   489  			b = append(b, buf...)
   490  			return b, nil
   491  		}
   492  }
   493  
   494  func makeStdInt64ValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
   495  	return func(ptr pointer, tagsize int) int {
   496  			s := ptr.getSlice(u.typ)
   497  			n := 0
   498  			for i := 0; i < s.Len(); i++ {
   499  				elem := s.Index(i)
   500  				t := elem.Interface().(int64)
   501  				v := &int64Value{t}
   502  				siz := Size(v)
   503  				n += siz + SizeVarint(uint64(siz)) + tagsize
   504  			}
   505  			return n
   506  		},
   507  		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
   508  			s := ptr.getSlice(u.typ)
   509  			for i := 0; i < s.Len(); i++ {
   510  				elem := s.Index(i)
   511  				t := elem.Interface().(int64)
   512  				v := &int64Value{t}
   513  				siz := Size(v)
   514  				buf, err := Marshal(v)
   515  				if err != nil {
   516  					return nil, err
   517  				}
   518  				b = appendVarint(b, wiretag)
   519  				b = appendVarint(b, uint64(siz))
   520  				b = append(b, buf...)
   521  			}
   522  
   523  			return b, nil
   524  		}
   525  }
   526  
   527  func makeStdInt64ValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
   528  	return func(ptr pointer, tagsize int) int {
   529  			s := ptr.getSlice(reflect.PtrTo(u.typ))
   530  			n := 0
   531  			for i := 0; i < s.Len(); i++ {
   532  				elem := s.Index(i)
   533  				t := elem.Interface().(*int64)
   534  				v := &int64Value{*t}
   535  				siz := Size(v)
   536  				n += siz + SizeVarint(uint64(siz)) + tagsize
   537  			}
   538  			return n
   539  		},
   540  		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
   541  			s := ptr.getSlice(reflect.PtrTo(u.typ))
   542  			for i := 0; i < s.Len(); i++ {
   543  				elem := s.Index(i)
   544  				t := elem.Interface().(*int64)
   545  				v := &int64Value{*t}
   546  				siz := Size(v)
   547  				buf, err := Marshal(v)
   548  				if err != nil {
   549  					return nil, err
   550  				}
   551  				b = appendVarint(b, wiretag)
   552  				b = appendVarint(b, uint64(siz))
   553  				b = append(b, buf...)
   554  			}
   555  
   556  			return b, nil
   557  		}
   558  }
   559  
   560  func makeStdInt64ValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
   561  	return func(b []byte, f pointer, w int) ([]byte, error) {
   562  		if w != WireBytes {
   563  			return nil, errInternalBadWireType
   564  		}
   565  		x, n := decodeVarint(b)
   566  		if n == 0 {
   567  			return nil, io.ErrUnexpectedEOF
   568  		}
   569  		b = b[n:]
   570  		if x > uint64(len(b)) {
   571  			return nil, io.ErrUnexpectedEOF
   572  		}
   573  		m := &int64Value{}
   574  		if err := Unmarshal(b[:x], m); err != nil {
   575  			return nil, err
   576  		}
   577  		s := f.asPointerTo(sub.typ).Elem()
   578  		s.Set(reflect.ValueOf(m.Value))
   579  		return b[x:], nil
   580  	}
   581  }
   582  
   583  func makeStdInt64ValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
   584  	return func(b []byte, f pointer, w int) ([]byte, error) {
   585  		if w != WireBytes {
   586  			return nil, errInternalBadWireType
   587  		}
   588  		x, n := decodeVarint(b)
   589  		if n == 0 {
   590  			return nil, io.ErrUnexpectedEOF
   591  		}
   592  		b = b[n:]
   593  		if x > uint64(len(b)) {
   594  			return nil, io.ErrUnexpectedEOF
   595  		}
   596  		m := &int64Value{}
   597  		if err := Unmarshal(b[:x], m); err != nil {
   598  			return nil, err
   599  		}
   600  		s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()
   601  		s.Set(reflect.ValueOf(&m.Value))
   602  		return b[x:], nil
   603  	}
   604  }
   605  
   606  func makeStdInt64ValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
   607  	return func(b []byte, f pointer, w int) ([]byte, error) {
   608  		if w != WireBytes {
   609  			return nil, errInternalBadWireType
   610  		}
   611  		x, n := decodeVarint(b)
   612  		if n == 0 {
   613  			return nil, io.ErrUnexpectedEOF
   614  		}
   615  		b = b[n:]
   616  		if x > uint64(len(b)) {
   617  			return nil, io.ErrUnexpectedEOF
   618  		}
   619  		m := &int64Value{}
   620  		if err := Unmarshal(b[:x], m); err != nil {
   621  			return nil, err
   622  		}
   623  		slice := f.getSlice(reflect.PtrTo(sub.typ))
   624  		newSlice := reflect.Append(slice, reflect.ValueOf(&m.Value))
   625  		slice.Set(newSlice)
   626  		return b[x:], nil
   627  	}
   628  }
   629  
   630  func makeStdInt64ValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
   631  	return func(b []byte, f pointer, w int) ([]byte, error) {
   632  		if w != WireBytes {
   633  			return nil, errInternalBadWireType
   634  		}
   635  		x, n := decodeVarint(b)
   636  		if n == 0 {
   637  			return nil, io.ErrUnexpectedEOF
   638  		}
   639  		b = b[n:]
   640  		if x > uint64(len(b)) {
   641  			return nil, io.ErrUnexpectedEOF
   642  		}
   643  		m := &int64Value{}
   644  		if err := Unmarshal(b[:x], m); err != nil {
   645  			return nil, err
   646  		}
   647  		slice := f.getSlice(sub.typ)
   648  		newSlice := reflect.Append(slice, reflect.ValueOf(m.Value))
   649  		slice.Set(newSlice)
   650  		return b[x:], nil
   651  	}
   652  }
   653  
   654  func makeStdUInt64ValueMarshaler(u *marshalInfo) (sizer, marshaler) {
   655  	return func(ptr pointer, tagsize int) int {
   656  			t := ptr.asPointerTo(u.typ).Interface().(*uint64)
   657  			v := &uint64Value{*t}
   658  			siz := Size(v)
   659  			return tagsize + SizeVarint(uint64(siz)) + siz
   660  		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
   661  			t := ptr.asPointerTo(u.typ).Interface().(*uint64)
   662  			v := &uint64Value{*t}
   663  			buf, err := Marshal(v)
   664  			if err != nil {
   665  				return nil, err
   666  			}
   667  			b = appendVarint(b, wiretag)
   668  			b = appendVarint(b, uint64(len(buf)))
   669  			b = append(b, buf...)
   670  			return b, nil
   671  		}
   672  }
   673  
   674  func makeStdUInt64ValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) {
   675  	return func(ptr pointer, tagsize int) int {
   676  			if ptr.isNil() {
   677  				return 0
   678  			}
   679  			t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*uint64)
   680  			v := &uint64Value{*t}
   681  			siz := Size(v)
   682  			return tagsize + SizeVarint(uint64(siz)) + siz
   683  		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
   684  			if ptr.isNil() {
   685  				return b, nil
   686  			}
   687  			t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*uint64)
   688  			v := &uint64Value{*t}
   689  			buf, err := Marshal(v)
   690  			if err != nil {
   691  				return nil, err
   692  			}
   693  			b = appendVarint(b, wiretag)
   694  			b = appendVarint(b, uint64(len(buf)))
   695  			b = append(b, buf...)
   696  			return b, nil
   697  		}
   698  }
   699  
   700  func makeStdUInt64ValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
   701  	return func(ptr pointer, tagsize int) int {
   702  			s := ptr.getSlice(u.typ)
   703  			n := 0
   704  			for i := 0; i < s.Len(); i++ {
   705  				elem := s.Index(i)
   706  				t := elem.Interface().(uint64)
   707  				v := &uint64Value{t}
   708  				siz := Size(v)
   709  				n += siz + SizeVarint(uint64(siz)) + tagsize
   710  			}
   711  			return n
   712  		},
   713  		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
   714  			s := ptr.getSlice(u.typ)
   715  			for i := 0; i < s.Len(); i++ {
   716  				elem := s.Index(i)
   717  				t := elem.Interface().(uint64)
   718  				v := &uint64Value{t}
   719  				siz := Size(v)
   720  				buf, err := Marshal(v)
   721  				if err != nil {
   722  					return nil, err
   723  				}
   724  				b = appendVarint(b, wiretag)
   725  				b = appendVarint(b, uint64(siz))
   726  				b = append(b, buf...)
   727  			}
   728  
   729  			return b, nil
   730  		}
   731  }
   732  
   733  func makeStdUInt64ValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
   734  	return func(ptr pointer, tagsize int) int {
   735  			s := ptr.getSlice(reflect.PtrTo(u.typ))
   736  			n := 0
   737  			for i := 0; i < s.Len(); i++ {
   738  				elem := s.Index(i)
   739  				t := elem.Interface().(*uint64)
   740  				v := &uint64Value{*t}
   741  				siz := Size(v)
   742  				n += siz + SizeVarint(uint64(siz)) + tagsize
   743  			}
   744  			return n
   745  		},
   746  		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
   747  			s := ptr.getSlice(reflect.PtrTo(u.typ))
   748  			for i := 0; i < s.Len(); i++ {
   749  				elem := s.Index(i)
   750  				t := elem.Interface().(*uint64)
   751  				v := &uint64Value{*t}
   752  				siz := Size(v)
   753  				buf, err := Marshal(v)
   754  				if err != nil {
   755  					return nil, err
   756  				}
   757  				b = appendVarint(b, wiretag)
   758  				b = appendVarint(b, uint64(siz))
   759  				b = append(b, buf...)
   760  			}
   761  
   762  			return b, nil
   763  		}
   764  }
   765  
   766  func makeStdUInt64ValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
   767  	return func(b []byte, f pointer, w int) ([]byte, error) {
   768  		if w != WireBytes {
   769  			return nil, errInternalBadWireType
   770  		}
   771  		x, n := decodeVarint(b)
   772  		if n == 0 {
   773  			return nil, io.ErrUnexpectedEOF
   774  		}
   775  		b = b[n:]
   776  		if x > uint64(len(b)) {
   777  			return nil, io.ErrUnexpectedEOF
   778  		}
   779  		m := &uint64Value{}
   780  		if err := Unmarshal(b[:x], m); err != nil {
   781  			return nil, err
   782  		}
   783  		s := f.asPointerTo(sub.typ).Elem()
   784  		s.Set(reflect.ValueOf(m.Value))
   785  		return b[x:], nil
   786  	}
   787  }
   788  
   789  func makeStdUInt64ValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
   790  	return func(b []byte, f pointer, w int) ([]byte, error) {
   791  		if w != WireBytes {
   792  			return nil, errInternalBadWireType
   793  		}
   794  		x, n := decodeVarint(b)
   795  		if n == 0 {
   796  			return nil, io.ErrUnexpectedEOF
   797  		}
   798  		b = b[n:]
   799  		if x > uint64(len(b)) {
   800  			return nil, io.ErrUnexpectedEOF
   801  		}
   802  		m := &uint64Value{}
   803  		if err := Unmarshal(b[:x], m); err != nil {
   804  			return nil, err
   805  		}
   806  		s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()
   807  		s.Set(reflect.ValueOf(&m.Value))
   808  		return b[x:], nil
   809  	}
   810  }
   811  
   812  func makeStdUInt64ValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
   813  	return func(b []byte, f pointer, w int) ([]byte, error) {
   814  		if w != WireBytes {
   815  			return nil, errInternalBadWireType
   816  		}
   817  		x, n := decodeVarint(b)
   818  		if n == 0 {
   819  			return nil, io.ErrUnexpectedEOF
   820  		}
   821  		b = b[n:]
   822  		if x > uint64(len(b)) {
   823  			return nil, io.ErrUnexpectedEOF
   824  		}
   825  		m := &uint64Value{}
   826  		if err := Unmarshal(b[:x], m); err != nil {
   827  			return nil, err
   828  		}
   829  		slice := f.getSlice(reflect.PtrTo(sub.typ))
   830  		newSlice := reflect.Append(slice, reflect.ValueOf(&m.Value))
   831  		slice.Set(newSlice)
   832  		return b[x:], nil
   833  	}
   834  }
   835  
   836  func makeStdUInt64ValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
   837  	return func(b []byte, f pointer, w int) ([]byte, error) {
   838  		if w != WireBytes {
   839  			return nil, errInternalBadWireType
   840  		}
   841  		x, n := decodeVarint(b)
   842  		if n == 0 {
   843  			return nil, io.ErrUnexpectedEOF
   844  		}
   845  		b = b[n:]
   846  		if x > uint64(len(b)) {
   847  			return nil, io.ErrUnexpectedEOF
   848  		}
   849  		m := &uint64Value{}
   850  		if err := Unmarshal(b[:x], m); err != nil {
   851  			return nil, err
   852  		}
   853  		slice := f.getSlice(sub.typ)
   854  		newSlice := reflect.Append(slice, reflect.ValueOf(m.Value))
   855  		slice.Set(newSlice)
   856  		return b[x:], nil
   857  	}
   858  }
   859  
   860  func makeStdInt32ValueMarshaler(u *marshalInfo) (sizer, marshaler) {
   861  	return func(ptr pointer, tagsize int) int {
   862  			t := ptr.asPointerTo(u.typ).Interface().(*int32)
   863  			v := &int32Value{*t}
   864  			siz := Size(v)
   865  			return tagsize + SizeVarint(uint64(siz)) + siz
   866  		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
   867  			t := ptr.asPointerTo(u.typ).Interface().(*int32)
   868  			v := &int32Value{*t}
   869  			buf, err := Marshal(v)
   870  			if err != nil {
   871  				return nil, err
   872  			}
   873  			b = appendVarint(b, wiretag)
   874  			b = appendVarint(b, uint64(len(buf)))
   875  			b = append(b, buf...)
   876  			return b, nil
   877  		}
   878  }
   879  
   880  func makeStdInt32ValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) {
   881  	return func(ptr pointer, tagsize int) int {
   882  			if ptr.isNil() {
   883  				return 0
   884  			}
   885  			t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*int32)
   886  			v := &int32Value{*t}
   887  			siz := Size(v)
   888  			return tagsize + SizeVarint(uint64(siz)) + siz
   889  		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
   890  			if ptr.isNil() {
   891  				return b, nil
   892  			}
   893  			t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*int32)
   894  			v := &int32Value{*t}
   895  			buf, err := Marshal(v)
   896  			if err != nil {
   897  				return nil, err
   898  			}
   899  			b = appendVarint(b, wiretag)
   900  			b = appendVarint(b, uint64(len(buf)))
   901  			b = append(b, buf...)
   902  			return b, nil
   903  		}
   904  }
   905  
   906  func makeStdInt32ValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
   907  	return func(ptr pointer, tagsize int) int {
   908  			s := ptr.getSlice(u.typ)
   909  			n := 0
   910  			for i := 0; i < s.Len(); i++ {
   911  				elem := s.Index(i)
   912  				t := elem.Interface().(int32)
   913  				v := &int32Value{t}
   914  				siz := Size(v)
   915  				n += siz + SizeVarint(uint64(siz)) + tagsize
   916  			}
   917  			return n
   918  		},
   919  		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
   920  			s := ptr.getSlice(u.typ)
   921  			for i := 0; i < s.Len(); i++ {
   922  				elem := s.Index(i)
   923  				t := elem.Interface().(int32)
   924  				v := &int32Value{t}
   925  				siz := Size(v)
   926  				buf, err := Marshal(v)
   927  				if err != nil {
   928  					return nil, err
   929  				}
   930  				b = appendVarint(b, wiretag)
   931  				b = appendVarint(b, uint64(siz))
   932  				b = append(b, buf...)
   933  			}
   934  
   935  			return b, nil
   936  		}
   937  }
   938  
   939  func makeStdInt32ValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
   940  	return func(ptr pointer, tagsize int) int {
   941  			s := ptr.getSlice(reflect.PtrTo(u.typ))
   942  			n := 0
   943  			for i := 0; i < s.Len(); i++ {
   944  				elem := s.Index(i)
   945  				t := elem.Interface().(*int32)
   946  				v := &int32Value{*t}
   947  				siz := Size(v)
   948  				n += siz + SizeVarint(uint64(siz)) + tagsize
   949  			}
   950  			return n
   951  		},
   952  		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
   953  			s := ptr.getSlice(reflect.PtrTo(u.typ))
   954  			for i := 0; i < s.Len(); i++ {
   955  				elem := s.Index(i)
   956  				t := elem.Interface().(*int32)
   957  				v := &int32Value{*t}
   958  				siz := Size(v)
   959  				buf, err := Marshal(v)
   960  				if err != nil {
   961  					return nil, err
   962  				}
   963  				b = appendVarint(b, wiretag)
   964  				b = appendVarint(b, uint64(siz))
   965  				b = append(b, buf...)
   966  			}
   967  
   968  			return b, nil
   969  		}
   970  }
   971  
   972  func makeStdInt32ValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
   973  	return func(b []byte, f pointer, w int) ([]byte, error) {
   974  		if w != WireBytes {
   975  			return nil, errInternalBadWireType
   976  		}
   977  		x, n := decodeVarint(b)
   978  		if n == 0 {
   979  			return nil, io.ErrUnexpectedEOF
   980  		}
   981  		b = b[n:]
   982  		if x > uint64(len(b)) {
   983  			return nil, io.ErrUnexpectedEOF
   984  		}
   985  		m := &int32Value{}
   986  		if err := Unmarshal(b[:x], m); err != nil {
   987  			return nil, err
   988  		}
   989  		s := f.asPointerTo(sub.typ).Elem()
   990  		s.Set(reflect.ValueOf(m.Value))
   991  		return b[x:], nil
   992  	}
   993  }
   994  
   995  func makeStdInt32ValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
   996  	return func(b []byte, f pointer, w int) ([]byte, error) {
   997  		if w != WireBytes {
   998  			return nil, errInternalBadWireType
   999  		}
  1000  		x, n := decodeVarint(b)
  1001  		if n == 0 {
  1002  			return nil, io.ErrUnexpectedEOF
  1003  		}
  1004  		b = b[n:]
  1005  		if x > uint64(len(b)) {
  1006  			return nil, io.ErrUnexpectedEOF
  1007  		}
  1008  		m := &int32Value{}
  1009  		if err := Unmarshal(b[:x], m); err != nil {
  1010  			return nil, err
  1011  		}
  1012  		s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()
  1013  		s.Set(reflect.ValueOf(&m.Value))
  1014  		return b[x:], nil
  1015  	}
  1016  }
  1017  
  1018  func makeStdInt32ValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
  1019  	return func(b []byte, f pointer, w int) ([]byte, error) {
  1020  		if w != WireBytes {
  1021  			return nil, errInternalBadWireType
  1022  		}
  1023  		x, n := decodeVarint(b)
  1024  		if n == 0 {
  1025  			return nil, io.ErrUnexpectedEOF
  1026  		}
  1027  		b = b[n:]
  1028  		if x > uint64(len(b)) {
  1029  			return nil, io.ErrUnexpectedEOF
  1030  		}
  1031  		m := &int32Value{}
  1032  		if err := Unmarshal(b[:x], m); err != nil {
  1033  			return nil, err
  1034  		}
  1035  		slice := f.getSlice(reflect.PtrTo(sub.typ))
  1036  		newSlice := reflect.Append(slice, reflect.ValueOf(&m.Value))
  1037  		slice.Set(newSlice)
  1038  		return b[x:], nil
  1039  	}
  1040  }
  1041  
  1042  func makeStdInt32ValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
  1043  	return func(b []byte, f pointer, w int) ([]byte, error) {
  1044  		if w != WireBytes {
  1045  			return nil, errInternalBadWireType
  1046  		}
  1047  		x, n := decodeVarint(b)
  1048  		if n == 0 {
  1049  			return nil, io.ErrUnexpectedEOF
  1050  		}
  1051  		b = b[n:]
  1052  		if x > uint64(len(b)) {
  1053  			return nil, io.ErrUnexpectedEOF
  1054  		}
  1055  		m := &int32Value{}
  1056  		if err := Unmarshal(b[:x], m); err != nil {
  1057  			return nil, err
  1058  		}
  1059  		slice := f.getSlice(sub.typ)
  1060  		newSlice := reflect.Append(slice, reflect.ValueOf(m.Value))
  1061  		slice.Set(newSlice)
  1062  		return b[x:], nil
  1063  	}
  1064  }
  1065  
  1066  func makeStdUInt32ValueMarshaler(u *marshalInfo) (sizer, marshaler) {
  1067  	return func(ptr pointer, tagsize int) int {
  1068  			t := ptr.asPointerTo(u.typ).Interface().(*uint32)
  1069  			v := &uint32Value{*t}
  1070  			siz := Size(v)
  1071  			return tagsize + SizeVarint(uint64(siz)) + siz
  1072  		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
  1073  			t := ptr.asPointerTo(u.typ).Interface().(*uint32)
  1074  			v := &uint32Value{*t}
  1075  			buf, err := Marshal(v)
  1076  			if err != nil {
  1077  				return nil, err
  1078  			}
  1079  			b = appendVarint(b, wiretag)
  1080  			b = appendVarint(b, uint64(len(buf)))
  1081  			b = append(b, buf...)
  1082  			return b, nil
  1083  		}
  1084  }
  1085  
  1086  func makeStdUInt32ValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) {
  1087  	return func(ptr pointer, tagsize int) int {
  1088  			if ptr.isNil() {
  1089  				return 0
  1090  			}
  1091  			t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*uint32)
  1092  			v := &uint32Value{*t}
  1093  			siz := Size(v)
  1094  			return tagsize + SizeVarint(uint64(siz)) + siz
  1095  		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
  1096  			if ptr.isNil() {
  1097  				return b, nil
  1098  			}
  1099  			t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*uint32)
  1100  			v := &uint32Value{*t}
  1101  			buf, err := Marshal(v)
  1102  			if err != nil {
  1103  				return nil, err
  1104  			}
  1105  			b = appendVarint(b, wiretag)
  1106  			b = appendVarint(b, uint64(len(buf)))
  1107  			b = append(b, buf...)
  1108  			return b, nil
  1109  		}
  1110  }
  1111  
  1112  func makeStdUInt32ValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
  1113  	return func(ptr pointer, tagsize int) int {
  1114  			s := ptr.getSlice(u.typ)
  1115  			n := 0
  1116  			for i := 0; i < s.Len(); i++ {
  1117  				elem := s.Index(i)
  1118  				t := elem.Interface().(uint32)
  1119  				v := &uint32Value{t}
  1120  				siz := Size(v)
  1121  				n += siz + SizeVarint(uint64(siz)) + tagsize
  1122  			}
  1123  			return n
  1124  		},
  1125  		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
  1126  			s := ptr.getSlice(u.typ)
  1127  			for i := 0; i < s.Len(); i++ {
  1128  				elem := s.Index(i)
  1129  				t := elem.Interface().(uint32)
  1130  				v := &uint32Value{t}
  1131  				siz := Size(v)
  1132  				buf, err := Marshal(v)
  1133  				if err != nil {
  1134  					return nil, err
  1135  				}
  1136  				b = appendVarint(b, wiretag)
  1137  				b = appendVarint(b, uint64(siz))
  1138  				b = append(b, buf...)
  1139  			}
  1140  
  1141  			return b, nil
  1142  		}
  1143  }
  1144  
  1145  func makeStdUInt32ValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
  1146  	return func(ptr pointer, tagsize int) int {
  1147  			s := ptr.getSlice(reflect.PtrTo(u.typ))
  1148  			n := 0
  1149  			for i := 0; i < s.Len(); i++ {
  1150  				elem := s.Index(i)
  1151  				t := elem.Interface().(*uint32)
  1152  				v := &uint32Value{*t}
  1153  				siz := Size(v)
  1154  				n += siz + SizeVarint(uint64(siz)) + tagsize
  1155  			}
  1156  			return n
  1157  		},
  1158  		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
  1159  			s := ptr.getSlice(reflect.PtrTo(u.typ))
  1160  			for i := 0; i < s.Len(); i++ {
  1161  				elem := s.Index(i)
  1162  				t := elem.Interface().(*uint32)
  1163  				v := &uint32Value{*t}
  1164  				siz := Size(v)
  1165  				buf, err := Marshal(v)
  1166  				if err != nil {
  1167  					return nil, err
  1168  				}
  1169  				b = appendVarint(b, wiretag)
  1170  				b = appendVarint(b, uint64(siz))
  1171  				b = append(b, buf...)
  1172  			}
  1173  
  1174  			return b, nil
  1175  		}
  1176  }
  1177  
  1178  func makeStdUInt32ValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
  1179  	return func(b []byte, f pointer, w int) ([]byte, error) {
  1180  		if w != WireBytes {
  1181  			return nil, errInternalBadWireType
  1182  		}
  1183  		x, n := decodeVarint(b)
  1184  		if n == 0 {
  1185  			return nil, io.ErrUnexpectedEOF
  1186  		}
  1187  		b = b[n:]
  1188  		if x > uint64(len(b)) {
  1189  			return nil, io.ErrUnexpectedEOF
  1190  		}
  1191  		m := &uint32Value{}
  1192  		if err := Unmarshal(b[:x], m); err != nil {
  1193  			return nil, err
  1194  		}
  1195  		s := f.asPointerTo(sub.typ).Elem()
  1196  		s.Set(reflect.ValueOf(m.Value))
  1197  		return b[x:], nil
  1198  	}
  1199  }
  1200  
  1201  func makeStdUInt32ValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
  1202  	return func(b []byte, f pointer, w int) ([]byte, error) {
  1203  		if w != WireBytes {
  1204  			return nil, errInternalBadWireType
  1205  		}
  1206  		x, n := decodeVarint(b)
  1207  		if n == 0 {
  1208  			return nil, io.ErrUnexpectedEOF
  1209  		}
  1210  		b = b[n:]
  1211  		if x > uint64(len(b)) {
  1212  			return nil, io.ErrUnexpectedEOF
  1213  		}
  1214  		m := &uint32Value{}
  1215  		if err := Unmarshal(b[:x], m); err != nil {
  1216  			return nil, err
  1217  		}
  1218  		s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()
  1219  		s.Set(reflect.ValueOf(&m.Value))
  1220  		return b[x:], nil
  1221  	}
  1222  }
  1223  
  1224  func makeStdUInt32ValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
  1225  	return func(b []byte, f pointer, w int) ([]byte, error) {
  1226  		if w != WireBytes {
  1227  			return nil, errInternalBadWireType
  1228  		}
  1229  		x, n := decodeVarint(b)
  1230  		if n == 0 {
  1231  			return nil, io.ErrUnexpectedEOF
  1232  		}
  1233  		b = b[n:]
  1234  		if x > uint64(len(b)) {
  1235  			return nil, io.ErrUnexpectedEOF
  1236  		}
  1237  		m := &uint32Value{}
  1238  		if err := Unmarshal(b[:x], m); err != nil {
  1239  			return nil, err
  1240  		}
  1241  		slice := f.getSlice(reflect.PtrTo(sub.typ))
  1242  		newSlice := reflect.Append(slice, reflect.ValueOf(&m.Value))
  1243  		slice.Set(newSlice)
  1244  		return b[x:], nil
  1245  	}
  1246  }
  1247  
  1248  func makeStdUInt32ValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
  1249  	return func(b []byte, f pointer, w int) ([]byte, error) {
  1250  		if w != WireBytes {
  1251  			return nil, errInternalBadWireType
  1252  		}
  1253  		x, n := decodeVarint(b)
  1254  		if n == 0 {
  1255  			return nil, io.ErrUnexpectedEOF
  1256  		}
  1257  		b = b[n:]
  1258  		if x > uint64(len(b)) {
  1259  			return nil, io.ErrUnexpectedEOF
  1260  		}
  1261  		m := &uint32Value{}
  1262  		if err := Unmarshal(b[:x], m); err != nil {
  1263  			return nil, err
  1264  		}
  1265  		slice := f.getSlice(sub.typ)
  1266  		newSlice := reflect.Append(slice, reflect.ValueOf(m.Value))
  1267  		slice.Set(newSlice)
  1268  		return b[x:], nil
  1269  	}
  1270  }
  1271  
  1272  func makeStdBoolValueMarshaler(u *marshalInfo) (sizer, marshaler) {
  1273  	return func(ptr pointer, tagsize int) int {
  1274  			t := ptr.asPointerTo(u.typ).Interface().(*bool)
  1275  			v := &boolValue{*t}
  1276  			siz := Size(v)
  1277  			return tagsize + SizeVarint(uint64(siz)) + siz
  1278  		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
  1279  			t := ptr.asPointerTo(u.typ).Interface().(*bool)
  1280  			v := &boolValue{*t}
  1281  			buf, err := Marshal(v)
  1282  			if err != nil {
  1283  				return nil, err
  1284  			}
  1285  			b = appendVarint(b, wiretag)
  1286  			b = appendVarint(b, uint64(len(buf)))
  1287  			b = append(b, buf...)
  1288  			return b, nil
  1289  		}
  1290  }
  1291  
  1292  func makeStdBoolValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) {
  1293  	return func(ptr pointer, tagsize int) int {
  1294  			if ptr.isNil() {
  1295  				return 0
  1296  			}
  1297  			t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*bool)
  1298  			v := &boolValue{*t}
  1299  			siz := Size(v)
  1300  			return tagsize + SizeVarint(uint64(siz)) + siz
  1301  		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
  1302  			if ptr.isNil() {
  1303  				return b, nil
  1304  			}
  1305  			t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*bool)
  1306  			v := &boolValue{*t}
  1307  			buf, err := Marshal(v)
  1308  			if err != nil {
  1309  				return nil, err
  1310  			}
  1311  			b = appendVarint(b, wiretag)
  1312  			b = appendVarint(b, uint64(len(buf)))
  1313  			b = append(b, buf...)
  1314  			return b, nil
  1315  		}
  1316  }
  1317  
  1318  func makeStdBoolValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
  1319  	return func(ptr pointer, tagsize int) int {
  1320  			s := ptr.getSlice(u.typ)
  1321  			n := 0
  1322  			for i := 0; i < s.Len(); i++ {
  1323  				elem := s.Index(i)
  1324  				t := elem.Interface().(bool)
  1325  				v := &boolValue{t}
  1326  				siz := Size(v)
  1327  				n += siz + SizeVarint(uint64(siz)) + tagsize
  1328  			}
  1329  			return n
  1330  		},
  1331  		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
  1332  			s := ptr.getSlice(u.typ)
  1333  			for i := 0; i < s.Len(); i++ {
  1334  				elem := s.Index(i)
  1335  				t := elem.Interface().(bool)
  1336  				v := &boolValue{t}
  1337  				siz := Size(v)
  1338  				buf, err := Marshal(v)
  1339  				if err != nil {
  1340  					return nil, err
  1341  				}
  1342  				b = appendVarint(b, wiretag)
  1343  				b = appendVarint(b, uint64(siz))
  1344  				b = append(b, buf...)
  1345  			}
  1346  
  1347  			return b, nil
  1348  		}
  1349  }
  1350  
  1351  func makeStdBoolValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
  1352  	return func(ptr pointer, tagsize int) int {
  1353  			s := ptr.getSlice(reflect.PtrTo(u.typ))
  1354  			n := 0
  1355  			for i := 0; i < s.Len(); i++ {
  1356  				elem := s.Index(i)
  1357  				t := elem.Interface().(*bool)
  1358  				v := &boolValue{*t}
  1359  				siz := Size(v)
  1360  				n += siz + SizeVarint(uint64(siz)) + tagsize
  1361  			}
  1362  			return n
  1363  		},
  1364  		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
  1365  			s := ptr.getSlice(reflect.PtrTo(u.typ))
  1366  			for i := 0; i < s.Len(); i++ {
  1367  				elem := s.Index(i)
  1368  				t := elem.Interface().(*bool)
  1369  				v := &boolValue{*t}
  1370  				siz := Size(v)
  1371  				buf, err := Marshal(v)
  1372  				if err != nil {
  1373  					return nil, err
  1374  				}
  1375  				b = appendVarint(b, wiretag)
  1376  				b = appendVarint(b, uint64(siz))
  1377  				b = append(b, buf...)
  1378  			}
  1379  
  1380  			return b, nil
  1381  		}
  1382  }
  1383  
  1384  func makeStdBoolValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
  1385  	return func(b []byte, f pointer, w int) ([]byte, error) {
  1386  		if w != WireBytes {
  1387  			return nil, errInternalBadWireType
  1388  		}
  1389  		x, n := decodeVarint(b)
  1390  		if n == 0 {
  1391  			return nil, io.ErrUnexpectedEOF
  1392  		}
  1393  		b = b[n:]
  1394  		if x > uint64(len(b)) {
  1395  			return nil, io.ErrUnexpectedEOF
  1396  		}
  1397  		m := &boolValue{}
  1398  		if err := Unmarshal(b[:x], m); err != nil {
  1399  			return nil, err
  1400  		}
  1401  		s := f.asPointerTo(sub.typ).Elem()
  1402  		s.Set(reflect.ValueOf(m.Value))
  1403  		return b[x:], nil
  1404  	}
  1405  }
  1406  
  1407  func makeStdBoolValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
  1408  	return func(b []byte, f pointer, w int) ([]byte, error) {
  1409  		if w != WireBytes {
  1410  			return nil, errInternalBadWireType
  1411  		}
  1412  		x, n := decodeVarint(b)
  1413  		if n == 0 {
  1414  			return nil, io.ErrUnexpectedEOF
  1415  		}
  1416  		b = b[n:]
  1417  		if x > uint64(len(b)) {
  1418  			return nil, io.ErrUnexpectedEOF
  1419  		}
  1420  		m := &boolValue{}
  1421  		if err := Unmarshal(b[:x], m); err != nil {
  1422  			return nil, err
  1423  		}
  1424  		s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()
  1425  		s.Set(reflect.ValueOf(&m.Value))
  1426  		return b[x:], nil
  1427  	}
  1428  }
  1429  
  1430  func makeStdBoolValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
  1431  	return func(b []byte, f pointer, w int) ([]byte, error) {
  1432  		if w != WireBytes {
  1433  			return nil, errInternalBadWireType
  1434  		}
  1435  		x, n := decodeVarint(b)
  1436  		if n == 0 {
  1437  			return nil, io.ErrUnexpectedEOF
  1438  		}
  1439  		b = b[n:]
  1440  		if x > uint64(len(b)) {
  1441  			return nil, io.ErrUnexpectedEOF
  1442  		}
  1443  		m := &boolValue{}
  1444  		if err := Unmarshal(b[:x], m); err != nil {
  1445  			return nil, err
  1446  		}
  1447  		slice := f.getSlice(reflect.PtrTo(sub.typ))
  1448  		newSlice := reflect.Append(slice, reflect.ValueOf(&m.Value))
  1449  		slice.Set(newSlice)
  1450  		return b[x:], nil
  1451  	}
  1452  }
  1453  
  1454  func makeStdBoolValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
  1455  	return func(b []byte, f pointer, w int) ([]byte, error) {
  1456  		if w != WireBytes {
  1457  			return nil, errInternalBadWireType
  1458  		}
  1459  		x, n := decodeVarint(b)
  1460  		if n == 0 {
  1461  			return nil, io.ErrUnexpectedEOF
  1462  		}
  1463  		b = b[n:]
  1464  		if x > uint64(len(b)) {
  1465  			return nil, io.ErrUnexpectedEOF
  1466  		}
  1467  		m := &boolValue{}
  1468  		if err := Unmarshal(b[:x], m); err != nil {
  1469  			return nil, err
  1470  		}
  1471  		slice := f.getSlice(sub.typ)
  1472  		newSlice := reflect.Append(slice, reflect.ValueOf(m.Value))
  1473  		slice.Set(newSlice)
  1474  		return b[x:], nil
  1475  	}
  1476  }
  1477  
  1478  func makeStdStringValueMarshaler(u *marshalInfo) (sizer, marshaler) {
  1479  	return func(ptr pointer, tagsize int) int {
  1480  			t := ptr.asPointerTo(u.typ).Interface().(*string)
  1481  			v := &stringValue{*t}
  1482  			siz := Size(v)
  1483  			return tagsize + SizeVarint(uint64(siz)) + siz
  1484  		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
  1485  			t := ptr.asPointerTo(u.typ).Interface().(*string)
  1486  			v := &stringValue{*t}
  1487  			buf, err := Marshal(v)
  1488  			if err != nil {
  1489  				return nil, err
  1490  			}
  1491  			b = appendVarint(b, wiretag)
  1492  			b = appendVarint(b, uint64(len(buf)))
  1493  			b = append(b, buf...)
  1494  			return b, nil
  1495  		}
  1496  }
  1497  
  1498  func makeStdStringValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) {
  1499  	return func(ptr pointer, tagsize int) int {
  1500  			if ptr.isNil() {
  1501  				return 0
  1502  			}
  1503  			t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*string)
  1504  			v := &stringValue{*t}
  1505  			siz := Size(v)
  1506  			return tagsize + SizeVarint(uint64(siz)) + siz
  1507  		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
  1508  			if ptr.isNil() {
  1509  				return b, nil
  1510  			}
  1511  			t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*string)
  1512  			v := &stringValue{*t}
  1513  			buf, err := Marshal(v)
  1514  			if err != nil {
  1515  				return nil, err
  1516  			}
  1517  			b = appendVarint(b, wiretag)
  1518  			b = appendVarint(b, uint64(len(buf)))
  1519  			b = append(b, buf...)
  1520  			return b, nil
  1521  		}
  1522  }
  1523  
  1524  func makeStdStringValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
  1525  	return func(ptr pointer, tagsize int) int {
  1526  			s := ptr.getSlice(u.typ)
  1527  			n := 0
  1528  			for i := 0; i < s.Len(); i++ {
  1529  				elem := s.Index(i)
  1530  				t := elem.Interface().(string)
  1531  				v := &stringValue{t}
  1532  				siz := Size(v)
  1533  				n += siz + SizeVarint(uint64(siz)) + tagsize
  1534  			}
  1535  			return n
  1536  		},
  1537  		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
  1538  			s := ptr.getSlice(u.typ)
  1539  			for i := 0; i < s.Len(); i++ {
  1540  				elem := s.Index(i)
  1541  				t := elem.Interface().(string)
  1542  				v := &stringValue{t}
  1543  				siz := Size(v)
  1544  				buf, err := Marshal(v)
  1545  				if err != nil {
  1546  					return nil, err
  1547  				}
  1548  				b = appendVarint(b, wiretag)
  1549  				b = appendVarint(b, uint64(siz))
  1550  				b = append(b, buf...)
  1551  			}
  1552  
  1553  			return b, nil
  1554  		}
  1555  }
  1556  
  1557  func makeStdStringValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
  1558  	return func(ptr pointer, tagsize int) int {
  1559  			s := ptr.getSlice(reflect.PtrTo(u.typ))
  1560  			n := 0
  1561  			for i := 0; i < s.Len(); i++ {
  1562  				elem := s.Index(i)
  1563  				t := elem.Interface().(*string)
  1564  				v := &stringValue{*t}
  1565  				siz := Size(v)
  1566  				n += siz + SizeVarint(uint64(siz)) + tagsize
  1567  			}
  1568  			return n
  1569  		},
  1570  		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
  1571  			s := ptr.getSlice(reflect.PtrTo(u.typ))
  1572  			for i := 0; i < s.Len(); i++ {
  1573  				elem := s.Index(i)
  1574  				t := elem.Interface().(*string)
  1575  				v := &stringValue{*t}
  1576  				siz := Size(v)
  1577  				buf, err := Marshal(v)
  1578  				if err != nil {
  1579  					return nil, err
  1580  				}
  1581  				b = appendVarint(b, wiretag)
  1582  				b = appendVarint(b, uint64(siz))
  1583  				b = append(b, buf...)
  1584  			}
  1585  
  1586  			return b, nil
  1587  		}
  1588  }
  1589  
  1590  func makeStdStringValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
  1591  	return func(b []byte, f pointer, w int) ([]byte, error) {
  1592  		if w != WireBytes {
  1593  			return nil, errInternalBadWireType
  1594  		}
  1595  		x, n := decodeVarint(b)
  1596  		if n == 0 {
  1597  			return nil, io.ErrUnexpectedEOF
  1598  		}
  1599  		b = b[n:]
  1600  		if x > uint64(len(b)) {
  1601  			return nil, io.ErrUnexpectedEOF
  1602  		}
  1603  		m := &stringValue{}
  1604  		if err := Unmarshal(b[:x], m); err != nil {
  1605  			return nil, err
  1606  		}
  1607  		s := f.asPointerTo(sub.typ).Elem()
  1608  		s.Set(reflect.ValueOf(m.Value))
  1609  		return b[x:], nil
  1610  	}
  1611  }
  1612  
  1613  func makeStdStringValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
  1614  	return func(b []byte, f pointer, w int) ([]byte, error) {
  1615  		if w != WireBytes {
  1616  			return nil, errInternalBadWireType
  1617  		}
  1618  		x, n := decodeVarint(b)
  1619  		if n == 0 {
  1620  			return nil, io.ErrUnexpectedEOF
  1621  		}
  1622  		b = b[n:]
  1623  		if x > uint64(len(b)) {
  1624  			return nil, io.ErrUnexpectedEOF
  1625  		}
  1626  		m := &stringValue{}
  1627  		if err := Unmarshal(b[:x], m); err != nil {
  1628  			return nil, err
  1629  		}
  1630  		s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()
  1631  		s.Set(reflect.ValueOf(&m.Value))
  1632  		return b[x:], nil
  1633  	}
  1634  }
  1635  
  1636  func makeStdStringValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
  1637  	return func(b []byte, f pointer, w int) ([]byte, error) {
  1638  		if w != WireBytes {
  1639  			return nil, errInternalBadWireType
  1640  		}
  1641  		x, n := decodeVarint(b)
  1642  		if n == 0 {
  1643  			return nil, io.ErrUnexpectedEOF
  1644  		}
  1645  		b = b[n:]
  1646  		if x > uint64(len(b)) {
  1647  			return nil, io.ErrUnexpectedEOF
  1648  		}
  1649  		m := &stringValue{}
  1650  		if err := Unmarshal(b[:x], m); err != nil {
  1651  			return nil, err
  1652  		}
  1653  		slice := f.getSlice(reflect.PtrTo(sub.typ))
  1654  		newSlice := reflect.Append(slice, reflect.ValueOf(&m.Value))
  1655  		slice.Set(newSlice)
  1656  		return b[x:], nil
  1657  	}
  1658  }
  1659  
  1660  func makeStdStringValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
  1661  	return func(b []byte, f pointer, w int) ([]byte, error) {
  1662  		if w != WireBytes {
  1663  			return nil, errInternalBadWireType
  1664  		}
  1665  		x, n := decodeVarint(b)
  1666  		if n == 0 {
  1667  			return nil, io.ErrUnexpectedEOF
  1668  		}
  1669  		b = b[n:]
  1670  		if x > uint64(len(b)) {
  1671  			return nil, io.ErrUnexpectedEOF
  1672  		}
  1673  		m := &stringValue{}
  1674  		if err := Unmarshal(b[:x], m); err != nil {
  1675  			return nil, err
  1676  		}
  1677  		slice := f.getSlice(sub.typ)
  1678  		newSlice := reflect.Append(slice, reflect.ValueOf(m.Value))
  1679  		slice.Set(newSlice)
  1680  		return b[x:], nil
  1681  	}
  1682  }
  1683  
  1684  func makeStdBytesValueMarshaler(u *marshalInfo) (sizer, marshaler) {
  1685  	return func(ptr pointer, tagsize int) int {
  1686  			t := ptr.asPointerTo(u.typ).Interface().(*[]byte)
  1687  			v := &bytesValue{*t}
  1688  			siz := Size(v)
  1689  			return tagsize + SizeVarint(uint64(siz)) + siz
  1690  		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
  1691  			t := ptr.asPointerTo(u.typ).Interface().(*[]byte)
  1692  			v := &bytesValue{*t}
  1693  			buf, err := Marshal(v)
  1694  			if err != nil {
  1695  				return nil, err
  1696  			}
  1697  			b = appendVarint(b, wiretag)
  1698  			b = appendVarint(b, uint64(len(buf)))
  1699  			b = append(b, buf...)
  1700  			return b, nil
  1701  		}
  1702  }
  1703  
  1704  func makeStdBytesValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) {
  1705  	return func(ptr pointer, tagsize int) int {
  1706  			if ptr.isNil() {
  1707  				return 0
  1708  			}
  1709  			t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*[]byte)
  1710  			v := &bytesValue{*t}
  1711  			siz := Size(v)
  1712  			return tagsize + SizeVarint(uint64(siz)) + siz
  1713  		}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
  1714  			if ptr.isNil() {
  1715  				return b, nil
  1716  			}
  1717  			t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*[]byte)
  1718  			v := &bytesValue{*t}
  1719  			buf, err := Marshal(v)
  1720  			if err != nil {
  1721  				return nil, err
  1722  			}
  1723  			b = appendVarint(b, wiretag)
  1724  			b = appendVarint(b, uint64(len(buf)))
  1725  			b = append(b, buf...)
  1726  			return b, nil
  1727  		}
  1728  }
  1729  
  1730  func makeStdBytesValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
  1731  	return func(ptr pointer, tagsize int) int {
  1732  			s := ptr.getSlice(u.typ)
  1733  			n := 0
  1734  			for i := 0; i < s.Len(); i++ {
  1735  				elem := s.Index(i)
  1736  				t := elem.Interface().([]byte)
  1737  				v := &bytesValue{t}
  1738  				siz := Size(v)
  1739  				n += siz + SizeVarint(uint64(siz)) + tagsize
  1740  			}
  1741  			return n
  1742  		},
  1743  		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
  1744  			s := ptr.getSlice(u.typ)
  1745  			for i := 0; i < s.Len(); i++ {
  1746  				elem := s.Index(i)
  1747  				t := elem.Interface().([]byte)
  1748  				v := &bytesValue{t}
  1749  				siz := Size(v)
  1750  				buf, err := Marshal(v)
  1751  				if err != nil {
  1752  					return nil, err
  1753  				}
  1754  				b = appendVarint(b, wiretag)
  1755  				b = appendVarint(b, uint64(siz))
  1756  				b = append(b, buf...)
  1757  			}
  1758  
  1759  			return b, nil
  1760  		}
  1761  }
  1762  
  1763  func makeStdBytesValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
  1764  	return func(ptr pointer, tagsize int) int {
  1765  			s := ptr.getSlice(reflect.PtrTo(u.typ))
  1766  			n := 0
  1767  			for i := 0; i < s.Len(); i++ {
  1768  				elem := s.Index(i)
  1769  				t := elem.Interface().(*[]byte)
  1770  				v := &bytesValue{*t}
  1771  				siz := Size(v)
  1772  				n += siz + SizeVarint(uint64(siz)) + tagsize
  1773  			}
  1774  			return n
  1775  		},
  1776  		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
  1777  			s := ptr.getSlice(reflect.PtrTo(u.typ))
  1778  			for i := 0; i < s.Len(); i++ {
  1779  				elem := s.Index(i)
  1780  				t := elem.Interface().(*[]byte)
  1781  				v := &bytesValue{*t}
  1782  				siz := Size(v)
  1783  				buf, err := Marshal(v)
  1784  				if err != nil {
  1785  					return nil, err
  1786  				}
  1787  				b = appendVarint(b, wiretag)
  1788  				b = appendVarint(b, uint64(siz))
  1789  				b = append(b, buf...)
  1790  			}
  1791  
  1792  			return b, nil
  1793  		}
  1794  }
  1795  
  1796  func makeStdBytesValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
  1797  	return func(b []byte, f pointer, w int) ([]byte, error) {
  1798  		if w != WireBytes {
  1799  			return nil, errInternalBadWireType
  1800  		}
  1801  		x, n := decodeVarint(b)
  1802  		if n == 0 {
  1803  			return nil, io.ErrUnexpectedEOF
  1804  		}
  1805  		b = b[n:]
  1806  		if x > uint64(len(b)) {
  1807  			return nil, io.ErrUnexpectedEOF
  1808  		}
  1809  		m := &bytesValue{}
  1810  		if err := Unmarshal(b[:x], m); err != nil {
  1811  			return nil, err
  1812  		}
  1813  		s := f.asPointerTo(sub.typ).Elem()
  1814  		s.Set(reflect.ValueOf(m.Value))
  1815  		return b[x:], nil
  1816  	}
  1817  }
  1818  
  1819  func makeStdBytesValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
  1820  	return func(b []byte, f pointer, w int) ([]byte, error) {
  1821  		if w != WireBytes {
  1822  			return nil, errInternalBadWireType
  1823  		}
  1824  		x, n := decodeVarint(b)
  1825  		if n == 0 {
  1826  			return nil, io.ErrUnexpectedEOF
  1827  		}
  1828  		b = b[n:]
  1829  		if x > uint64(len(b)) {
  1830  			return nil, io.ErrUnexpectedEOF
  1831  		}
  1832  		m := &bytesValue{}
  1833  		if err := Unmarshal(b[:x], m); err != nil {
  1834  			return nil, err
  1835  		}
  1836  		s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()
  1837  		s.Set(reflect.ValueOf(&m.Value))
  1838  		return b[x:], nil
  1839  	}
  1840  }
  1841  
  1842  func makeStdBytesValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
  1843  	return func(b []byte, f pointer, w int) ([]byte, error) {
  1844  		if w != WireBytes {
  1845  			return nil, errInternalBadWireType
  1846  		}
  1847  		x, n := decodeVarint(b)
  1848  		if n == 0 {
  1849  			return nil, io.ErrUnexpectedEOF
  1850  		}
  1851  		b = b[n:]
  1852  		if x > uint64(len(b)) {
  1853  			return nil, io.ErrUnexpectedEOF
  1854  		}
  1855  		m := &bytesValue{}
  1856  		if err := Unmarshal(b[:x], m); err != nil {
  1857  			return nil, err
  1858  		}
  1859  		slice := f.getSlice(reflect.PtrTo(sub.typ))
  1860  		newSlice := reflect.Append(slice, reflect.ValueOf(&m.Value))
  1861  		slice.Set(newSlice)
  1862  		return b[x:], nil
  1863  	}
  1864  }
  1865  
  1866  func makeStdBytesValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
  1867  	return func(b []byte, f pointer, w int) ([]byte, error) {
  1868  		if w != WireBytes {
  1869  			return nil, errInternalBadWireType
  1870  		}
  1871  		x, n := decodeVarint(b)
  1872  		if n == 0 {
  1873  			return nil, io.ErrUnexpectedEOF
  1874  		}
  1875  		b = b[n:]
  1876  		if x > uint64(len(b)) {
  1877  			return nil, io.ErrUnexpectedEOF
  1878  		}
  1879  		m := &bytesValue{}
  1880  		if err := Unmarshal(b[:x], m); err != nil {
  1881  			return nil, err
  1882  		}
  1883  		slice := f.getSlice(sub.typ)
  1884  		newSlice := reflect.Append(slice, reflect.ValueOf(m.Value))
  1885  		slice.Set(newSlice)
  1886  		return b[x:], nil
  1887  	}
  1888  }
  1889  

View as plain text