[testing] Add utility method to generate fake message from protobuf
This commit is contained in:
		
							
								
								
									
										2
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								go.mod
									
									
									
									
									
								
							@@ -5,6 +5,8 @@ go 1.13
 | 
				
			|||||||
require (
 | 
					require (
 | 
				
			||||||
	github.com/Microsoft/hcsshim v0.8.6 // indirect
 | 
						github.com/Microsoft/hcsshim v0.8.6 // indirect
 | 
				
			||||||
	github.com/eclipse/paho.mqtt.golang v1.2.0
 | 
						github.com/eclipse/paho.mqtt.golang v1.2.0
 | 
				
			||||||
 | 
						github.com/golang/protobuf v1.3.2
 | 
				
			||||||
 | 
						github.com/sirupsen/logrus v1.2.0
 | 
				
			||||||
	github.com/testcontainers/testcontainers-go v0.0.9
 | 
						github.com/testcontainers/testcontainers-go v0.0.9
 | 
				
			||||||
	golang.org/x/net v0.0.0-20191126235420-ef20fe5d7933 // indirect
 | 
						golang.org/x/net v0.0.0-20191126235420-ef20fe5d7933 // indirect
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										1
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								go.sum
									
									
									
									
									
								
							@@ -34,6 +34,7 @@ github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfU
 | 
				
			|||||||
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
 | 
					github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
 | 
				
			||||||
github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
 | 
					github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
 | 
				
			||||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 | 
					github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 | 
				
			||||||
 | 
					github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 | 
				
			||||||
github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ=
 | 
					github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ=
 | 
				
			||||||
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
 | 
					github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
 | 
				
			||||||
github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8=
 | 
					github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,6 +3,8 @@ package testtools
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"github.com/cyrilix/robocar-base/mqttdevice"
 | 
						"github.com/cyrilix/robocar-base/mqttdevice"
 | 
				
			||||||
	mqtt "github.com/eclipse/paho.mqtt.golang"
 | 
						mqtt "github.com/eclipse/paho.mqtt.golang"
 | 
				
			||||||
 | 
						"github.com/golang/protobuf/proto"
 | 
				
			||||||
 | 
						log "github.com/sirupsen/logrus"
 | 
				
			||||||
	"sync"
 | 
						"sync"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -71,3 +73,12 @@ func NewFakeMessage(topic string, payload []byte) mqtt.Message {
 | 
				
			|||||||
		acked:   false,
 | 
							acked:   false,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func NewFakeMessageFromProtobuf(topic string, msg proto.Message) mqtt.Message{
 | 
				
			||||||
 | 
						payload, err := proto.Marshal(msg)
 | 
				
			||||||
 | 
						if err  != nil {
 | 
				
			||||||
 | 
							log.Errorf("unable to marshal protobuf message %T: %v", msg, err)
 | 
				
			||||||
 | 
							return nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return NewFakeMessage(topic, payload)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										1
									
								
								vendor/github.com/golang/protobuf/proto/decode.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/golang/protobuf/proto/decode.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -186,7 +186,6 @@ func (p *Buffer) DecodeVarint() (x uint64, err error) {
 | 
				
			|||||||
	if b&0x80 == 0 {
 | 
						if b&0x80 == 0 {
 | 
				
			||||||
		goto done
 | 
							goto done
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	// x -= 0x80 << 63 // Always zero.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0, errOverflow
 | 
						return 0, errOverflow
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										63
									
								
								vendor/github.com/golang/protobuf/proto/deprecated.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								vendor/github.com/golang/protobuf/proto/deprecated.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,63 @@
 | 
				
			|||||||
 | 
					// Go support for Protocol Buffers - Google's data interchange format
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Copyright 2018 The Go Authors.  All rights reserved.
 | 
				
			||||||
 | 
					// https://github.com/golang/protobuf
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Redistribution and use in source and binary forms, with or without
 | 
				
			||||||
 | 
					// modification, are permitted provided that the following conditions are
 | 
				
			||||||
 | 
					// met:
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//     * Redistributions of source code must retain the above copyright
 | 
				
			||||||
 | 
					// notice, this list of conditions and the following disclaimer.
 | 
				
			||||||
 | 
					//     * Redistributions in binary form must reproduce the above
 | 
				
			||||||
 | 
					// copyright notice, this list of conditions and the following disclaimer
 | 
				
			||||||
 | 
					// in the documentation and/or other materials provided with the
 | 
				
			||||||
 | 
					// distribution.
 | 
				
			||||||
 | 
					//     * Neither the name of Google Inc. nor the names of its
 | 
				
			||||||
 | 
					// contributors may be used to endorse or promote products derived from
 | 
				
			||||||
 | 
					// this software without specific prior written permission.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
				
			||||||
 | 
					// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
				
			||||||
 | 
					// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
				
			||||||
 | 
					// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 | 
				
			||||||
 | 
					// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
				
			||||||
 | 
					// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 | 
				
			||||||
 | 
					// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
				
			||||||
 | 
					// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | 
				
			||||||
 | 
					// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
				
			||||||
 | 
					// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
				
			||||||
 | 
					// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package proto
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "errors"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Deprecated: do not use.
 | 
				
			||||||
 | 
					type Stats struct{ Emalloc, Dmalloc, Encode, Decode, Chit, Cmiss, Size uint64 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Deprecated: do not use.
 | 
				
			||||||
 | 
					func GetStats() Stats { return Stats{} }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Deprecated: do not use.
 | 
				
			||||||
 | 
					func MarshalMessageSet(interface{}) ([]byte, error) {
 | 
				
			||||||
 | 
						return nil, errors.New("proto: not implemented")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Deprecated: do not use.
 | 
				
			||||||
 | 
					func UnmarshalMessageSet([]byte, interface{}) error {
 | 
				
			||||||
 | 
						return errors.New("proto: not implemented")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Deprecated: do not use.
 | 
				
			||||||
 | 
					func MarshalMessageSetJSON(interface{}) ([]byte, error) {
 | 
				
			||||||
 | 
						return nil, errors.New("proto: not implemented")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Deprecated: do not use.
 | 
				
			||||||
 | 
					func UnmarshalMessageSetJSON([]byte, interface{}) error {
 | 
				
			||||||
 | 
						return errors.New("proto: not implemented")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Deprecated: do not use.
 | 
				
			||||||
 | 
					func RegisterMessageSetType(Message, int32, string) {}
 | 
				
			||||||
							
								
								
									
										3
									
								
								vendor/github.com/golang/protobuf/proto/equal.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/github.com/golang/protobuf/proto/equal.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -246,7 +246,8 @@ func equalExtMap(base reflect.Type, em1, em2 map[int32]Extension) bool {
 | 
				
			|||||||
			return false
 | 
								return false
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		m1, m2 := e1.value, e2.value
 | 
							m1 := extensionAsLegacyType(e1.value)
 | 
				
			||||||
 | 
							m2 := extensionAsLegacyType(e2.value)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if m1 == nil && m2 == nil {
 | 
							if m1 == nil && m2 == nil {
 | 
				
			||||||
			// Both have only encoded form.
 | 
								// Both have only encoded form.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										78
									
								
								vendor/github.com/golang/protobuf/proto/extensions.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										78
									
								
								vendor/github.com/golang/protobuf/proto/extensions.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -185,9 +185,25 @@ type Extension struct {
 | 
				
			|||||||
	// extension will have only enc set. When such an extension is
 | 
						// extension will have only enc set. When such an extension is
 | 
				
			||||||
	// accessed using GetExtension (or GetExtensions) desc and value
 | 
						// accessed using GetExtension (or GetExtensions) desc and value
 | 
				
			||||||
	// will be set.
 | 
						// will be set.
 | 
				
			||||||
	desc  *ExtensionDesc
 | 
						desc *ExtensionDesc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// value is a concrete value for the extension field. Let the type of
 | 
				
			||||||
 | 
						// desc.ExtensionType be the "API type" and the type of Extension.value
 | 
				
			||||||
 | 
						// be the "storage type". The API type and storage type are the same except:
 | 
				
			||||||
 | 
						//	* For scalars (except []byte), the API type uses *T,
 | 
				
			||||||
 | 
						//	while the storage type uses T.
 | 
				
			||||||
 | 
						//	* For repeated fields, the API type uses []T, while the storage type
 | 
				
			||||||
 | 
						//	uses *[]T.
 | 
				
			||||||
 | 
						//
 | 
				
			||||||
 | 
						// The reason for the divergence is so that the storage type more naturally
 | 
				
			||||||
 | 
						// matches what is expected of when retrieving the values through the
 | 
				
			||||||
 | 
						// protobuf reflection APIs.
 | 
				
			||||||
 | 
						//
 | 
				
			||||||
 | 
						// The value may only be populated if desc is also populated.
 | 
				
			||||||
	value interface{}
 | 
						value interface{}
 | 
				
			||||||
	enc   []byte
 | 
					
 | 
				
			||||||
 | 
						// enc is the raw bytes for the extension field.
 | 
				
			||||||
 | 
						enc []byte
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// SetRawExtension is for testing only.
 | 
					// SetRawExtension is for testing only.
 | 
				
			||||||
@@ -334,7 +350,7 @@ func GetExtension(pb Message, extension *ExtensionDesc) (interface{}, error) {
 | 
				
			|||||||
			// descriptors with the same field number.
 | 
								// descriptors with the same field number.
 | 
				
			||||||
			return nil, errors.New("proto: descriptor conflict")
 | 
								return nil, errors.New("proto: descriptor conflict")
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		return e.value, nil
 | 
							return extensionAsLegacyType(e.value), nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if extension.ExtensionType == nil {
 | 
						if extension.ExtensionType == nil {
 | 
				
			||||||
@@ -349,11 +365,11 @@ func GetExtension(pb Message, extension *ExtensionDesc) (interface{}, error) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// Remember the decoded version and drop the encoded version.
 | 
						// Remember the decoded version and drop the encoded version.
 | 
				
			||||||
	// That way it is safe to mutate what we return.
 | 
						// That way it is safe to mutate what we return.
 | 
				
			||||||
	e.value = v
 | 
						e.value = extensionAsStorageType(v)
 | 
				
			||||||
	e.desc = extension
 | 
						e.desc = extension
 | 
				
			||||||
	e.enc = nil
 | 
						e.enc = nil
 | 
				
			||||||
	emap[extension.Field] = e
 | 
						emap[extension.Field] = e
 | 
				
			||||||
	return e.value, nil
 | 
						return extensionAsLegacyType(e.value), nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// defaultExtensionValue returns the default value for extension.
 | 
					// defaultExtensionValue returns the default value for extension.
 | 
				
			||||||
@@ -488,7 +504,7 @@ func SetExtension(pb Message, extension *ExtensionDesc, value interface{}) error
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	typ := reflect.TypeOf(extension.ExtensionType)
 | 
						typ := reflect.TypeOf(extension.ExtensionType)
 | 
				
			||||||
	if typ != reflect.TypeOf(value) {
 | 
						if typ != reflect.TypeOf(value) {
 | 
				
			||||||
		return errors.New("proto: bad extension value type")
 | 
							return fmt.Errorf("proto: bad extension value type. got: %T, want: %T", value, extension.ExtensionType)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	// nil extension values need to be caught early, because the
 | 
						// nil extension values need to be caught early, because the
 | 
				
			||||||
	// encoder can't distinguish an ErrNil due to a nil extension
 | 
						// encoder can't distinguish an ErrNil due to a nil extension
 | 
				
			||||||
@@ -500,7 +516,7 @@ func SetExtension(pb Message, extension *ExtensionDesc, value interface{}) error
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	extmap := epb.extensionsWrite()
 | 
						extmap := epb.extensionsWrite()
 | 
				
			||||||
	extmap[extension.Field] = Extension{desc: extension, value: value}
 | 
						extmap[extension.Field] = Extension{desc: extension, value: extensionAsStorageType(value)}
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -541,3 +557,51 @@ func RegisterExtension(desc *ExtensionDesc) {
 | 
				
			|||||||
func RegisteredExtensions(pb Message) map[int32]*ExtensionDesc {
 | 
					func RegisteredExtensions(pb Message) map[int32]*ExtensionDesc {
 | 
				
			||||||
	return extensionMaps[reflect.TypeOf(pb).Elem()]
 | 
						return extensionMaps[reflect.TypeOf(pb).Elem()]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// extensionAsLegacyType converts an value in the storage type as the API type.
 | 
				
			||||||
 | 
					// See Extension.value.
 | 
				
			||||||
 | 
					func extensionAsLegacyType(v interface{}) interface{} {
 | 
				
			||||||
 | 
						switch rv := reflect.ValueOf(v); rv.Kind() {
 | 
				
			||||||
 | 
						case reflect.Bool, reflect.Int32, reflect.Int64, reflect.Uint32, reflect.Uint64, reflect.Float32, reflect.Float64, reflect.String:
 | 
				
			||||||
 | 
							// Represent primitive types as a pointer to the value.
 | 
				
			||||||
 | 
							rv2 := reflect.New(rv.Type())
 | 
				
			||||||
 | 
							rv2.Elem().Set(rv)
 | 
				
			||||||
 | 
							v = rv2.Interface()
 | 
				
			||||||
 | 
						case reflect.Ptr:
 | 
				
			||||||
 | 
							// Represent slice types as the value itself.
 | 
				
			||||||
 | 
							switch rv.Type().Elem().Kind() {
 | 
				
			||||||
 | 
							case reflect.Slice:
 | 
				
			||||||
 | 
								if rv.IsNil() {
 | 
				
			||||||
 | 
									v = reflect.Zero(rv.Type().Elem()).Interface()
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									v = rv.Elem().Interface()
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return v
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// extensionAsStorageType converts an value in the API type as the storage type.
 | 
				
			||||||
 | 
					// See Extension.value.
 | 
				
			||||||
 | 
					func extensionAsStorageType(v interface{}) interface{} {
 | 
				
			||||||
 | 
						switch rv := reflect.ValueOf(v); rv.Kind() {
 | 
				
			||||||
 | 
						case reflect.Ptr:
 | 
				
			||||||
 | 
							// Represent slice types as the value itself.
 | 
				
			||||||
 | 
							switch rv.Type().Elem().Kind() {
 | 
				
			||||||
 | 
							case reflect.Bool, reflect.Int32, reflect.Int64, reflect.Uint32, reflect.Uint64, reflect.Float32, reflect.Float64, reflect.String:
 | 
				
			||||||
 | 
								if rv.IsNil() {
 | 
				
			||||||
 | 
									v = reflect.Zero(rv.Type().Elem()).Interface()
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									v = rv.Elem().Interface()
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						case reflect.Slice:
 | 
				
			||||||
 | 
							// Represent slice types as a pointer to the value.
 | 
				
			||||||
 | 
							if rv.Type().Elem().Kind() != reflect.Uint8 {
 | 
				
			||||||
 | 
								rv2 := reflect.New(rv.Type())
 | 
				
			||||||
 | 
								rv2.Elem().Set(rv)
 | 
				
			||||||
 | 
								v = rv2.Interface()
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return v
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										38
									
								
								vendor/github.com/golang/protobuf/proto/lib.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										38
									
								
								vendor/github.com/golang/protobuf/proto/lib.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -341,26 +341,6 @@ type Message interface {
 | 
				
			|||||||
	ProtoMessage()
 | 
						ProtoMessage()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Stats records allocation details about the protocol buffer encoders
 | 
					 | 
				
			||||||
// and decoders.  Useful for tuning the library itself.
 | 
					 | 
				
			||||||
type Stats struct {
 | 
					 | 
				
			||||||
	Emalloc uint64 // mallocs in encode
 | 
					 | 
				
			||||||
	Dmalloc uint64 // mallocs in decode
 | 
					 | 
				
			||||||
	Encode  uint64 // number of encodes
 | 
					 | 
				
			||||||
	Decode  uint64 // number of decodes
 | 
					 | 
				
			||||||
	Chit    uint64 // number of cache hits
 | 
					 | 
				
			||||||
	Cmiss   uint64 // number of cache misses
 | 
					 | 
				
			||||||
	Size    uint64 // number of sizes
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Set to true to enable stats collection.
 | 
					 | 
				
			||||||
const collectStats = false
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
var stats Stats
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// GetStats returns a copy of the global Stats structure.
 | 
					 | 
				
			||||||
func GetStats() Stats { return stats }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// A Buffer is a buffer manager for marshaling and unmarshaling
 | 
					// A Buffer is a buffer manager for marshaling and unmarshaling
 | 
				
			||||||
// protocol buffers.  It may be reused between invocations to
 | 
					// protocol buffers.  It may be reused between invocations to
 | 
				
			||||||
// reduce memory usage.  It is not necessary to use a Buffer;
 | 
					// reduce memory usage.  It is not necessary to use a Buffer;
 | 
				
			||||||
@@ -960,13 +940,19 @@ func isProto3Zero(v reflect.Value) bool {
 | 
				
			|||||||
	return false
 | 
						return false
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ProtoPackageIsVersion2 is referenced from generated protocol buffer files
 | 
					const (
 | 
				
			||||||
// to assert that that code is compatible with this version of the proto package.
 | 
						// ProtoPackageIsVersion3 is referenced from generated protocol buffer files
 | 
				
			||||||
const ProtoPackageIsVersion2 = true
 | 
						// to assert that that code is compatible with this version of the proto package.
 | 
				
			||||||
 | 
						ProtoPackageIsVersion3 = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ProtoPackageIsVersion1 is referenced from generated protocol buffer files
 | 
						// ProtoPackageIsVersion2 is referenced from generated protocol buffer files
 | 
				
			||||||
// to assert that that code is compatible with this version of the proto package.
 | 
						// to assert that that code is compatible with this version of the proto package.
 | 
				
			||||||
const ProtoPackageIsVersion1 = true
 | 
						ProtoPackageIsVersion2 = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// ProtoPackageIsVersion1 is referenced from generated protocol buffer files
 | 
				
			||||||
 | 
						// to assert that that code is compatible with this version of the proto package.
 | 
				
			||||||
 | 
						ProtoPackageIsVersion1 = true
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// InternalMessageInfo is a type used internally by generated .pb.go files.
 | 
					// InternalMessageInfo is a type used internally by generated .pb.go files.
 | 
				
			||||||
// This type is not intended to be used by non-generated code.
 | 
					// This type is not intended to be used by non-generated code.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										137
									
								
								vendor/github.com/golang/protobuf/proto/message_set.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										137
									
								
								vendor/github.com/golang/protobuf/proto/message_set.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -36,13 +36,7 @@ package proto
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"bytes"
 | 
					 | 
				
			||||||
	"encoding/json"
 | 
					 | 
				
			||||||
	"errors"
 | 
						"errors"
 | 
				
			||||||
	"fmt"
 | 
					 | 
				
			||||||
	"reflect"
 | 
					 | 
				
			||||||
	"sort"
 | 
					 | 
				
			||||||
	"sync"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// errNoMessageTypeID occurs when a protocol buffer does not have a message type ID.
 | 
					// errNoMessageTypeID occurs when a protocol buffer does not have a message type ID.
 | 
				
			||||||
@@ -145,46 +139,9 @@ func skipVarint(buf []byte) []byte {
 | 
				
			|||||||
	return buf[i+1:]
 | 
						return buf[i+1:]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// MarshalMessageSet encodes the extension map represented by m in the message set wire format.
 | 
					// unmarshalMessageSet decodes the extension map encoded in buf in the message set wire format.
 | 
				
			||||||
// It is called by generated Marshal methods on protocol buffer messages with the message_set_wire_format option.
 | 
					 | 
				
			||||||
func MarshalMessageSet(exts interface{}) ([]byte, error) {
 | 
					 | 
				
			||||||
	return marshalMessageSet(exts, false)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// marshaMessageSet implements above function, with the opt to turn on / off deterministic during Marshal.
 | 
					 | 
				
			||||||
func marshalMessageSet(exts interface{}, deterministic bool) ([]byte, error) {
 | 
					 | 
				
			||||||
	switch exts := exts.(type) {
 | 
					 | 
				
			||||||
	case *XXX_InternalExtensions:
 | 
					 | 
				
			||||||
		var u marshalInfo
 | 
					 | 
				
			||||||
		siz := u.sizeMessageSet(exts)
 | 
					 | 
				
			||||||
		b := make([]byte, 0, siz)
 | 
					 | 
				
			||||||
		return u.appendMessageSet(b, exts, deterministic)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	case map[int32]Extension:
 | 
					 | 
				
			||||||
		// This is an old-style extension map.
 | 
					 | 
				
			||||||
		// Wrap it in a new-style XXX_InternalExtensions.
 | 
					 | 
				
			||||||
		ie := XXX_InternalExtensions{
 | 
					 | 
				
			||||||
			p: &struct {
 | 
					 | 
				
			||||||
				mu           sync.Mutex
 | 
					 | 
				
			||||||
				extensionMap map[int32]Extension
 | 
					 | 
				
			||||||
			}{
 | 
					 | 
				
			||||||
				extensionMap: exts,
 | 
					 | 
				
			||||||
			},
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		var u marshalInfo
 | 
					 | 
				
			||||||
		siz := u.sizeMessageSet(&ie)
 | 
					 | 
				
			||||||
		b := make([]byte, 0, siz)
 | 
					 | 
				
			||||||
		return u.appendMessageSet(b, &ie, deterministic)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	default:
 | 
					 | 
				
			||||||
		return nil, errors.New("proto: not an extension map")
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// UnmarshalMessageSet decodes the extension map encoded in buf in the message set wire format.
 | 
					 | 
				
			||||||
// It is called by Unmarshal methods on protocol buffer messages with the message_set_wire_format option.
 | 
					// It is called by Unmarshal methods on protocol buffer messages with the message_set_wire_format option.
 | 
				
			||||||
func UnmarshalMessageSet(buf []byte, exts interface{}) error {
 | 
					func unmarshalMessageSet(buf []byte, exts interface{}) error {
 | 
				
			||||||
	var m map[int32]Extension
 | 
						var m map[int32]Extension
 | 
				
			||||||
	switch exts := exts.(type) {
 | 
						switch exts := exts.(type) {
 | 
				
			||||||
	case *XXX_InternalExtensions:
 | 
						case *XXX_InternalExtensions:
 | 
				
			||||||
@@ -222,93 +179,3 @@ func UnmarshalMessageSet(buf []byte, exts interface{}) error {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
// MarshalMessageSetJSON encodes the extension map represented by m in JSON format.
 | 
					 | 
				
			||||||
// It is called by generated MarshalJSON methods on protocol buffer messages with the message_set_wire_format option.
 | 
					 | 
				
			||||||
func MarshalMessageSetJSON(exts interface{}) ([]byte, error) {
 | 
					 | 
				
			||||||
	var m map[int32]Extension
 | 
					 | 
				
			||||||
	switch exts := exts.(type) {
 | 
					 | 
				
			||||||
	case *XXX_InternalExtensions:
 | 
					 | 
				
			||||||
		var mu sync.Locker
 | 
					 | 
				
			||||||
		m, mu = exts.extensionsRead()
 | 
					 | 
				
			||||||
		if m != nil {
 | 
					 | 
				
			||||||
			// Keep the extensions map locked until we're done marshaling to prevent
 | 
					 | 
				
			||||||
			// races between marshaling and unmarshaling the lazily-{en,de}coded
 | 
					 | 
				
			||||||
			// values.
 | 
					 | 
				
			||||||
			mu.Lock()
 | 
					 | 
				
			||||||
			defer mu.Unlock()
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	case map[int32]Extension:
 | 
					 | 
				
			||||||
		m = exts
 | 
					 | 
				
			||||||
	default:
 | 
					 | 
				
			||||||
		return nil, errors.New("proto: not an extension map")
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	var b bytes.Buffer
 | 
					 | 
				
			||||||
	b.WriteByte('{')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Process the map in key order for deterministic output.
 | 
					 | 
				
			||||||
	ids := make([]int32, 0, len(m))
 | 
					 | 
				
			||||||
	for id := range m {
 | 
					 | 
				
			||||||
		ids = append(ids, id)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	sort.Sort(int32Slice(ids)) // int32Slice defined in text.go
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	for i, id := range ids {
 | 
					 | 
				
			||||||
		ext := m[id]
 | 
					 | 
				
			||||||
		msd, ok := messageSetMap[id]
 | 
					 | 
				
			||||||
		if !ok {
 | 
					 | 
				
			||||||
			// Unknown type; we can't render it, so skip it.
 | 
					 | 
				
			||||||
			continue
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if i > 0 && b.Len() > 1 {
 | 
					 | 
				
			||||||
			b.WriteByte(',')
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		fmt.Fprintf(&b, `"[%s]":`, msd.name)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		x := ext.value
 | 
					 | 
				
			||||||
		if x == nil {
 | 
					 | 
				
			||||||
			x = reflect.New(msd.t.Elem()).Interface()
 | 
					 | 
				
			||||||
			if err := Unmarshal(ext.enc, x.(Message)); err != nil {
 | 
					 | 
				
			||||||
				return nil, err
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		d, err := json.Marshal(x)
 | 
					 | 
				
			||||||
		if err != nil {
 | 
					 | 
				
			||||||
			return nil, err
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		b.Write(d)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	b.WriteByte('}')
 | 
					 | 
				
			||||||
	return b.Bytes(), nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// UnmarshalMessageSetJSON decodes the extension map encoded in buf in JSON format.
 | 
					 | 
				
			||||||
// It is called by generated UnmarshalJSON methods on protocol buffer messages with the message_set_wire_format option.
 | 
					 | 
				
			||||||
func UnmarshalMessageSetJSON(buf []byte, exts interface{}) error {
 | 
					 | 
				
			||||||
	// Common-case fast path.
 | 
					 | 
				
			||||||
	if len(buf) == 0 || bytes.Equal(buf, []byte("{}")) {
 | 
					 | 
				
			||||||
		return nil
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// This is fairly tricky, and it's not clear that it is needed.
 | 
					 | 
				
			||||||
	return errors.New("TODO: UnmarshalMessageSetJSON not yet implemented")
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// A global registry of types that can be used in a MessageSet.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
var messageSetMap = make(map[int32]messageSetDesc)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
type messageSetDesc struct {
 | 
					 | 
				
			||||||
	t    reflect.Type // pointer to struct
 | 
					 | 
				
			||||||
	name string
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// RegisterMessageSetType is called from the generated code.
 | 
					 | 
				
			||||||
func RegisterMessageSetType(m Message, fieldNum int32, name string) {
 | 
					 | 
				
			||||||
	messageSetMap[fieldNum] = messageSetDesc{
 | 
					 | 
				
			||||||
		t:    reflect.TypeOf(m),
 | 
					 | 
				
			||||||
		name: name,
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										5
									
								
								vendor/github.com/golang/protobuf/proto/pointer_reflect.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								vendor/github.com/golang/protobuf/proto/pointer_reflect.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -79,10 +79,13 @@ func toPointer(i *Message) pointer {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// toAddrPointer converts an interface to a pointer that points to
 | 
					// toAddrPointer converts an interface to a pointer that points to
 | 
				
			||||||
// the interface data.
 | 
					// the interface data.
 | 
				
			||||||
func toAddrPointer(i *interface{}, isptr bool) pointer {
 | 
					func toAddrPointer(i *interface{}, isptr, deref bool) pointer {
 | 
				
			||||||
	v := reflect.ValueOf(*i)
 | 
						v := reflect.ValueOf(*i)
 | 
				
			||||||
	u := reflect.New(v.Type())
 | 
						u := reflect.New(v.Type())
 | 
				
			||||||
	u.Elem().Set(v)
 | 
						u.Elem().Set(v)
 | 
				
			||||||
 | 
						if deref {
 | 
				
			||||||
 | 
							u = u.Elem()
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	return pointer{v: u}
 | 
						return pointer{v: u}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										15
									
								
								vendor/github.com/golang/protobuf/proto/pointer_unsafe.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										15
									
								
								vendor/github.com/golang/protobuf/proto/pointer_unsafe.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -85,16 +85,21 @@ func toPointer(i *Message) pointer {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// toAddrPointer converts an interface to a pointer that points to
 | 
					// toAddrPointer converts an interface to a pointer that points to
 | 
				
			||||||
// the interface data.
 | 
					// the interface data.
 | 
				
			||||||
func toAddrPointer(i *interface{}, isptr bool) pointer {
 | 
					func toAddrPointer(i *interface{}, isptr, deref bool) (p pointer) {
 | 
				
			||||||
	// Super-tricky - read or get the address of data word of interface value.
 | 
						// Super-tricky - read or get the address of data word of interface value.
 | 
				
			||||||
	if isptr {
 | 
						if isptr {
 | 
				
			||||||
		// The interface is of pointer type, thus it is a direct interface.
 | 
							// The interface is of pointer type, thus it is a direct interface.
 | 
				
			||||||
		// The data word is the pointer data itself. We take its address.
 | 
							// The data word is the pointer data itself. We take its address.
 | 
				
			||||||
		return pointer{p: unsafe.Pointer(uintptr(unsafe.Pointer(i)) + ptrSize)}
 | 
							p = pointer{p: unsafe.Pointer(uintptr(unsafe.Pointer(i)) + ptrSize)}
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							// The interface is not of pointer type. The data word is the pointer
 | 
				
			||||||
 | 
							// to the data.
 | 
				
			||||||
 | 
							p = pointer{p: (*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	// The interface is not of pointer type. The data word is the pointer
 | 
						if deref {
 | 
				
			||||||
	// to the data.
 | 
							p.p = *(*unsafe.Pointer)(p.p)
 | 
				
			||||||
	return pointer{p: (*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]}
 | 
						}
 | 
				
			||||||
 | 
						return p
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// valToPointer converts v to a pointer. v must be of pointer type.
 | 
					// valToPointer converts v to a pointer. v must be of pointer type.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										36
									
								
								vendor/github.com/golang/protobuf/proto/properties.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										36
									
								
								vendor/github.com/golang/protobuf/proto/properties.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -38,7 +38,6 @@ package proto
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"log"
 | 
						"log"
 | 
				
			||||||
	"os"
 | 
					 | 
				
			||||||
	"reflect"
 | 
						"reflect"
 | 
				
			||||||
	"sort"
 | 
						"sort"
 | 
				
			||||||
	"strconv"
 | 
						"strconv"
 | 
				
			||||||
@@ -194,7 +193,7 @@ func (p *Properties) Parse(s string) {
 | 
				
			|||||||
	// "bytes,49,opt,name=foo,def=hello!"
 | 
						// "bytes,49,opt,name=foo,def=hello!"
 | 
				
			||||||
	fields := strings.Split(s, ",") // breaks def=, but handled below.
 | 
						fields := strings.Split(s, ",") // breaks def=, but handled below.
 | 
				
			||||||
	if len(fields) < 2 {
 | 
						if len(fields) < 2 {
 | 
				
			||||||
		fmt.Fprintf(os.Stderr, "proto: tag has too few fields: %q\n", s)
 | 
							log.Printf("proto: tag has too few fields: %q", s)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -214,7 +213,7 @@ func (p *Properties) Parse(s string) {
 | 
				
			|||||||
		p.WireType = WireBytes
 | 
							p.WireType = WireBytes
 | 
				
			||||||
		// no numeric converter for non-numeric types
 | 
							// no numeric converter for non-numeric types
 | 
				
			||||||
	default:
 | 
						default:
 | 
				
			||||||
		fmt.Fprintf(os.Stderr, "proto: tag has unknown wire type: %q\n", s)
 | 
							log.Printf("proto: tag has unknown wire type: %q", s)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -334,9 +333,6 @@ func GetProperties(t reflect.Type) *StructProperties {
 | 
				
			|||||||
	sprop, ok := propertiesMap[t]
 | 
						sprop, ok := propertiesMap[t]
 | 
				
			||||||
	propertiesMu.RUnlock()
 | 
						propertiesMu.RUnlock()
 | 
				
			||||||
	if ok {
 | 
						if ok {
 | 
				
			||||||
		if collectStats {
 | 
					 | 
				
			||||||
			stats.Chit++
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		return sprop
 | 
							return sprop
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -346,17 +342,20 @@ func GetProperties(t reflect.Type) *StructProperties {
 | 
				
			|||||||
	return sprop
 | 
						return sprop
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type (
 | 
				
			||||||
 | 
						oneofFuncsIface interface {
 | 
				
			||||||
 | 
							XXX_OneofFuncs() (func(Message, *Buffer) error, func(Message, int, int, *Buffer) (bool, error), func(Message) int, []interface{})
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						oneofWrappersIface interface {
 | 
				
			||||||
 | 
							XXX_OneofWrappers() []interface{}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// getPropertiesLocked requires that propertiesMu is held.
 | 
					// getPropertiesLocked requires that propertiesMu is held.
 | 
				
			||||||
func getPropertiesLocked(t reflect.Type) *StructProperties {
 | 
					func getPropertiesLocked(t reflect.Type) *StructProperties {
 | 
				
			||||||
	if prop, ok := propertiesMap[t]; ok {
 | 
						if prop, ok := propertiesMap[t]; ok {
 | 
				
			||||||
		if collectStats {
 | 
					 | 
				
			||||||
			stats.Chit++
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		return prop
 | 
							return prop
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if collectStats {
 | 
					 | 
				
			||||||
		stats.Cmiss++
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	prop := new(StructProperties)
 | 
						prop := new(StructProperties)
 | 
				
			||||||
	// in case of recursive protos, fill this in now.
 | 
						// in case of recursive protos, fill this in now.
 | 
				
			||||||
@@ -391,13 +390,14 @@ func getPropertiesLocked(t reflect.Type) *StructProperties {
 | 
				
			|||||||
	// Re-order prop.order.
 | 
						// Re-order prop.order.
 | 
				
			||||||
	sort.Sort(prop)
 | 
						sort.Sort(prop)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	type oneofMessage interface {
 | 
						var oots []interface{}
 | 
				
			||||||
		XXX_OneofFuncs() (func(Message, *Buffer) error, func(Message, int, int, *Buffer) (bool, error), func(Message) int, []interface{})
 | 
						switch m := reflect.Zero(reflect.PtrTo(t)).Interface().(type) {
 | 
				
			||||||
 | 
						case oneofFuncsIface:
 | 
				
			||||||
 | 
							_, _, _, oots = m.XXX_OneofFuncs()
 | 
				
			||||||
 | 
						case oneofWrappersIface:
 | 
				
			||||||
 | 
							oots = m.XXX_OneofWrappers()
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if om, ok := reflect.Zero(reflect.PtrTo(t)).Interface().(oneofMessage); ok {
 | 
						if len(oots) > 0 {
 | 
				
			||||||
		var oots []interface{}
 | 
					 | 
				
			||||||
		_, _, _, oots = om.XXX_OneofFuncs()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		// Interpret oneof metadata.
 | 
							// Interpret oneof metadata.
 | 
				
			||||||
		prop.OneofTypes = make(map[string]*OneofProperties)
 | 
							prop.OneofTypes = make(map[string]*OneofProperties)
 | 
				
			||||||
		for _, oot := range oots {
 | 
							for _, oot := range oots {
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										45
									
								
								vendor/github.com/golang/protobuf/proto/table_marshal.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										45
									
								
								vendor/github.com/golang/protobuf/proto/table_marshal.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -87,6 +87,7 @@ type marshalElemInfo struct {
 | 
				
			|||||||
	sizer     sizer
 | 
						sizer     sizer
 | 
				
			||||||
	marshaler marshaler
 | 
						marshaler marshaler
 | 
				
			||||||
	isptr     bool // elem is pointer typed, thus interface of this type is a direct interface (extension only)
 | 
						isptr     bool // elem is pointer typed, thus interface of this type is a direct interface (extension only)
 | 
				
			||||||
 | 
						deref     bool // dereference the pointer before operating on it; implies isptr
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var (
 | 
					var (
 | 
				
			||||||
@@ -320,8 +321,11 @@ func (u *marshalInfo) computeMarshalInfo() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// get oneof implementers
 | 
						// get oneof implementers
 | 
				
			||||||
	var oneofImplementers []interface{}
 | 
						var oneofImplementers []interface{}
 | 
				
			||||||
	if m, ok := reflect.Zero(reflect.PtrTo(t)).Interface().(oneofMessage); ok {
 | 
						switch m := reflect.Zero(reflect.PtrTo(t)).Interface().(type) {
 | 
				
			||||||
 | 
						case oneofFuncsIface:
 | 
				
			||||||
		_, _, _, oneofImplementers = m.XXX_OneofFuncs()
 | 
							_, _, _, oneofImplementers = m.XXX_OneofFuncs()
 | 
				
			||||||
 | 
						case oneofWrappersIface:
 | 
				
			||||||
 | 
							oneofImplementers = m.XXX_OneofWrappers()
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	n := t.NumField()
 | 
						n := t.NumField()
 | 
				
			||||||
@@ -407,13 +411,22 @@ func (u *marshalInfo) getExtElemInfo(desc *ExtensionDesc) *marshalElemInfo {
 | 
				
			|||||||
		panic("tag is not an integer")
 | 
							panic("tag is not an integer")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	wt := wiretype(tags[0])
 | 
						wt := wiretype(tags[0])
 | 
				
			||||||
 | 
						if t.Kind() == reflect.Ptr && t.Elem().Kind() != reflect.Struct {
 | 
				
			||||||
 | 
							t = t.Elem()
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	sizer, marshaler := typeMarshaler(t, tags, false, false)
 | 
						sizer, marshaler := typeMarshaler(t, tags, false, false)
 | 
				
			||||||
 | 
						var deref bool
 | 
				
			||||||
 | 
						if t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 {
 | 
				
			||||||
 | 
							t = reflect.PtrTo(t)
 | 
				
			||||||
 | 
							deref = true
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	e = &marshalElemInfo{
 | 
						e = &marshalElemInfo{
 | 
				
			||||||
		wiretag:   uint64(tag)<<3 | wt,
 | 
							wiretag:   uint64(tag)<<3 | wt,
 | 
				
			||||||
		tagsize:   SizeVarint(uint64(tag) << 3),
 | 
							tagsize:   SizeVarint(uint64(tag) << 3),
 | 
				
			||||||
		sizer:     sizer,
 | 
							sizer:     sizer,
 | 
				
			||||||
		marshaler: marshaler,
 | 
							marshaler: marshaler,
 | 
				
			||||||
		isptr:     t.Kind() == reflect.Ptr,
 | 
							isptr:     t.Kind() == reflect.Ptr,
 | 
				
			||||||
 | 
							deref:     deref,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// update cache
 | 
						// update cache
 | 
				
			||||||
@@ -448,7 +461,7 @@ func (fi *marshalFieldInfo) computeMarshalFieldInfo(f *reflect.StructField) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func (fi *marshalFieldInfo) computeOneofFieldInfo(f *reflect.StructField, oneofImplementers []interface{}) {
 | 
					func (fi *marshalFieldInfo) computeOneofFieldInfo(f *reflect.StructField, oneofImplementers []interface{}) {
 | 
				
			||||||
	fi.field = toField(f)
 | 
						fi.field = toField(f)
 | 
				
			||||||
	fi.wiretag = 1<<31 - 1 // Use a large tag number, make oneofs sorted at the end. This tag will not appear on the wire.
 | 
						fi.wiretag = math.MaxInt32 // Use a large tag number, make oneofs sorted at the end. This tag will not appear on the wire.
 | 
				
			||||||
	fi.isPointer = true
 | 
						fi.isPointer = true
 | 
				
			||||||
	fi.sizer, fi.marshaler = makeOneOfMarshaler(fi, f)
 | 
						fi.sizer, fi.marshaler = makeOneOfMarshaler(fi, f)
 | 
				
			||||||
	fi.oneofElems = make(map[reflect.Type]*marshalElemInfo)
 | 
						fi.oneofElems = make(map[reflect.Type]*marshalElemInfo)
 | 
				
			||||||
@@ -476,10 +489,6 @@ func (fi *marshalFieldInfo) computeOneofFieldInfo(f *reflect.StructField, oneofI
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type oneofMessage interface {
 | 
					 | 
				
			||||||
	XXX_OneofFuncs() (func(Message, *Buffer) error, func(Message, int, int, *Buffer) (bool, error), func(Message) int, []interface{})
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// wiretype returns the wire encoding of the type.
 | 
					// wiretype returns the wire encoding of the type.
 | 
				
			||||||
func wiretype(encoding string) uint64 {
 | 
					func wiretype(encoding string) uint64 {
 | 
				
			||||||
	switch encoding {
 | 
						switch encoding {
 | 
				
			||||||
@@ -2310,8 +2319,8 @@ func makeMapMarshaler(f *reflect.StructField) (sizer, marshaler) {
 | 
				
			|||||||
			for _, k := range m.MapKeys() {
 | 
								for _, k := range m.MapKeys() {
 | 
				
			||||||
				ki := k.Interface()
 | 
									ki := k.Interface()
 | 
				
			||||||
				vi := m.MapIndex(k).Interface()
 | 
									vi := m.MapIndex(k).Interface()
 | 
				
			||||||
				kaddr := toAddrPointer(&ki, false)             // pointer to key
 | 
									kaddr := toAddrPointer(&ki, false, false)      // pointer to key
 | 
				
			||||||
				vaddr := toAddrPointer(&vi, valIsPtr)          // pointer to value
 | 
									vaddr := toAddrPointer(&vi, valIsPtr, false)   // pointer to value
 | 
				
			||||||
				siz := keySizer(kaddr, 1) + valSizer(vaddr, 1) // tag of key = 1 (size=1), tag of val = 2 (size=1)
 | 
									siz := keySizer(kaddr, 1) + valSizer(vaddr, 1) // tag of key = 1 (size=1), tag of val = 2 (size=1)
 | 
				
			||||||
				n += siz + SizeVarint(uint64(siz)) + tagsize
 | 
									n += siz + SizeVarint(uint64(siz)) + tagsize
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -2329,8 +2338,8 @@ func makeMapMarshaler(f *reflect.StructField) (sizer, marshaler) {
 | 
				
			|||||||
			for _, k := range keys {
 | 
								for _, k := range keys {
 | 
				
			||||||
				ki := k.Interface()
 | 
									ki := k.Interface()
 | 
				
			||||||
				vi := m.MapIndex(k).Interface()
 | 
									vi := m.MapIndex(k).Interface()
 | 
				
			||||||
				kaddr := toAddrPointer(&ki, false)    // pointer to key
 | 
									kaddr := toAddrPointer(&ki, false, false)    // pointer to key
 | 
				
			||||||
				vaddr := toAddrPointer(&vi, valIsPtr) // pointer to value
 | 
									vaddr := toAddrPointer(&vi, valIsPtr, false) // pointer to value
 | 
				
			||||||
				b = appendVarint(b, tag)
 | 
									b = appendVarint(b, tag)
 | 
				
			||||||
				siz := keySizer(kaddr, 1) + valCachedSizer(vaddr, 1) // tag of key = 1 (size=1), tag of val = 2 (size=1)
 | 
									siz := keySizer(kaddr, 1) + valCachedSizer(vaddr, 1) // tag of key = 1 (size=1), tag of val = 2 (size=1)
 | 
				
			||||||
				b = appendVarint(b, uint64(siz))
 | 
									b = appendVarint(b, uint64(siz))
 | 
				
			||||||
@@ -2399,7 +2408,7 @@ func (u *marshalInfo) sizeExtensions(ext *XXX_InternalExtensions) int {
 | 
				
			|||||||
		// the last time this function was called.
 | 
							// the last time this function was called.
 | 
				
			||||||
		ei := u.getExtElemInfo(e.desc)
 | 
							ei := u.getExtElemInfo(e.desc)
 | 
				
			||||||
		v := e.value
 | 
							v := e.value
 | 
				
			||||||
		p := toAddrPointer(&v, ei.isptr)
 | 
							p := toAddrPointer(&v, ei.isptr, ei.deref)
 | 
				
			||||||
		n += ei.sizer(p, ei.tagsize)
 | 
							n += ei.sizer(p, ei.tagsize)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	mu.Unlock()
 | 
						mu.Unlock()
 | 
				
			||||||
@@ -2434,7 +2443,7 @@ func (u *marshalInfo) appendExtensions(b []byte, ext *XXX_InternalExtensions, de
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			ei := u.getExtElemInfo(e.desc)
 | 
								ei := u.getExtElemInfo(e.desc)
 | 
				
			||||||
			v := e.value
 | 
								v := e.value
 | 
				
			||||||
			p := toAddrPointer(&v, ei.isptr)
 | 
								p := toAddrPointer(&v, ei.isptr, ei.deref)
 | 
				
			||||||
			b, err = ei.marshaler(b, p, ei.wiretag, deterministic)
 | 
								b, err = ei.marshaler(b, p, ei.wiretag, deterministic)
 | 
				
			||||||
			if !nerr.Merge(err) {
 | 
								if !nerr.Merge(err) {
 | 
				
			||||||
				return b, err
 | 
									return b, err
 | 
				
			||||||
@@ -2465,7 +2474,7 @@ func (u *marshalInfo) appendExtensions(b []byte, ext *XXX_InternalExtensions, de
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		ei := u.getExtElemInfo(e.desc)
 | 
							ei := u.getExtElemInfo(e.desc)
 | 
				
			||||||
		v := e.value
 | 
							v := e.value
 | 
				
			||||||
		p := toAddrPointer(&v, ei.isptr)
 | 
							p := toAddrPointer(&v, ei.isptr, ei.deref)
 | 
				
			||||||
		b, err = ei.marshaler(b, p, ei.wiretag, deterministic)
 | 
							b, err = ei.marshaler(b, p, ei.wiretag, deterministic)
 | 
				
			||||||
		if !nerr.Merge(err) {
 | 
							if !nerr.Merge(err) {
 | 
				
			||||||
			return b, err
 | 
								return b, err
 | 
				
			||||||
@@ -2510,7 +2519,7 @@ func (u *marshalInfo) sizeMessageSet(ext *XXX_InternalExtensions) int {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		ei := u.getExtElemInfo(e.desc)
 | 
							ei := u.getExtElemInfo(e.desc)
 | 
				
			||||||
		v := e.value
 | 
							v := e.value
 | 
				
			||||||
		p := toAddrPointer(&v, ei.isptr)
 | 
							p := toAddrPointer(&v, ei.isptr, ei.deref)
 | 
				
			||||||
		n += ei.sizer(p, 1) // message, tag = 3 (size=1)
 | 
							n += ei.sizer(p, 1) // message, tag = 3 (size=1)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	mu.Unlock()
 | 
						mu.Unlock()
 | 
				
			||||||
@@ -2553,7 +2562,7 @@ func (u *marshalInfo) appendMessageSet(b []byte, ext *XXX_InternalExtensions, de
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			ei := u.getExtElemInfo(e.desc)
 | 
								ei := u.getExtElemInfo(e.desc)
 | 
				
			||||||
			v := e.value
 | 
								v := e.value
 | 
				
			||||||
			p := toAddrPointer(&v, ei.isptr)
 | 
								p := toAddrPointer(&v, ei.isptr, ei.deref)
 | 
				
			||||||
			b, err = ei.marshaler(b, p, 3<<3|WireBytes, deterministic)
 | 
								b, err = ei.marshaler(b, p, 3<<3|WireBytes, deterministic)
 | 
				
			||||||
			if !nerr.Merge(err) {
 | 
								if !nerr.Merge(err) {
 | 
				
			||||||
				return b, err
 | 
									return b, err
 | 
				
			||||||
@@ -2591,7 +2600,7 @@ func (u *marshalInfo) appendMessageSet(b []byte, ext *XXX_InternalExtensions, de
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		ei := u.getExtElemInfo(e.desc)
 | 
							ei := u.getExtElemInfo(e.desc)
 | 
				
			||||||
		v := e.value
 | 
							v := e.value
 | 
				
			||||||
		p := toAddrPointer(&v, ei.isptr)
 | 
							p := toAddrPointer(&v, ei.isptr, ei.deref)
 | 
				
			||||||
		b, err = ei.marshaler(b, p, 3<<3|WireBytes, deterministic)
 | 
							b, err = ei.marshaler(b, p, 3<<3|WireBytes, deterministic)
 | 
				
			||||||
		b = append(b, 1<<3|WireEndGroup)
 | 
							b = append(b, 1<<3|WireEndGroup)
 | 
				
			||||||
		if !nerr.Merge(err) {
 | 
							if !nerr.Merge(err) {
 | 
				
			||||||
@@ -2621,7 +2630,7 @@ func (u *marshalInfo) sizeV1Extensions(m map[int32]Extension) int {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		ei := u.getExtElemInfo(e.desc)
 | 
							ei := u.getExtElemInfo(e.desc)
 | 
				
			||||||
		v := e.value
 | 
							v := e.value
 | 
				
			||||||
		p := toAddrPointer(&v, ei.isptr)
 | 
							p := toAddrPointer(&v, ei.isptr, ei.deref)
 | 
				
			||||||
		n += ei.sizer(p, ei.tagsize)
 | 
							n += ei.sizer(p, ei.tagsize)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return n
 | 
						return n
 | 
				
			||||||
@@ -2656,7 +2665,7 @@ func (u *marshalInfo) appendV1Extensions(b []byte, m map[int32]Extension, determ
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		ei := u.getExtElemInfo(e.desc)
 | 
							ei := u.getExtElemInfo(e.desc)
 | 
				
			||||||
		v := e.value
 | 
							v := e.value
 | 
				
			||||||
		p := toAddrPointer(&v, ei.isptr)
 | 
							p := toAddrPointer(&v, ei.isptr, ei.deref)
 | 
				
			||||||
		b, err = ei.marshaler(b, p, ei.wiretag, deterministic)
 | 
							b, err = ei.marshaler(b, p, ei.wiretag, deterministic)
 | 
				
			||||||
		if !nerr.Merge(err) {
 | 
							if !nerr.Merge(err) {
 | 
				
			||||||
			return b, err
 | 
								return b, err
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										74
									
								
								vendor/github.com/golang/protobuf/proto/table_unmarshal.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										74
									
								
								vendor/github.com/golang/protobuf/proto/table_unmarshal.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -136,7 +136,7 @@ func (u *unmarshalInfo) unmarshal(m pointer, b []byte) error {
 | 
				
			|||||||
		u.computeUnmarshalInfo()
 | 
							u.computeUnmarshalInfo()
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if u.isMessageSet {
 | 
						if u.isMessageSet {
 | 
				
			||||||
		return UnmarshalMessageSet(b, m.offset(u.extensions).toExtensions())
 | 
							return unmarshalMessageSet(b, m.offset(u.extensions).toExtensions())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	var reqMask uint64 // bitmask of required fields we've seen.
 | 
						var reqMask uint64 // bitmask of required fields we've seen.
 | 
				
			||||||
	var errLater error
 | 
						var errLater error
 | 
				
			||||||
@@ -362,46 +362,48 @@ func (u *unmarshalInfo) computeUnmarshalInfo() {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Find any types associated with oneof fields.
 | 
						// Find any types associated with oneof fields.
 | 
				
			||||||
	// TODO: XXX_OneofFuncs returns more info than we need.  Get rid of some of it?
 | 
						var oneofImplementers []interface{}
 | 
				
			||||||
	fn := reflect.Zero(reflect.PtrTo(t)).MethodByName("XXX_OneofFuncs")
 | 
						switch m := reflect.Zero(reflect.PtrTo(t)).Interface().(type) {
 | 
				
			||||||
	if fn.IsValid() {
 | 
						case oneofFuncsIface:
 | 
				
			||||||
		res := fn.Call(nil)[3] // last return value from XXX_OneofFuncs: []interface{}
 | 
							_, _, _, oneofImplementers = m.XXX_OneofFuncs()
 | 
				
			||||||
		for i := res.Len() - 1; i >= 0; i-- {
 | 
						case oneofWrappersIface:
 | 
				
			||||||
			v := res.Index(i)                             // interface{}
 | 
							oneofImplementers = m.XXX_OneofWrappers()
 | 
				
			||||||
			tptr := reflect.ValueOf(v.Interface()).Type() // *Msg_X
 | 
						}
 | 
				
			||||||
			typ := tptr.Elem()                            // Msg_X
 | 
						for _, v := range oneofImplementers {
 | 
				
			||||||
 | 
							tptr := reflect.TypeOf(v) // *Msg_X
 | 
				
			||||||
 | 
							typ := tptr.Elem()        // Msg_X
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			f := typ.Field(0) // oneof implementers have one field
 | 
							f := typ.Field(0) // oneof implementers have one field
 | 
				
			||||||
			baseUnmarshal := fieldUnmarshaler(&f)
 | 
							baseUnmarshal := fieldUnmarshaler(&f)
 | 
				
			||||||
			tags := strings.Split(f.Tag.Get("protobuf"), ",")
 | 
							tags := strings.Split(f.Tag.Get("protobuf"), ",")
 | 
				
			||||||
			fieldNum, err := strconv.Atoi(tags[1])
 | 
							fieldNum, err := strconv.Atoi(tags[1])
 | 
				
			||||||
			if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
				panic("protobuf tag field not an integer: " + tags[1])
 | 
								panic("protobuf tag field not an integer: " + tags[1])
 | 
				
			||||||
			}
 | 
							}
 | 
				
			||||||
			var name string
 | 
							var name string
 | 
				
			||||||
			for _, tag := range tags {
 | 
							for _, tag := range tags {
 | 
				
			||||||
				if strings.HasPrefix(tag, "name=") {
 | 
								if strings.HasPrefix(tag, "name=") {
 | 
				
			||||||
					name = strings.TrimPrefix(tag, "name=")
 | 
									name = strings.TrimPrefix(tag, "name=")
 | 
				
			||||||
					break
 | 
									break
 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			// Find the oneof field that this struct implements.
 | 
					 | 
				
			||||||
			// Might take O(n^2) to process all of the oneofs, but who cares.
 | 
					 | 
				
			||||||
			for _, of := range oneofFields {
 | 
					 | 
				
			||||||
				if tptr.Implements(of.ityp) {
 | 
					 | 
				
			||||||
					// We have found the corresponding interface for this struct.
 | 
					 | 
				
			||||||
					// That lets us know where this struct should be stored
 | 
					 | 
				
			||||||
					// when we encounter it during unmarshaling.
 | 
					 | 
				
			||||||
					unmarshal := makeUnmarshalOneof(typ, of.ityp, baseUnmarshal)
 | 
					 | 
				
			||||||
					u.setTag(fieldNum, of.field, unmarshal, 0, name)
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Find the oneof field that this struct implements.
 | 
				
			||||||
 | 
							// Might take O(n^2) to process all of the oneofs, but who cares.
 | 
				
			||||||
 | 
							for _, of := range oneofFields {
 | 
				
			||||||
 | 
								if tptr.Implements(of.ityp) {
 | 
				
			||||||
 | 
									// We have found the corresponding interface for this struct.
 | 
				
			||||||
 | 
									// That lets us know where this struct should be stored
 | 
				
			||||||
 | 
									// when we encounter it during unmarshaling.
 | 
				
			||||||
 | 
									unmarshal := makeUnmarshalOneof(typ, of.ityp, baseUnmarshal)
 | 
				
			||||||
 | 
									u.setTag(fieldNum, of.field, unmarshal, 0, name)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Get extension ranges, if any.
 | 
						// Get extension ranges, if any.
 | 
				
			||||||
	fn = reflect.Zero(reflect.PtrTo(t)).MethodByName("ExtensionRangeArray")
 | 
						fn := reflect.Zero(reflect.PtrTo(t)).MethodByName("ExtensionRangeArray")
 | 
				
			||||||
	if fn.IsValid() {
 | 
						if fn.IsValid() {
 | 
				
			||||||
		if !u.extensions.IsValid() && !u.oldExtensions.IsValid() {
 | 
							if !u.extensions.IsValid() && !u.oldExtensions.IsValid() {
 | 
				
			||||||
			panic("a message with extensions, but no extensions field in " + t.Name())
 | 
								panic("a message with extensions, but no extensions field in " + t.Name())
 | 
				
			||||||
@@ -1948,7 +1950,7 @@ func encodeVarint(b []byte, x uint64) []byte {
 | 
				
			|||||||
// If there is an error, it returns 0,0.
 | 
					// If there is an error, it returns 0,0.
 | 
				
			||||||
func decodeVarint(b []byte) (uint64, int) {
 | 
					func decodeVarint(b []byte) (uint64, int) {
 | 
				
			||||||
	var x, y uint64
 | 
						var x, y uint64
 | 
				
			||||||
	if len(b) <= 0 {
 | 
						if len(b) == 0 {
 | 
				
			||||||
		goto bad
 | 
							goto bad
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	x = uint64(b[0])
 | 
						x = uint64(b[0])
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										45
									
								
								vendor/github.com/golang/protobuf/ptypes/any/any.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										45
									
								
								vendor/github.com/golang/protobuf/ptypes/any/any.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,11 +1,13 @@
 | 
				
			|||||||
// Code generated by protoc-gen-go. DO NOT EDIT.
 | 
					// Code generated by protoc-gen-go. DO NOT EDIT.
 | 
				
			||||||
// source: google/protobuf/any.proto
 | 
					// source: google/protobuf/any.proto
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package any // import "github.com/golang/protobuf/ptypes/any"
 | 
					package any
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import proto "github.com/golang/protobuf/proto"
 | 
					import (
 | 
				
			||||||
import fmt "fmt"
 | 
						fmt "fmt"
 | 
				
			||||||
import math "math"
 | 
						proto "github.com/golang/protobuf/proto"
 | 
				
			||||||
 | 
						math "math"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Reference imports to suppress errors if they are not otherwise used.
 | 
					// Reference imports to suppress errors if they are not otherwise used.
 | 
				
			||||||
var _ = proto.Marshal
 | 
					var _ = proto.Marshal
 | 
				
			||||||
@@ -16,7 +18,7 @@ var _ = math.Inf
 | 
				
			|||||||
// is compatible with the proto package it is being compiled against.
 | 
					// is compatible with the proto package it is being compiled against.
 | 
				
			||||||
// A compilation error at this line likely means your copy of the
 | 
					// A compilation error at this line likely means your copy of the
 | 
				
			||||||
// proto package needs to be updated.
 | 
					// proto package needs to be updated.
 | 
				
			||||||
const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
 | 
					const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// `Any` contains an arbitrary serialized protocol buffer message along with a
 | 
					// `Any` contains an arbitrary serialized protocol buffer message along with a
 | 
				
			||||||
// URL that describes the type of the serialized message.
 | 
					// URL that describes the type of the serialized message.
 | 
				
			||||||
@@ -99,17 +101,18 @@ const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
 | 
				
			|||||||
//     }
 | 
					//     }
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
type Any struct {
 | 
					type Any struct {
 | 
				
			||||||
	// A URL/resource name whose content describes the type of the
 | 
						// A URL/resource name that uniquely identifies the type of the serialized
 | 
				
			||||||
	// serialized protocol buffer message.
 | 
						// protocol buffer message. The last segment of the URL's path must represent
 | 
				
			||||||
 | 
						// the fully qualified name of the type (as in
 | 
				
			||||||
 | 
						// `path/google.protobuf.Duration`). The name should be in a canonical form
 | 
				
			||||||
 | 
						// (e.g., leading "." is not accepted).
 | 
				
			||||||
	//
 | 
						//
 | 
				
			||||||
	// For URLs which use the scheme `http`, `https`, or no scheme, the
 | 
						// In practice, teams usually precompile into the binary all types that they
 | 
				
			||||||
	// following restrictions and interpretations apply:
 | 
						// expect it to use in the context of Any. However, for URLs which use the
 | 
				
			||||||
 | 
						// scheme `http`, `https`, or no scheme, one can optionally set up a type
 | 
				
			||||||
 | 
						// server that maps type URLs to message definitions as follows:
 | 
				
			||||||
	//
 | 
						//
 | 
				
			||||||
	// * If no scheme is provided, `https` is assumed.
 | 
						// * If no scheme is provided, `https` is assumed.
 | 
				
			||||||
	// * The last segment of the URL's path must represent the fully
 | 
					 | 
				
			||||||
	//   qualified name of the type (as in `path/google.protobuf.Duration`).
 | 
					 | 
				
			||||||
	//   The name should be in a canonical form (e.g., leading "." is
 | 
					 | 
				
			||||||
	//   not accepted).
 | 
					 | 
				
			||||||
	// * An HTTP GET on the URL must yield a [google.protobuf.Type][]
 | 
						// * An HTTP GET on the URL must yield a [google.protobuf.Type][]
 | 
				
			||||||
	//   value in binary format, or produce an error.
 | 
						//   value in binary format, or produce an error.
 | 
				
			||||||
	// * Applications are allowed to cache lookup results based on the
 | 
						// * Applications are allowed to cache lookup results based on the
 | 
				
			||||||
@@ -118,6 +121,10 @@ type Any struct {
 | 
				
			|||||||
	//   on changes to types. (Use versioned type names to manage
 | 
						//   on changes to types. (Use versioned type names to manage
 | 
				
			||||||
	//   breaking changes.)
 | 
						//   breaking changes.)
 | 
				
			||||||
	//
 | 
						//
 | 
				
			||||||
 | 
						// Note: this functionality is not currently available in the official
 | 
				
			||||||
 | 
						// protobuf release, and it is not used for type URLs beginning with
 | 
				
			||||||
 | 
						// type.googleapis.com.
 | 
				
			||||||
 | 
						//
 | 
				
			||||||
	// Schemes other than `http`, `https` (or the empty scheme) might be
 | 
						// Schemes other than `http`, `https` (or the empty scheme) might be
 | 
				
			||||||
	// used with implementation specific semantics.
 | 
						// used with implementation specific semantics.
 | 
				
			||||||
	//
 | 
						//
 | 
				
			||||||
@@ -133,17 +140,19 @@ func (m *Any) Reset()         { *m = Any{} }
 | 
				
			|||||||
func (m *Any) String() string { return proto.CompactTextString(m) }
 | 
					func (m *Any) String() string { return proto.CompactTextString(m) }
 | 
				
			||||||
func (*Any) ProtoMessage()    {}
 | 
					func (*Any) ProtoMessage()    {}
 | 
				
			||||||
func (*Any) Descriptor() ([]byte, []int) {
 | 
					func (*Any) Descriptor() ([]byte, []int) {
 | 
				
			||||||
	return fileDescriptor_any_744b9ca530f228db, []int{0}
 | 
						return fileDescriptor_b53526c13ae22eb4, []int{0}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (*Any) XXX_WellKnownType() string { return "Any" }
 | 
					func (*Any) XXX_WellKnownType() string { return "Any" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (m *Any) XXX_Unmarshal(b []byte) error {
 | 
					func (m *Any) XXX_Unmarshal(b []byte) error {
 | 
				
			||||||
	return xxx_messageInfo_Any.Unmarshal(m, b)
 | 
						return xxx_messageInfo_Any.Unmarshal(m, b)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
func (m *Any) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 | 
					func (m *Any) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 | 
				
			||||||
	return xxx_messageInfo_Any.Marshal(b, m, deterministic)
 | 
						return xxx_messageInfo_Any.Marshal(b, m, deterministic)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
func (dst *Any) XXX_Merge(src proto.Message) {
 | 
					func (m *Any) XXX_Merge(src proto.Message) {
 | 
				
			||||||
	xxx_messageInfo_Any.Merge(dst, src)
 | 
						xxx_messageInfo_Any.Merge(m, src)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
func (m *Any) XXX_Size() int {
 | 
					func (m *Any) XXX_Size() int {
 | 
				
			||||||
	return xxx_messageInfo_Any.Size(m)
 | 
						return xxx_messageInfo_Any.Size(m)
 | 
				
			||||||
@@ -172,9 +181,9 @@ func init() {
 | 
				
			|||||||
	proto.RegisterType((*Any)(nil), "google.protobuf.Any")
 | 
						proto.RegisterType((*Any)(nil), "google.protobuf.Any")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func init() { proto.RegisterFile("google/protobuf/any.proto", fileDescriptor_any_744b9ca530f228db) }
 | 
					func init() { proto.RegisterFile("google/protobuf/any.proto", fileDescriptor_b53526c13ae22eb4) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var fileDescriptor_any_744b9ca530f228db = []byte{
 | 
					var fileDescriptor_b53526c13ae22eb4 = []byte{
 | 
				
			||||||
	// 185 bytes of a gzipped FileDescriptorProto
 | 
						// 185 bytes of a gzipped FileDescriptorProto
 | 
				
			||||||
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4c, 0xcf, 0xcf, 0x4f,
 | 
						0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4c, 0xcf, 0xcf, 0x4f,
 | 
				
			||||||
	0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x4f, 0xcc, 0xab, 0xd4,
 | 
						0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x4f, 0xcc, 0xab, 0xd4,
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										21
									
								
								vendor/github.com/golang/protobuf/ptypes/any/any.proto
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										21
									
								
								vendor/github.com/golang/protobuf/ptypes/any/any.proto
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -120,17 +120,18 @@ option objc_class_prefix = "GPB";
 | 
				
			|||||||
//     }
 | 
					//     }
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
message Any {
 | 
					message Any {
 | 
				
			||||||
  // A URL/resource name whose content describes the type of the
 | 
					  // A URL/resource name that uniquely identifies the type of the serialized
 | 
				
			||||||
  // serialized protocol buffer message.
 | 
					  // protocol buffer message. The last segment of the URL's path must represent
 | 
				
			||||||
 | 
					  // the fully qualified name of the type (as in
 | 
				
			||||||
 | 
					  // `path/google.protobuf.Duration`). The name should be in a canonical form
 | 
				
			||||||
 | 
					  // (e.g., leading "." is not accepted).
 | 
				
			||||||
  //
 | 
					  //
 | 
				
			||||||
  // For URLs which use the scheme `http`, `https`, or no scheme, the
 | 
					  // In practice, teams usually precompile into the binary all types that they
 | 
				
			||||||
  // following restrictions and interpretations apply:
 | 
					  // expect it to use in the context of Any. However, for URLs which use the
 | 
				
			||||||
 | 
					  // scheme `http`, `https`, or no scheme, one can optionally set up a type
 | 
				
			||||||
 | 
					  // server that maps type URLs to message definitions as follows:
 | 
				
			||||||
  //
 | 
					  //
 | 
				
			||||||
  // * If no scheme is provided, `https` is assumed.
 | 
					  // * If no scheme is provided, `https` is assumed.
 | 
				
			||||||
  // * The last segment of the URL's path must represent the fully
 | 
					 | 
				
			||||||
  //   qualified name of the type (as in `path/google.protobuf.Duration`).
 | 
					 | 
				
			||||||
  //   The name should be in a canonical form (e.g., leading "." is
 | 
					 | 
				
			||||||
  //   not accepted).
 | 
					 | 
				
			||||||
  // * An HTTP GET on the URL must yield a [google.protobuf.Type][]
 | 
					  // * An HTTP GET on the URL must yield a [google.protobuf.Type][]
 | 
				
			||||||
  //   value in binary format, or produce an error.
 | 
					  //   value in binary format, or produce an error.
 | 
				
			||||||
  // * Applications are allowed to cache lookup results based on the
 | 
					  // * Applications are allowed to cache lookup results based on the
 | 
				
			||||||
@@ -139,6 +140,10 @@ message Any {
 | 
				
			|||||||
  //   on changes to types. (Use versioned type names to manage
 | 
					  //   on changes to types. (Use versioned type names to manage
 | 
				
			||||||
  //   breaking changes.)
 | 
					  //   breaking changes.)
 | 
				
			||||||
  //
 | 
					  //
 | 
				
			||||||
 | 
					  // Note: this functionality is not currently available in the official
 | 
				
			||||||
 | 
					  // protobuf release, and it is not used for type URLs beginning with
 | 
				
			||||||
 | 
					  // type.googleapis.com.
 | 
				
			||||||
 | 
					  //
 | 
				
			||||||
  // Schemes other than `http`, `https` (or the empty scheme) might be
 | 
					  // Schemes other than `http`, `https` (or the empty scheme) might be
 | 
				
			||||||
  // used with implementation specific semantics.
 | 
					  // used with implementation specific semantics.
 | 
				
			||||||
  //
 | 
					  //
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								vendor/github.com/golang/protobuf/ptypes/duration.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/golang/protobuf/ptypes/duration.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -82,7 +82,7 @@ func Duration(p *durpb.Duration) (time.Duration, error) {
 | 
				
			|||||||
		return 0, fmt.Errorf("duration: %v is out of range for time.Duration", p)
 | 
							return 0, fmt.Errorf("duration: %v is out of range for time.Duration", p)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if p.Nanos != 0 {
 | 
						if p.Nanos != 0 {
 | 
				
			||||||
		d += time.Duration(p.Nanos)
 | 
							d += time.Duration(p.Nanos) * time.Nanosecond
 | 
				
			||||||
		if (d < 0) != (p.Nanos < 0) {
 | 
							if (d < 0) != (p.Nanos < 0) {
 | 
				
			||||||
			return 0, fmt.Errorf("duration: %v is out of range for time.Duration", p)
 | 
								return 0, fmt.Errorf("duration: %v is out of range for time.Duration", p)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										26
									
								
								vendor/github.com/golang/protobuf/ptypes/duration/duration.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										26
									
								
								vendor/github.com/golang/protobuf/ptypes/duration/duration.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,11 +1,13 @@
 | 
				
			|||||||
// Code generated by protoc-gen-go. DO NOT EDIT.
 | 
					// Code generated by protoc-gen-go. DO NOT EDIT.
 | 
				
			||||||
// source: google/protobuf/duration.proto
 | 
					// source: google/protobuf/duration.proto
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package duration // import "github.com/golang/protobuf/ptypes/duration"
 | 
					package duration
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import proto "github.com/golang/protobuf/proto"
 | 
					import (
 | 
				
			||||||
import fmt "fmt"
 | 
						fmt "fmt"
 | 
				
			||||||
import math "math"
 | 
						proto "github.com/golang/protobuf/proto"
 | 
				
			||||||
 | 
						math "math"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Reference imports to suppress errors if they are not otherwise used.
 | 
					// Reference imports to suppress errors if they are not otherwise used.
 | 
				
			||||||
var _ = proto.Marshal
 | 
					var _ = proto.Marshal
 | 
				
			||||||
@@ -16,7 +18,7 @@ var _ = math.Inf
 | 
				
			|||||||
// is compatible with the proto package it is being compiled against.
 | 
					// is compatible with the proto package it is being compiled against.
 | 
				
			||||||
// A compilation error at this line likely means your copy of the
 | 
					// A compilation error at this line likely means your copy of the
 | 
				
			||||||
// proto package needs to be updated.
 | 
					// proto package needs to be updated.
 | 
				
			||||||
const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
 | 
					const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// A Duration represents a signed, fixed-length span of time represented
 | 
					// A Duration represents a signed, fixed-length span of time represented
 | 
				
			||||||
// as a count of seconds and fractions of seconds at nanosecond
 | 
					// as a count of seconds and fractions of seconds at nanosecond
 | 
				
			||||||
@@ -99,17 +101,19 @@ func (m *Duration) Reset()         { *m = Duration{} }
 | 
				
			|||||||
func (m *Duration) String() string { return proto.CompactTextString(m) }
 | 
					func (m *Duration) String() string { return proto.CompactTextString(m) }
 | 
				
			||||||
func (*Duration) ProtoMessage()    {}
 | 
					func (*Duration) ProtoMessage()    {}
 | 
				
			||||||
func (*Duration) Descriptor() ([]byte, []int) {
 | 
					func (*Duration) Descriptor() ([]byte, []int) {
 | 
				
			||||||
	return fileDescriptor_duration_e7d612259e3f0613, []int{0}
 | 
						return fileDescriptor_23597b2ebd7ac6c5, []int{0}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (*Duration) XXX_WellKnownType() string { return "Duration" }
 | 
					func (*Duration) XXX_WellKnownType() string { return "Duration" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (m *Duration) XXX_Unmarshal(b []byte) error {
 | 
					func (m *Duration) XXX_Unmarshal(b []byte) error {
 | 
				
			||||||
	return xxx_messageInfo_Duration.Unmarshal(m, b)
 | 
						return xxx_messageInfo_Duration.Unmarshal(m, b)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
func (m *Duration) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 | 
					func (m *Duration) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 | 
				
			||||||
	return xxx_messageInfo_Duration.Marshal(b, m, deterministic)
 | 
						return xxx_messageInfo_Duration.Marshal(b, m, deterministic)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
func (dst *Duration) XXX_Merge(src proto.Message) {
 | 
					func (m *Duration) XXX_Merge(src proto.Message) {
 | 
				
			||||||
	xxx_messageInfo_Duration.Merge(dst, src)
 | 
						xxx_messageInfo_Duration.Merge(m, src)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
func (m *Duration) XXX_Size() int {
 | 
					func (m *Duration) XXX_Size() int {
 | 
				
			||||||
	return xxx_messageInfo_Duration.Size(m)
 | 
						return xxx_messageInfo_Duration.Size(m)
 | 
				
			||||||
@@ -138,11 +142,9 @@ func init() {
 | 
				
			|||||||
	proto.RegisterType((*Duration)(nil), "google.protobuf.Duration")
 | 
						proto.RegisterType((*Duration)(nil), "google.protobuf.Duration")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func init() {
 | 
					func init() { proto.RegisterFile("google/protobuf/duration.proto", fileDescriptor_23597b2ebd7ac6c5) }
 | 
				
			||||||
	proto.RegisterFile("google/protobuf/duration.proto", fileDescriptor_duration_e7d612259e3f0613)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
var fileDescriptor_duration_e7d612259e3f0613 = []byte{
 | 
					var fileDescriptor_23597b2ebd7ac6c5 = []byte{
 | 
				
			||||||
	// 190 bytes of a gzipped FileDescriptorProto
 | 
						// 190 bytes of a gzipped FileDescriptorProto
 | 
				
			||||||
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4b, 0xcf, 0xcf, 0x4f,
 | 
						0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4b, 0xcf, 0xcf, 0x4f,
 | 
				
			||||||
	0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x4f, 0x29, 0x2d, 0x4a,
 | 
						0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x4f, 0x29, 0x2d, 0x4a,
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										6
									
								
								vendor/github.com/golang/protobuf/ptypes/timestamp.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								vendor/github.com/golang/protobuf/ptypes/timestamp.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -111,11 +111,9 @@ func TimestampNow() *tspb.Timestamp {
 | 
				
			|||||||
// TimestampProto converts the time.Time to a google.protobuf.Timestamp proto.
 | 
					// TimestampProto converts the time.Time to a google.protobuf.Timestamp proto.
 | 
				
			||||||
// It returns an error if the resulting Timestamp is invalid.
 | 
					// It returns an error if the resulting Timestamp is invalid.
 | 
				
			||||||
func TimestampProto(t time.Time) (*tspb.Timestamp, error) {
 | 
					func TimestampProto(t time.Time) (*tspb.Timestamp, error) {
 | 
				
			||||||
	seconds := t.Unix()
 | 
					 | 
				
			||||||
	nanos := int32(t.Sub(time.Unix(seconds, 0)))
 | 
					 | 
				
			||||||
	ts := &tspb.Timestamp{
 | 
						ts := &tspb.Timestamp{
 | 
				
			||||||
		Seconds: seconds,
 | 
							Seconds: t.Unix(),
 | 
				
			||||||
		Nanos:   nanos,
 | 
							Nanos:   int32(t.Nanosecond()),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if err := validateTimestamp(ts); err != nil {
 | 
						if err := validateTimestamp(ts); err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										34
									
								
								vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										34
									
								
								vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,11 +1,13 @@
 | 
				
			|||||||
// Code generated by protoc-gen-go. DO NOT EDIT.
 | 
					// Code generated by protoc-gen-go. DO NOT EDIT.
 | 
				
			||||||
// source: google/protobuf/timestamp.proto
 | 
					// source: google/protobuf/timestamp.proto
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package timestamp // import "github.com/golang/protobuf/ptypes/timestamp"
 | 
					package timestamp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import proto "github.com/golang/protobuf/proto"
 | 
					import (
 | 
				
			||||||
import fmt "fmt"
 | 
						fmt "fmt"
 | 
				
			||||||
import math "math"
 | 
						proto "github.com/golang/protobuf/proto"
 | 
				
			||||||
 | 
						math "math"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Reference imports to suppress errors if they are not otherwise used.
 | 
					// Reference imports to suppress errors if they are not otherwise used.
 | 
				
			||||||
var _ = proto.Marshal
 | 
					var _ = proto.Marshal
 | 
				
			||||||
@@ -16,7 +18,7 @@ var _ = math.Inf
 | 
				
			|||||||
// is compatible with the proto package it is being compiled against.
 | 
					// is compatible with the proto package it is being compiled against.
 | 
				
			||||||
// A compilation error at this line likely means your copy of the
 | 
					// A compilation error at this line likely means your copy of the
 | 
				
			||||||
// proto package needs to be updated.
 | 
					// proto package needs to be updated.
 | 
				
			||||||
const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
 | 
					const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// A Timestamp represents a point in time independent of any time zone
 | 
					// A Timestamp represents a point in time independent of any time zone
 | 
				
			||||||
// or calendar, represented as seconds and fractions of seconds at
 | 
					// or calendar, represented as seconds and fractions of seconds at
 | 
				
			||||||
@@ -81,7 +83,9 @@ const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
 | 
				
			|||||||
// {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional
 | 
					// {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional
 | 
				
			||||||
// seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),
 | 
					// seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),
 | 
				
			||||||
// are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone
 | 
					// are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone
 | 
				
			||||||
// is required, though only UTC (as indicated by "Z") is presently supported.
 | 
					// is required. A proto3 JSON serializer should always use UTC (as indicated by
 | 
				
			||||||
 | 
					// "Z") when printing the Timestamp type and a proto3 JSON parser should be
 | 
				
			||||||
 | 
					// able to accept both UTC and other timezones (as indicated by an offset).
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
// For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past
 | 
					// For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past
 | 
				
			||||||
// 01:30 UTC on January 15, 2017.
 | 
					// 01:30 UTC on January 15, 2017.
 | 
				
			||||||
@@ -92,8 +96,8 @@ const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
 | 
				
			|||||||
// to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime)
 | 
					// to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime)
 | 
				
			||||||
// with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one
 | 
					// with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one
 | 
				
			||||||
// can use the Joda Time's [`ISODateTimeFormat.dateTime()`](
 | 
					// can use the Joda Time's [`ISODateTimeFormat.dateTime()`](
 | 
				
			||||||
// http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime--)
 | 
					// http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime--
 | 
				
			||||||
// to obtain a formatter capable of generating timestamps in this format.
 | 
					// ) to obtain a formatter capable of generating timestamps in this format.
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
type Timestamp struct {
 | 
					type Timestamp struct {
 | 
				
			||||||
@@ -115,17 +119,19 @@ func (m *Timestamp) Reset()         { *m = Timestamp{} }
 | 
				
			|||||||
func (m *Timestamp) String() string { return proto.CompactTextString(m) }
 | 
					func (m *Timestamp) String() string { return proto.CompactTextString(m) }
 | 
				
			||||||
func (*Timestamp) ProtoMessage()    {}
 | 
					func (*Timestamp) ProtoMessage()    {}
 | 
				
			||||||
func (*Timestamp) Descriptor() ([]byte, []int) {
 | 
					func (*Timestamp) Descriptor() ([]byte, []int) {
 | 
				
			||||||
	return fileDescriptor_timestamp_b826e8e5fba671a8, []int{0}
 | 
						return fileDescriptor_292007bbfe81227e, []int{0}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (*Timestamp) XXX_WellKnownType() string { return "Timestamp" }
 | 
					func (*Timestamp) XXX_WellKnownType() string { return "Timestamp" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (m *Timestamp) XXX_Unmarshal(b []byte) error {
 | 
					func (m *Timestamp) XXX_Unmarshal(b []byte) error {
 | 
				
			||||||
	return xxx_messageInfo_Timestamp.Unmarshal(m, b)
 | 
						return xxx_messageInfo_Timestamp.Unmarshal(m, b)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
func (m *Timestamp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 | 
					func (m *Timestamp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 | 
				
			||||||
	return xxx_messageInfo_Timestamp.Marshal(b, m, deterministic)
 | 
						return xxx_messageInfo_Timestamp.Marshal(b, m, deterministic)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
func (dst *Timestamp) XXX_Merge(src proto.Message) {
 | 
					func (m *Timestamp) XXX_Merge(src proto.Message) {
 | 
				
			||||||
	xxx_messageInfo_Timestamp.Merge(dst, src)
 | 
						xxx_messageInfo_Timestamp.Merge(m, src)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
func (m *Timestamp) XXX_Size() int {
 | 
					func (m *Timestamp) XXX_Size() int {
 | 
				
			||||||
	return xxx_messageInfo_Timestamp.Size(m)
 | 
						return xxx_messageInfo_Timestamp.Size(m)
 | 
				
			||||||
@@ -154,11 +160,9 @@ func init() {
 | 
				
			|||||||
	proto.RegisterType((*Timestamp)(nil), "google.protobuf.Timestamp")
 | 
						proto.RegisterType((*Timestamp)(nil), "google.protobuf.Timestamp")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func init() {
 | 
					func init() { proto.RegisterFile("google/protobuf/timestamp.proto", fileDescriptor_292007bbfe81227e) }
 | 
				
			||||||
	proto.RegisterFile("google/protobuf/timestamp.proto", fileDescriptor_timestamp_b826e8e5fba671a8)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
var fileDescriptor_timestamp_b826e8e5fba671a8 = []byte{
 | 
					var fileDescriptor_292007bbfe81227e = []byte{
 | 
				
			||||||
	// 191 bytes of a gzipped FileDescriptorProto
 | 
						// 191 bytes of a gzipped FileDescriptorProto
 | 
				
			||||||
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4f, 0xcf, 0xcf, 0x4f,
 | 
						0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4f, 0xcf, 0xcf, 0x4f,
 | 
				
			||||||
	0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x2f, 0xc9, 0xcc, 0x4d,
 | 
						0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x2f, 0xc9, 0xcc, 0x4d,
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										8
									
								
								vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.proto
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.proto
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -103,7 +103,9 @@ option objc_class_prefix = "GPB";
 | 
				
			|||||||
// {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional
 | 
					// {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional
 | 
				
			||||||
// seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),
 | 
					// seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),
 | 
				
			||||||
// are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone
 | 
					// are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone
 | 
				
			||||||
// is required, though only UTC (as indicated by "Z") is presently supported.
 | 
					// is required. A proto3 JSON serializer should always use UTC (as indicated by
 | 
				
			||||||
 | 
					// "Z") when printing the Timestamp type and a proto3 JSON parser should be
 | 
				
			||||||
 | 
					// able to accept both UTC and other timezones (as indicated by an offset).
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
// For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past
 | 
					// For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past
 | 
				
			||||||
// 01:30 UTC on January 15, 2017.
 | 
					// 01:30 UTC on January 15, 2017.
 | 
				
			||||||
@@ -114,8 +116,8 @@ option objc_class_prefix = "GPB";
 | 
				
			|||||||
// to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime)
 | 
					// to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime)
 | 
				
			||||||
// with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one
 | 
					// with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one
 | 
				
			||||||
// can use the Joda Time's [`ISODateTimeFormat.dateTime()`](
 | 
					// can use the Joda Time's [`ISODateTimeFormat.dateTime()`](
 | 
				
			||||||
// http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime--)
 | 
					// http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime--
 | 
				
			||||||
// to obtain a formatter capable of generating timestamps in this format.
 | 
					// ) to obtain a formatter capable of generating timestamps in this format.
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
message Timestamp {
 | 
					message Timestamp {
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								vendor/modules.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/modules.txt
									
									
									
									
										vendored
									
									
								
							@@ -51,7 +51,7 @@ github.com/eclipse/paho.mqtt.golang
 | 
				
			|||||||
github.com/eclipse/paho.mqtt.golang/packets
 | 
					github.com/eclipse/paho.mqtt.golang/packets
 | 
				
			||||||
# github.com/gogo/protobuf v1.2.0
 | 
					# github.com/gogo/protobuf v1.2.0
 | 
				
			||||||
github.com/gogo/protobuf/proto
 | 
					github.com/gogo/protobuf/proto
 | 
				
			||||||
# github.com/golang/protobuf v1.2.0
 | 
					# github.com/golang/protobuf v1.3.2
 | 
				
			||||||
github.com/golang/protobuf/proto
 | 
					github.com/golang/protobuf/proto
 | 
				
			||||||
github.com/golang/protobuf/ptypes
 | 
					github.com/golang/protobuf/ptypes
 | 
				
			||||||
github.com/golang/protobuf/ptypes/any
 | 
					github.com/golang/protobuf/ptypes/any
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user