mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-10-31 10:18:13 +00:00 
			
		
		
		
	bump(github.com/gogo/protobuf):9dc510915846dd5a05607d3b5bf41f5ca5cce972
This commit is contained in:
		
							
								
								
									
										114
									
								
								Godeps/Godeps.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										114
									
								
								Godeps/Godeps.json
									
									
									
										generated
									
									
									
								
							| @@ -426,10 +426,120 @@ | |||||||
| 			"Comment": "v3", | 			"Comment": "v3", | ||||||
| 			"Rev": "c7fdd8b5cd55e87b4e1f4e372cdb1db61dd6c66f" | 			"Rev": "c7fdd8b5cd55e87b4e1f4e372cdb1db61dd6c66f" | ||||||
| 		}, | 		}, | ||||||
|  | 		{ | ||||||
|  | 			"ImportPath": "github.com/gogo/protobuf/gogoproto", | ||||||
|  | 			"Comment": "v0.1-108-g9dc5109", | ||||||
|  | 			"Rev": "9dc510915846dd5a05607d3b5bf41f5ca5cce972" | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			"ImportPath": "github.com/gogo/protobuf/plugin/defaultcheck", | ||||||
|  | 			"Comment": "v0.1-108-g9dc5109", | ||||||
|  | 			"Rev": "9dc510915846dd5a05607d3b5bf41f5ca5cce972" | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			"ImportPath": "github.com/gogo/protobuf/plugin/description", | ||||||
|  | 			"Comment": "v0.1-108-g9dc5109", | ||||||
|  | 			"Rev": "9dc510915846dd5a05607d3b5bf41f5ca5cce972" | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			"ImportPath": "github.com/gogo/protobuf/plugin/embedcheck", | ||||||
|  | 			"Comment": "v0.1-108-g9dc5109", | ||||||
|  | 			"Rev": "9dc510915846dd5a05607d3b5bf41f5ca5cce972" | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			"ImportPath": "github.com/gogo/protobuf/plugin/enumstringer", | ||||||
|  | 			"Comment": "v0.1-108-g9dc5109", | ||||||
|  | 			"Rev": "9dc510915846dd5a05607d3b5bf41f5ca5cce972" | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			"ImportPath": "github.com/gogo/protobuf/plugin/equal", | ||||||
|  | 			"Comment": "v0.1-108-g9dc5109", | ||||||
|  | 			"Rev": "9dc510915846dd5a05607d3b5bf41f5ca5cce972" | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			"ImportPath": "github.com/gogo/protobuf/plugin/face", | ||||||
|  | 			"Comment": "v0.1-108-g9dc5109", | ||||||
|  | 			"Rev": "9dc510915846dd5a05607d3b5bf41f5ca5cce972" | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			"ImportPath": "github.com/gogo/protobuf/plugin/gostring", | ||||||
|  | 			"Comment": "v0.1-108-g9dc5109", | ||||||
|  | 			"Rev": "9dc510915846dd5a05607d3b5bf41f5ca5cce972" | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			"ImportPath": "github.com/gogo/protobuf/plugin/grpc", | ||||||
|  | 			"Comment": "v0.1-108-g9dc5109", | ||||||
|  | 			"Rev": "9dc510915846dd5a05607d3b5bf41f5ca5cce972" | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			"ImportPath": "github.com/gogo/protobuf/plugin/marshalto", | ||||||
|  | 			"Comment": "v0.1-108-g9dc5109", | ||||||
|  | 			"Rev": "9dc510915846dd5a05607d3b5bf41f5ca5cce972" | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			"ImportPath": "github.com/gogo/protobuf/plugin/oneofcheck", | ||||||
|  | 			"Comment": "v0.1-108-g9dc5109", | ||||||
|  | 			"Rev": "9dc510915846dd5a05607d3b5bf41f5ca5cce972" | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			"ImportPath": "github.com/gogo/protobuf/plugin/populate", | ||||||
|  | 			"Comment": "v0.1-108-g9dc5109", | ||||||
|  | 			"Rev": "9dc510915846dd5a05607d3b5bf41f5ca5cce972" | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			"ImportPath": "github.com/gogo/protobuf/plugin/size", | ||||||
|  | 			"Comment": "v0.1-108-g9dc5109", | ||||||
|  | 			"Rev": "9dc510915846dd5a05607d3b5bf41f5ca5cce972" | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			"ImportPath": "github.com/gogo/protobuf/plugin/stringer", | ||||||
|  | 			"Comment": "v0.1-108-g9dc5109", | ||||||
|  | 			"Rev": "9dc510915846dd5a05607d3b5bf41f5ca5cce972" | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			"ImportPath": "github.com/gogo/protobuf/plugin/testgen", | ||||||
|  | 			"Comment": "v0.1-108-g9dc5109", | ||||||
|  | 			"Rev": "9dc510915846dd5a05607d3b5bf41f5ca5cce972" | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			"ImportPath": "github.com/gogo/protobuf/plugin/union", | ||||||
|  | 			"Comment": "v0.1-108-g9dc5109", | ||||||
|  | 			"Rev": "9dc510915846dd5a05607d3b5bf41f5ca5cce972" | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			"ImportPath": "github.com/gogo/protobuf/plugin/unmarshal", | ||||||
|  | 			"Comment": "v0.1-108-g9dc5109", | ||||||
|  | 			"Rev": "9dc510915846dd5a05607d3b5bf41f5ca5cce972" | ||||||
|  | 		}, | ||||||
| 		{ | 		{ | ||||||
| 			"ImportPath": "github.com/gogo/protobuf/proto", | 			"ImportPath": "github.com/gogo/protobuf/proto", | ||||||
| 			"Comment": "v0.1-55-g2093b57", | 			"Comment": "v0.1-108-g9dc5109", | ||||||
| 			"Rev": "2093b57e5ca2ccbee4626814100bc1aada691b18" | 			"Rev": "9dc510915846dd5a05607d3b5bf41f5ca5cce972" | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			"ImportPath": "github.com/gogo/protobuf/protoc-gen-gogo/descriptor", | ||||||
|  | 			"Comment": "v0.1-108-g9dc5109", | ||||||
|  | 			"Rev": "9dc510915846dd5a05607d3b5bf41f5ca5cce972" | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			"ImportPath": "github.com/gogo/protobuf/protoc-gen-gogo/generator", | ||||||
|  | 			"Comment": "v0.1-108-g9dc5109", | ||||||
|  | 			"Rev": "9dc510915846dd5a05607d3b5bf41f5ca5cce972" | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			"ImportPath": "github.com/gogo/protobuf/protoc-gen-gogo/plugin", | ||||||
|  | 			"Comment": "v0.1-108-g9dc5109", | ||||||
|  | 			"Rev": "9dc510915846dd5a05607d3b5bf41f5ca5cce972" | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			"ImportPath": "github.com/gogo/protobuf/sortkeys", | ||||||
|  | 			"Comment": "v0.1-108-g9dc5109", | ||||||
|  | 			"Rev": "9dc510915846dd5a05607d3b5bf41f5ca5cce972" | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			"ImportPath": "github.com/gogo/protobuf/vanity", | ||||||
|  | 			"Comment": "v0.1-108-g9dc5109", | ||||||
|  | 			"Rev": "9dc510915846dd5a05607d3b5bf41f5ca5cce972" | ||||||
| 		}, | 		}, | ||||||
| 		{ | 		{ | ||||||
| 			"ImportPath": "github.com/golang/glog", | 			"ImportPath": "github.com/golang/glog", | ||||||
|   | |||||||
							
								
								
									
										36
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/gogoproto/Makefile
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/gogoproto/Makefile
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,36 @@ | |||||||
|  | # Extensions for Protocol Buffers to create more go like structures. | ||||||
|  | # | ||||||
|  | # Copyright (c) 2013, Vastech SA (PTY) LTD. All rights reserved. | ||||||
|  | # http://github.com/gogo/protobuf/gogoproto | ||||||
|  | # | ||||||
|  | # 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. | ||||||
|  | # | ||||||
|  | # 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. | ||||||
|  |  | ||||||
|  | regenerate: | ||||||
|  | 	protoc --gogo_out=Mgoogle/protobuf/descriptor.proto=github.com/gogo/protobuf/protoc-gen-gogo/descriptor:. --proto_path=../../../../:../protobuf/:. *.proto | ||||||
|  |  | ||||||
|  | restore: | ||||||
|  | 	cp gogo.pb.golden gogo.pb.go | ||||||
|  |  | ||||||
|  | preserve: | ||||||
|  | 	cp gogo.pb.go gogo.pb.golden | ||||||
							
								
								
									
										168
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/gogoproto/doc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										168
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/gogoproto/doc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,168 @@ | |||||||
|  | // Extensions for Protocol Buffers to create more go like structures. | ||||||
|  | // | ||||||
|  | // Copyright (c) 2013, Vastech SA (PTY) LTD. All rights reserved. | ||||||
|  | // http://github.com/gogo/protobuf/gogoproto | ||||||
|  | // | ||||||
|  | // 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. | ||||||
|  | // | ||||||
|  | // 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 gogoproto provides extensions for protocol buffers to achieve: | ||||||
|  |  | ||||||
|  |   - fast marshalling and unmarshalling. | ||||||
|  |   - peace of mind by optionally generating test and benchmark code. | ||||||
|  |   - more canonical Go structures. | ||||||
|  |   - less typing by optionally generating extra helper code. | ||||||
|  |   - goprotobuf compatibility | ||||||
|  |  | ||||||
|  | More Canonical Go Structures | ||||||
|  |  | ||||||
|  | A lot of time working with a goprotobuf struct will lead you to a place where you create another struct that is easier to work with and then have a function to copy the values between the two structs. | ||||||
|  | You might also find that basic structs that started their life as part of an API need to be sent over the wire. With gob, you could just send it. With goprotobuf, you need to make a parallel struct. | ||||||
|  | Gogoprotobuf tries to fix these problems with the nullable, embed, customtype and customname field extensions. | ||||||
|  |  | ||||||
|  |   - nullable, if false, a field is generated without a pointer (see warning below). | ||||||
|  |   - embed, if true, the field is generated as an embedded field. | ||||||
|  |   - customtype, It works with the Marshal and Unmarshal methods, to allow you to have your own types in your struct, but marshal to bytes. For example, custom.Uuid or custom.Fixed128 | ||||||
|  |   - customname (beta), Changes the generated fieldname. This is especially useful when generated methods conflict with fieldnames. | ||||||
|  |   - casttype (beta), Changes the generated fieldtype.  All generated code assumes that this type is castable to the protocol buffer field type.  It does not work for structs or enums. | ||||||
|  |   - castkey (beta), Changes the generated fieldtype for a map key.  All generated code assumes that this type is castable to the protocol buffer field type.  Only supported on maps. | ||||||
|  |   - castvalue (beta), Changes the generated fieldtype for a map value.  All generated code assumes that this type is castable to the protocol buffer field type.  Only supported on maps. | ||||||
|  |  | ||||||
|  | Warning about nullable: According to the Protocol Buffer specification, you should be able to tell whether a field is set or unset. With the option nullable=false this feature is lost, since your non-nullable fields will always be set. It can be seen as a layer on top of Protocol Buffers, where before and after marshalling all non-nullable fields are set and they cannot be unset. | ||||||
|  |  | ||||||
|  | Let us look at: | ||||||
|  |  | ||||||
|  | 	github.com/gogo/protobuf/test/example/example.proto | ||||||
|  |  | ||||||
|  | for a quicker overview. | ||||||
|  |  | ||||||
|  | The following message: | ||||||
|  |  | ||||||
|  |   package test; | ||||||
|  |  | ||||||
|  |   import "github.com/gogo/protobuf/gogoproto/gogo.proto"; | ||||||
|  |  | ||||||
|  | 	message A { | ||||||
|  | 		optional string Description = 1 [(gogoproto.nullable) = false]; | ||||||
|  | 		optional int64 Number = 2 [(gogoproto.nullable) = false]; | ||||||
|  | 		optional bytes Id = 3 [(gogoproto.customtype) = "github.com/gogo/protobuf/test/custom.Uuid", (gogoproto.nullable) = false]; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | Will generate a go struct which looks a lot like this: | ||||||
|  |  | ||||||
|  | 	type A struct { | ||||||
|  | 		Description string | ||||||
|  | 		Number      int64 | ||||||
|  | 		Id          github_com_gogo_protobuf_test_custom.Uuid | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | You will see there are no pointers, since all fields are non-nullable. | ||||||
|  | You will also see a custom type which marshals to a string. | ||||||
|  | Be warned it is your responsibility to test your custom types thoroughly. | ||||||
|  | You should think of every possible empty and nil case for your marshaling, unmarshaling and size methods. | ||||||
|  |  | ||||||
|  | Next we will embed the message A in message B. | ||||||
|  |  | ||||||
|  | 	message B { | ||||||
|  | 		optional A A = 1 [(gogoproto.nullable) = false, (gogoproto.embed) = true]; | ||||||
|  | 		repeated bytes G = 2 [(gogoproto.customtype) = "github.com/gogo/protobuf/test/custom.Uint128", (gogoproto.nullable) = false]; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | See below that A is embedded in B. | ||||||
|  |  | ||||||
|  | 	type B struct { | ||||||
|  | 		A | ||||||
|  | 		G []github_com_gogo_protobuf_test_custom.Uint128 | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | Also see the repeated custom type. | ||||||
|  |  | ||||||
|  | 	type Uint128 [2]uint64 | ||||||
|  |  | ||||||
|  | Next we will create a custom name for one of our fields. | ||||||
|  |  | ||||||
|  | 	message C { | ||||||
|  | 		optional int64 size = 1 [(gogoproto.customname) = "MySize"]; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | See below that the field's name is MySize and not Size. | ||||||
|  |  | ||||||
|  | 	type C struct { | ||||||
|  | 		MySize		*int64 | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | The is useful when having a protocol buffer message with a field name which conflicts with a generated method. | ||||||
|  | As an example, having a field name size and using the sizer plugin to generate a Size method will cause a go compiler error. | ||||||
|  | Using customname you can fix this error without changing the field name. | ||||||
|  | This is typically useful when working with a protocol buffer that was designed before these methods and/or the go language were avialable. | ||||||
|  |  | ||||||
|  | Gogoprotobuf also has some more subtle changes, these could be changed back: | ||||||
|  |  | ||||||
|  |   - the generated package name for imports do not have the extra /filename.pb, | ||||||
|  |   but are actually the imports specified in the .proto file. | ||||||
|  |  | ||||||
|  | Gogoprotobuf also has lost some features which should be brought back with time: | ||||||
|  |  | ||||||
|  |   - Marshalling and unmarshalling with reflect and without the unsafe package, | ||||||
|  |   this requires work in pointer_reflect.go | ||||||
|  |  | ||||||
|  | Why does nullable break protocol buffer specifications: | ||||||
|  |  | ||||||
|  | The protocol buffer specification states, somewhere, that you should be able to tell whether a | ||||||
|  | field is set or unset.  With the option nullable=false this feature is lost, | ||||||
|  | since your non-nullable fields will always be set.  It can be seen as a layer on top of | ||||||
|  | protocol buffers, where before and after marshalling all non-nullable fields are set | ||||||
|  | and they cannot be unset. | ||||||
|  |  | ||||||
|  | Goprotobuf Compatibility: | ||||||
|  |  | ||||||
|  | Gogoprotobuf is compatible with Goprotobuf, because it is compatible with protocol buffers. | ||||||
|  | Gogoprotobuf generates the same code as goprotobuf if no extensions are used. | ||||||
|  | The enumprefix, getters and stringer extensions can be used to remove some of the unnecessary code generated by goprotobuf: | ||||||
|  |  | ||||||
|  |   - gogoproto_import, if false, the generated code imports github.com/golang/protobuf/proto instead of github.com/gogo/protobuf/proto. | ||||||
|  |   - goproto_enum_prefix, if false, generates the enum constant names without the messagetype prefix | ||||||
|  |   - goproto_enum_stringer (experimental), if false, the enum is generated without the default string method, this is useful for rather using enum_stringer, or allowing you to write your own string method. | ||||||
|  |   - goproto_getters, if false, the message is generated without get methods, this is useful when you would rather want to use face | ||||||
|  |   - goproto_stringer, if false, the message is generated without the default string method, this is useful for rather using stringer, or allowing you to write your own string method. | ||||||
|  |   - goproto_extensions_map (beta), if false, the extensions field is generated as type []byte instead of type map[int32]proto.Extension | ||||||
|  |   - goproto_unrecognized (beta), if false, XXX_unrecognized field is not generated. This is useful in conjunction with gogoproto.nullable=false, to generate structures completely devoid of pointers and reduce GC pressure at the cost of losing information about unrecognized fields. | ||||||
|  |  | ||||||
|  | Less Typing and Peace of Mind is explained in their specific plugin folders godoc: | ||||||
|  |  | ||||||
|  | 	- github.com/gogo/protobuf/plugin/<extension_name> | ||||||
|  |  | ||||||
|  | If you do not use any of these extension the code that is generated | ||||||
|  | will be the same as if goprotobuf has generated it. | ||||||
|  |  | ||||||
|  | The most complete way to see examples is to look at | ||||||
|  |  | ||||||
|  | 	github.com/gogo/protobuf/test/thetest.proto | ||||||
|  |  | ||||||
|  | Gogoprototest is a seperate project, | ||||||
|  | because we want to keep gogoprotobuf independant of goprotobuf, | ||||||
|  | but we still want to test it thoroughly. | ||||||
|  |  | ||||||
|  | */ | ||||||
|  | package gogoproto | ||||||
							
								
								
									
										512
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/gogoproto/gogo.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										512
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/gogoproto/gogo.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,512 @@ | |||||||
|  | // Code generated by protoc-gen-gogo. | ||||||
|  | // source: gogo.proto | ||||||
|  | // DO NOT EDIT! | ||||||
|  |  | ||||||
|  | /* | ||||||
|  | Package gogoproto is a generated protocol buffer package. | ||||||
|  |  | ||||||
|  | It is generated from these files: | ||||||
|  | 	gogo.proto | ||||||
|  |  | ||||||
|  | It has these top-level messages: | ||||||
|  | */ | ||||||
|  | package gogoproto | ||||||
|  |  | ||||||
|  | import proto "github.com/gogo/protobuf/proto" | ||||||
|  | import fmt "fmt" | ||||||
|  | import math "math" | ||||||
|  | import google_protobuf "github.com/gogo/protobuf/protoc-gen-gogo/descriptor" | ||||||
|  |  | ||||||
|  | // Reference imports to suppress errors if they are not otherwise used. | ||||||
|  | var _ = proto.Marshal | ||||||
|  | var _ = fmt.Errorf | ||||||
|  | var _ = math.Inf | ||||||
|  |  | ||||||
|  | var E_GoprotoEnumPrefix = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.EnumOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         62001, | ||||||
|  | 	Name:          "gogoproto.goproto_enum_prefix", | ||||||
|  | 	Tag:           "varint,62001,opt,name=goproto_enum_prefix", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_GoprotoEnumStringer = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.EnumOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         62021, | ||||||
|  | 	Name:          "gogoproto.goproto_enum_stringer", | ||||||
|  | 	Tag:           "varint,62021,opt,name=goproto_enum_stringer", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_EnumStringer = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.EnumOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         62022, | ||||||
|  | 	Name:          "gogoproto.enum_stringer", | ||||||
|  | 	Tag:           "varint,62022,opt,name=enum_stringer", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_GoprotoGettersAll = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.FileOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         63001, | ||||||
|  | 	Name:          "gogoproto.goproto_getters_all", | ||||||
|  | 	Tag:           "varint,63001,opt,name=goproto_getters_all", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_GoprotoEnumPrefixAll = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.FileOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         63002, | ||||||
|  | 	Name:          "gogoproto.goproto_enum_prefix_all", | ||||||
|  | 	Tag:           "varint,63002,opt,name=goproto_enum_prefix_all", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_GoprotoStringerAll = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.FileOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         63003, | ||||||
|  | 	Name:          "gogoproto.goproto_stringer_all", | ||||||
|  | 	Tag:           "varint,63003,opt,name=goproto_stringer_all", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_VerboseEqualAll = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.FileOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         63004, | ||||||
|  | 	Name:          "gogoproto.verbose_equal_all", | ||||||
|  | 	Tag:           "varint,63004,opt,name=verbose_equal_all", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_FaceAll = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.FileOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         63005, | ||||||
|  | 	Name:          "gogoproto.face_all", | ||||||
|  | 	Tag:           "varint,63005,opt,name=face_all", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_GostringAll = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.FileOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         63006, | ||||||
|  | 	Name:          "gogoproto.gostring_all", | ||||||
|  | 	Tag:           "varint,63006,opt,name=gostring_all", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_PopulateAll = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.FileOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         63007, | ||||||
|  | 	Name:          "gogoproto.populate_all", | ||||||
|  | 	Tag:           "varint,63007,opt,name=populate_all", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_StringerAll = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.FileOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         63008, | ||||||
|  | 	Name:          "gogoproto.stringer_all", | ||||||
|  | 	Tag:           "varint,63008,opt,name=stringer_all", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_OnlyoneAll = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.FileOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         63009, | ||||||
|  | 	Name:          "gogoproto.onlyone_all", | ||||||
|  | 	Tag:           "varint,63009,opt,name=onlyone_all", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_EqualAll = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.FileOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         63013, | ||||||
|  | 	Name:          "gogoproto.equal_all", | ||||||
|  | 	Tag:           "varint,63013,opt,name=equal_all", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_DescriptionAll = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.FileOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         63014, | ||||||
|  | 	Name:          "gogoproto.description_all", | ||||||
|  | 	Tag:           "varint,63014,opt,name=description_all", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_TestgenAll = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.FileOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         63015, | ||||||
|  | 	Name:          "gogoproto.testgen_all", | ||||||
|  | 	Tag:           "varint,63015,opt,name=testgen_all", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_BenchgenAll = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.FileOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         63016, | ||||||
|  | 	Name:          "gogoproto.benchgen_all", | ||||||
|  | 	Tag:           "varint,63016,opt,name=benchgen_all", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_MarshalerAll = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.FileOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         63017, | ||||||
|  | 	Name:          "gogoproto.marshaler_all", | ||||||
|  | 	Tag:           "varint,63017,opt,name=marshaler_all", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_UnmarshalerAll = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.FileOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         63018, | ||||||
|  | 	Name:          "gogoproto.unmarshaler_all", | ||||||
|  | 	Tag:           "varint,63018,opt,name=unmarshaler_all", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_SizerAll = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.FileOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         63020, | ||||||
|  | 	Name:          "gogoproto.sizer_all", | ||||||
|  | 	Tag:           "varint,63020,opt,name=sizer_all", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_GoprotoEnumStringerAll = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.FileOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         63021, | ||||||
|  | 	Name:          "gogoproto.goproto_enum_stringer_all", | ||||||
|  | 	Tag:           "varint,63021,opt,name=goproto_enum_stringer_all", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_EnumStringerAll = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.FileOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         63022, | ||||||
|  | 	Name:          "gogoproto.enum_stringer_all", | ||||||
|  | 	Tag:           "varint,63022,opt,name=enum_stringer_all", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_UnsafeMarshalerAll = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.FileOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         63023, | ||||||
|  | 	Name:          "gogoproto.unsafe_marshaler_all", | ||||||
|  | 	Tag:           "varint,63023,opt,name=unsafe_marshaler_all", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_UnsafeUnmarshalerAll = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.FileOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         63024, | ||||||
|  | 	Name:          "gogoproto.unsafe_unmarshaler_all", | ||||||
|  | 	Tag:           "varint,63024,opt,name=unsafe_unmarshaler_all", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_GoprotoExtensionsMapAll = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.FileOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         63025, | ||||||
|  | 	Name:          "gogoproto.goproto_extensions_map_all", | ||||||
|  | 	Tag:           "varint,63025,opt,name=goproto_extensions_map_all", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_GoprotoUnrecognizedAll = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.FileOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         63026, | ||||||
|  | 	Name:          "gogoproto.goproto_unrecognized_all", | ||||||
|  | 	Tag:           "varint,63026,opt,name=goproto_unrecognized_all", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_GogoprotoImport = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.FileOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         63027, | ||||||
|  | 	Name:          "gogoproto.gogoproto_import", | ||||||
|  | 	Tag:           "varint,63027,opt,name=gogoproto_import", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_GoprotoGetters = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.MessageOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         64001, | ||||||
|  | 	Name:          "gogoproto.goproto_getters", | ||||||
|  | 	Tag:           "varint,64001,opt,name=goproto_getters", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_GoprotoStringer = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.MessageOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         64003, | ||||||
|  | 	Name:          "gogoproto.goproto_stringer", | ||||||
|  | 	Tag:           "varint,64003,opt,name=goproto_stringer", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_VerboseEqual = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.MessageOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         64004, | ||||||
|  | 	Name:          "gogoproto.verbose_equal", | ||||||
|  | 	Tag:           "varint,64004,opt,name=verbose_equal", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_Face = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.MessageOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         64005, | ||||||
|  | 	Name:          "gogoproto.face", | ||||||
|  | 	Tag:           "varint,64005,opt,name=face", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_Gostring = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.MessageOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         64006, | ||||||
|  | 	Name:          "gogoproto.gostring", | ||||||
|  | 	Tag:           "varint,64006,opt,name=gostring", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_Populate = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.MessageOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         64007, | ||||||
|  | 	Name:          "gogoproto.populate", | ||||||
|  | 	Tag:           "varint,64007,opt,name=populate", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_Stringer = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.MessageOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         67008, | ||||||
|  | 	Name:          "gogoproto.stringer", | ||||||
|  | 	Tag:           "varint,67008,opt,name=stringer", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_Onlyone = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.MessageOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         64009, | ||||||
|  | 	Name:          "gogoproto.onlyone", | ||||||
|  | 	Tag:           "varint,64009,opt,name=onlyone", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_Equal = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.MessageOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         64013, | ||||||
|  | 	Name:          "gogoproto.equal", | ||||||
|  | 	Tag:           "varint,64013,opt,name=equal", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_Description = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.MessageOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         64014, | ||||||
|  | 	Name:          "gogoproto.description", | ||||||
|  | 	Tag:           "varint,64014,opt,name=description", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_Testgen = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.MessageOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         64015, | ||||||
|  | 	Name:          "gogoproto.testgen", | ||||||
|  | 	Tag:           "varint,64015,opt,name=testgen", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_Benchgen = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.MessageOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         64016, | ||||||
|  | 	Name:          "gogoproto.benchgen", | ||||||
|  | 	Tag:           "varint,64016,opt,name=benchgen", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_Marshaler = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.MessageOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         64017, | ||||||
|  | 	Name:          "gogoproto.marshaler", | ||||||
|  | 	Tag:           "varint,64017,opt,name=marshaler", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_Unmarshaler = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.MessageOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         64018, | ||||||
|  | 	Name:          "gogoproto.unmarshaler", | ||||||
|  | 	Tag:           "varint,64018,opt,name=unmarshaler", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_Sizer = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.MessageOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         64020, | ||||||
|  | 	Name:          "gogoproto.sizer", | ||||||
|  | 	Tag:           "varint,64020,opt,name=sizer", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_UnsafeMarshaler = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.MessageOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         64023, | ||||||
|  | 	Name:          "gogoproto.unsafe_marshaler", | ||||||
|  | 	Tag:           "varint,64023,opt,name=unsafe_marshaler", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_UnsafeUnmarshaler = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.MessageOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         64024, | ||||||
|  | 	Name:          "gogoproto.unsafe_unmarshaler", | ||||||
|  | 	Tag:           "varint,64024,opt,name=unsafe_unmarshaler", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_GoprotoExtensionsMap = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.MessageOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         64025, | ||||||
|  | 	Name:          "gogoproto.goproto_extensions_map", | ||||||
|  | 	Tag:           "varint,64025,opt,name=goproto_extensions_map", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_GoprotoUnrecognized = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.MessageOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         64026, | ||||||
|  | 	Name:          "gogoproto.goproto_unrecognized", | ||||||
|  | 	Tag:           "varint,64026,opt,name=goproto_unrecognized", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_Nullable = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.FieldOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         65001, | ||||||
|  | 	Name:          "gogoproto.nullable", | ||||||
|  | 	Tag:           "varint,65001,opt,name=nullable", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_Embed = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.FieldOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         65002, | ||||||
|  | 	Name:          "gogoproto.embed", | ||||||
|  | 	Tag:           "varint,65002,opt,name=embed", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_Customtype = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.FieldOptions)(nil), | ||||||
|  | 	ExtensionType: (*string)(nil), | ||||||
|  | 	Field:         65003, | ||||||
|  | 	Name:          "gogoproto.customtype", | ||||||
|  | 	Tag:           "bytes,65003,opt,name=customtype", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_Customname = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.FieldOptions)(nil), | ||||||
|  | 	ExtensionType: (*string)(nil), | ||||||
|  | 	Field:         65004, | ||||||
|  | 	Name:          "gogoproto.customname", | ||||||
|  | 	Tag:           "bytes,65004,opt,name=customname", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_Jsontag = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.FieldOptions)(nil), | ||||||
|  | 	ExtensionType: (*string)(nil), | ||||||
|  | 	Field:         65005, | ||||||
|  | 	Name:          "gogoproto.jsontag", | ||||||
|  | 	Tag:           "bytes,65005,opt,name=jsontag", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_Moretags = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.FieldOptions)(nil), | ||||||
|  | 	ExtensionType: (*string)(nil), | ||||||
|  | 	Field:         65006, | ||||||
|  | 	Name:          "gogoproto.moretags", | ||||||
|  | 	Tag:           "bytes,65006,opt,name=moretags", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_Casttype = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.FieldOptions)(nil), | ||||||
|  | 	ExtensionType: (*string)(nil), | ||||||
|  | 	Field:         65007, | ||||||
|  | 	Name:          "gogoproto.casttype", | ||||||
|  | 	Tag:           "bytes,65007,opt,name=casttype", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_Castkey = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.FieldOptions)(nil), | ||||||
|  | 	ExtensionType: (*string)(nil), | ||||||
|  | 	Field:         65008, | ||||||
|  | 	Name:          "gogoproto.castkey", | ||||||
|  | 	Tag:           "bytes,65008,opt,name=castkey", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_Castvalue = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.FieldOptions)(nil), | ||||||
|  | 	ExtensionType: (*string)(nil), | ||||||
|  | 	Field:         65009, | ||||||
|  | 	Name:          "gogoproto.castvalue", | ||||||
|  | 	Tag:           "bytes,65009,opt,name=castvalue", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func init() { | ||||||
|  | 	proto.RegisterExtension(E_GoprotoEnumPrefix) | ||||||
|  | 	proto.RegisterExtension(E_GoprotoEnumStringer) | ||||||
|  | 	proto.RegisterExtension(E_EnumStringer) | ||||||
|  | 	proto.RegisterExtension(E_GoprotoGettersAll) | ||||||
|  | 	proto.RegisterExtension(E_GoprotoEnumPrefixAll) | ||||||
|  | 	proto.RegisterExtension(E_GoprotoStringerAll) | ||||||
|  | 	proto.RegisterExtension(E_VerboseEqualAll) | ||||||
|  | 	proto.RegisterExtension(E_FaceAll) | ||||||
|  | 	proto.RegisterExtension(E_GostringAll) | ||||||
|  | 	proto.RegisterExtension(E_PopulateAll) | ||||||
|  | 	proto.RegisterExtension(E_StringerAll) | ||||||
|  | 	proto.RegisterExtension(E_OnlyoneAll) | ||||||
|  | 	proto.RegisterExtension(E_EqualAll) | ||||||
|  | 	proto.RegisterExtension(E_DescriptionAll) | ||||||
|  | 	proto.RegisterExtension(E_TestgenAll) | ||||||
|  | 	proto.RegisterExtension(E_BenchgenAll) | ||||||
|  | 	proto.RegisterExtension(E_MarshalerAll) | ||||||
|  | 	proto.RegisterExtension(E_UnmarshalerAll) | ||||||
|  | 	proto.RegisterExtension(E_SizerAll) | ||||||
|  | 	proto.RegisterExtension(E_GoprotoEnumStringerAll) | ||||||
|  | 	proto.RegisterExtension(E_EnumStringerAll) | ||||||
|  | 	proto.RegisterExtension(E_UnsafeMarshalerAll) | ||||||
|  | 	proto.RegisterExtension(E_UnsafeUnmarshalerAll) | ||||||
|  | 	proto.RegisterExtension(E_GoprotoExtensionsMapAll) | ||||||
|  | 	proto.RegisterExtension(E_GoprotoUnrecognizedAll) | ||||||
|  | 	proto.RegisterExtension(E_GogoprotoImport) | ||||||
|  | 	proto.RegisterExtension(E_GoprotoGetters) | ||||||
|  | 	proto.RegisterExtension(E_GoprotoStringer) | ||||||
|  | 	proto.RegisterExtension(E_VerboseEqual) | ||||||
|  | 	proto.RegisterExtension(E_Face) | ||||||
|  | 	proto.RegisterExtension(E_Gostring) | ||||||
|  | 	proto.RegisterExtension(E_Populate) | ||||||
|  | 	proto.RegisterExtension(E_Stringer) | ||||||
|  | 	proto.RegisterExtension(E_Onlyone) | ||||||
|  | 	proto.RegisterExtension(E_Equal) | ||||||
|  | 	proto.RegisterExtension(E_Description) | ||||||
|  | 	proto.RegisterExtension(E_Testgen) | ||||||
|  | 	proto.RegisterExtension(E_Benchgen) | ||||||
|  | 	proto.RegisterExtension(E_Marshaler) | ||||||
|  | 	proto.RegisterExtension(E_Unmarshaler) | ||||||
|  | 	proto.RegisterExtension(E_Sizer) | ||||||
|  | 	proto.RegisterExtension(E_UnsafeMarshaler) | ||||||
|  | 	proto.RegisterExtension(E_UnsafeUnmarshaler) | ||||||
|  | 	proto.RegisterExtension(E_GoprotoExtensionsMap) | ||||||
|  | 	proto.RegisterExtension(E_GoprotoUnrecognized) | ||||||
|  | 	proto.RegisterExtension(E_Nullable) | ||||||
|  | 	proto.RegisterExtension(E_Embed) | ||||||
|  | 	proto.RegisterExtension(E_Customtype) | ||||||
|  | 	proto.RegisterExtension(E_Customname) | ||||||
|  | 	proto.RegisterExtension(E_Jsontag) | ||||||
|  | 	proto.RegisterExtension(E_Moretags) | ||||||
|  | 	proto.RegisterExtension(E_Casttype) | ||||||
|  | 	proto.RegisterExtension(E_Castkey) | ||||||
|  | 	proto.RegisterExtension(E_Castvalue) | ||||||
|  | } | ||||||
							
								
								
									
										45
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/gogoproto/gogo.pb.golden
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/gogoproto/gogo.pb.golden
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,45 @@ | |||||||
|  | // Code generated by protoc-gen-go. | ||||||
|  | // source: gogo.proto | ||||||
|  | // DO NOT EDIT! | ||||||
|  |  | ||||||
|  | package gogoproto | ||||||
|  |  | ||||||
|  | import proto "github.com/gogo/protobuf/proto" | ||||||
|  | import json "encoding/json" | ||||||
|  | import math "math" | ||||||
|  | import google_protobuf "github.com/gogo/protobuf/protoc-gen-gogo/descriptor" | ||||||
|  |  | ||||||
|  | // Reference proto, json, and math imports to suppress error if they are not otherwise used. | ||||||
|  | var _ = proto.Marshal | ||||||
|  | var _ = &json.SyntaxError{} | ||||||
|  | var _ = math.Inf | ||||||
|  |  | ||||||
|  | var E_Nullable = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.FieldOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         51235, | ||||||
|  | 	Name:          "gogoproto.nullable", | ||||||
|  | 	Tag:           "varint,51235,opt,name=nullable", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_Embed = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.FieldOptions)(nil), | ||||||
|  | 	ExtensionType: (*bool)(nil), | ||||||
|  | 	Field:         51236, | ||||||
|  | 	Name:          "gogoproto.embed", | ||||||
|  | 	Tag:           "varint,51236,opt,name=embed", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var E_Customtype = &proto.ExtensionDesc{ | ||||||
|  | 	ExtendedType:  (*google_protobuf.FieldOptions)(nil), | ||||||
|  | 	ExtensionType: (*string)(nil), | ||||||
|  | 	Field:         51237, | ||||||
|  | 	Name:          "gogoproto.customtype", | ||||||
|  | 	Tag:           "bytes,51237,opt,name=customtype", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func init() { | ||||||
|  | 	proto.RegisterExtension(E_Nullable) | ||||||
|  | 	proto.RegisterExtension(E_Embed) | ||||||
|  | 	proto.RegisterExtension(E_Customtype) | ||||||
|  | } | ||||||
							
								
								
									
										109
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/gogoproto/gogo.proto
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										109
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/gogoproto/gogo.proto
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,109 @@ | |||||||
|  | // Copyright (c) 2013, Vastech SA (PTY) LTD. All rights reserved. | ||||||
|  | // http://github.com/gogo/protobuf/gogoproto | ||||||
|  | // | ||||||
|  | // 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. | ||||||
|  | // | ||||||
|  | // 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. | ||||||
|  |  | ||||||
|  | syntax = "proto2"; | ||||||
|  | package gogoproto; | ||||||
|  |  | ||||||
|  | import "google/protobuf/descriptor.proto"; | ||||||
|  |  | ||||||
|  | option java_package = "com.google.protobuf"; | ||||||
|  | option java_outer_classname = "GoGoProtos"; | ||||||
|  |  | ||||||
|  | extend google.protobuf.EnumOptions { | ||||||
|  | 	optional bool goproto_enum_prefix = 62001; | ||||||
|  | 	optional bool goproto_enum_stringer = 62021; | ||||||
|  | 	optional bool enum_stringer = 62022; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | extend google.protobuf.FileOptions { | ||||||
|  | 	optional bool goproto_getters_all = 63001; | ||||||
|  | 	optional bool goproto_enum_prefix_all = 63002; | ||||||
|  | 	optional bool goproto_stringer_all = 63003; | ||||||
|  | 	optional bool verbose_equal_all = 63004; | ||||||
|  | 	optional bool face_all = 63005; | ||||||
|  | 	optional bool gostring_all = 63006; | ||||||
|  | 	optional bool populate_all = 63007; | ||||||
|  | 	optional bool stringer_all = 63008; | ||||||
|  | 	optional bool onlyone_all = 63009; | ||||||
|  |  | ||||||
|  | 	optional bool equal_all = 63013; | ||||||
|  | 	optional bool description_all = 63014; | ||||||
|  | 	optional bool testgen_all = 63015; | ||||||
|  | 	optional bool benchgen_all = 63016; | ||||||
|  | 	optional bool marshaler_all = 63017; | ||||||
|  | 	optional bool unmarshaler_all = 63018; | ||||||
|  |  | ||||||
|  | 	optional bool sizer_all = 63020; | ||||||
|  |  | ||||||
|  | 	optional bool goproto_enum_stringer_all = 63021; | ||||||
|  | 	optional bool enum_stringer_all = 63022; | ||||||
|  |  | ||||||
|  | 	optional bool unsafe_marshaler_all = 63023; | ||||||
|  | 	optional bool unsafe_unmarshaler_all = 63024; | ||||||
|  |  | ||||||
|  | 	optional bool goproto_extensions_map_all = 63025; | ||||||
|  | 	optional bool goproto_unrecognized_all = 63026; | ||||||
|  | 	optional bool gogoproto_import = 63027; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | extend google.protobuf.MessageOptions { | ||||||
|  | 	optional bool goproto_getters = 64001; | ||||||
|  | 	optional bool goproto_stringer = 64003; | ||||||
|  | 	optional bool verbose_equal = 64004; | ||||||
|  | 	optional bool face = 64005; | ||||||
|  | 	optional bool gostring = 64006; | ||||||
|  | 	optional bool populate = 64007; | ||||||
|  |   	optional bool stringer = 67008; | ||||||
|  | 	optional bool onlyone = 64009; | ||||||
|  |  | ||||||
|  | 	optional bool equal = 64013; | ||||||
|  | 	optional bool description = 64014; | ||||||
|  | 	optional bool testgen = 64015; | ||||||
|  | 	optional bool benchgen = 64016; | ||||||
|  | 	optional bool marshaler = 64017; | ||||||
|  | 	optional bool unmarshaler = 64018; | ||||||
|  |  | ||||||
|  | 	optional bool sizer = 64020; | ||||||
|  |  | ||||||
|  | 	optional bool unsafe_marshaler = 64023; | ||||||
|  | 	optional bool unsafe_unmarshaler = 64024; | ||||||
|  |  | ||||||
|  | 	optional bool goproto_extensions_map = 64025; | ||||||
|  | 	optional bool goproto_unrecognized = 64026; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | extend google.protobuf.FieldOptions { | ||||||
|  |   optional bool nullable = 65001; | ||||||
|  |   optional bool embed = 65002; | ||||||
|  |   optional string customtype = 65003; | ||||||
|  |   optional string customname = 65004; | ||||||
|  |   optional string jsontag = 65005; | ||||||
|  |   optional string moretags = 65006; | ||||||
|  |   optional string casttype = 65007; | ||||||
|  |   optional string castkey = 65008; | ||||||
|  |   optional string castvalue = 65009; | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										249
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/gogoproto/helper.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										249
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/gogoproto/helper.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,249 @@ | |||||||
|  | // Copyright (c) 2013, Vastech SA (PTY) LTD. All rights reserved. | ||||||
|  | // http://github.com/gogo/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. | ||||||
|  | // | ||||||
|  | // 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 gogoproto | ||||||
|  |  | ||||||
|  | import google_protobuf "github.com/gogo/protobuf/protoc-gen-gogo/descriptor" | ||||||
|  | import proto "github.com/gogo/protobuf/proto" | ||||||
|  |  | ||||||
|  | func IsEmbed(field *google_protobuf.FieldDescriptorProto) bool { | ||||||
|  | 	return proto.GetBoolExtension(field.Options, E_Embed, false) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func IsNullable(field *google_protobuf.FieldDescriptorProto) bool { | ||||||
|  | 	return proto.GetBoolExtension(field.Options, E_Nullable, true) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func IsCustomType(field *google_protobuf.FieldDescriptorProto) bool { | ||||||
|  | 	typ := GetCustomType(field) | ||||||
|  | 	if len(typ) > 0 { | ||||||
|  | 		return true | ||||||
|  | 	} | ||||||
|  | 	return false | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func IsCastType(field *google_protobuf.FieldDescriptorProto) bool { | ||||||
|  | 	typ := GetCastType(field) | ||||||
|  | 	if len(typ) > 0 { | ||||||
|  | 		return true | ||||||
|  | 	} | ||||||
|  | 	return false | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func IsCastKey(field *google_protobuf.FieldDescriptorProto) bool { | ||||||
|  | 	typ := GetCastKey(field) | ||||||
|  | 	if len(typ) > 0 { | ||||||
|  | 		return true | ||||||
|  | 	} | ||||||
|  | 	return false | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func IsCastValue(field *google_protobuf.FieldDescriptorProto) bool { | ||||||
|  | 	typ := GetCastValue(field) | ||||||
|  | 	if len(typ) > 0 { | ||||||
|  | 		return true | ||||||
|  | 	} | ||||||
|  | 	return false | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func GetCustomType(field *google_protobuf.FieldDescriptorProto) string { | ||||||
|  | 	if field.Options != nil { | ||||||
|  | 		v, err := proto.GetExtension(field.Options, E_Customtype) | ||||||
|  | 		if err == nil && v.(*string) != nil { | ||||||
|  | 			return *(v.(*string)) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return "" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func GetCastType(field *google_protobuf.FieldDescriptorProto) string { | ||||||
|  | 	if field.Options != nil { | ||||||
|  | 		v, err := proto.GetExtension(field.Options, E_Casttype) | ||||||
|  | 		if err == nil && v.(*string) != nil { | ||||||
|  | 			return *(v.(*string)) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return "" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func GetCastKey(field *google_protobuf.FieldDescriptorProto) string { | ||||||
|  | 	if field.Options != nil { | ||||||
|  | 		v, err := proto.GetExtension(field.Options, E_Castkey) | ||||||
|  | 		if err == nil && v.(*string) != nil { | ||||||
|  | 			return *(v.(*string)) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return "" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func GetCastValue(field *google_protobuf.FieldDescriptorProto) string { | ||||||
|  | 	if field.Options != nil { | ||||||
|  | 		v, err := proto.GetExtension(field.Options, E_Castvalue) | ||||||
|  | 		if err == nil && v.(*string) != nil { | ||||||
|  | 			return *(v.(*string)) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return "" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func IsCustomName(field *google_protobuf.FieldDescriptorProto) bool { | ||||||
|  | 	name := GetCustomName(field) | ||||||
|  | 	if len(name) > 0 { | ||||||
|  | 		return true | ||||||
|  | 	} | ||||||
|  | 	return false | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func GetCustomName(field *google_protobuf.FieldDescriptorProto) string { | ||||||
|  | 	if field.Options != nil { | ||||||
|  | 		v, err := proto.GetExtension(field.Options, E_Customname) | ||||||
|  | 		if err == nil && v.(*string) != nil { | ||||||
|  | 			return *(v.(*string)) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return "" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func GetJsonTag(field *google_protobuf.FieldDescriptorProto) *string { | ||||||
|  | 	if field.Options != nil { | ||||||
|  | 		v, err := proto.GetExtension(field.Options, E_Jsontag) | ||||||
|  | 		if err == nil && v.(*string) != nil { | ||||||
|  | 			return (v.(*string)) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func GetMoreTags(field *google_protobuf.FieldDescriptorProto) *string { | ||||||
|  | 	if field.Options != nil { | ||||||
|  | 		v, err := proto.GetExtension(field.Options, E_Moretags) | ||||||
|  | 		if err == nil && v.(*string) != nil { | ||||||
|  | 			return (v.(*string)) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type EnableFunc func(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool | ||||||
|  |  | ||||||
|  | func EnabledGoEnumPrefix(file *google_protobuf.FileDescriptorProto, enum *google_protobuf.EnumDescriptorProto) bool { | ||||||
|  | 	return proto.GetBoolExtension(enum.Options, E_GoprotoEnumPrefix, proto.GetBoolExtension(file.Options, E_GoprotoEnumPrefixAll, true)) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func EnabledGoStringer(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { | ||||||
|  | 	return proto.GetBoolExtension(message.Options, E_GoprotoStringer, proto.GetBoolExtension(file.Options, E_GoprotoStringerAll, true)) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func HasGoGetters(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { | ||||||
|  | 	return proto.GetBoolExtension(message.Options, E_GoprotoGetters, proto.GetBoolExtension(file.Options, E_GoprotoGettersAll, true)) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func IsUnion(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { | ||||||
|  | 	return proto.GetBoolExtension(message.Options, E_Onlyone, proto.GetBoolExtension(file.Options, E_OnlyoneAll, false)) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func HasGoString(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { | ||||||
|  | 	return proto.GetBoolExtension(message.Options, E_Gostring, proto.GetBoolExtension(file.Options, E_GostringAll, false)) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func HasEqual(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { | ||||||
|  | 	return proto.GetBoolExtension(message.Options, E_Equal, proto.GetBoolExtension(file.Options, E_EqualAll, false)) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func HasVerboseEqual(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { | ||||||
|  | 	return proto.GetBoolExtension(message.Options, E_VerboseEqual, proto.GetBoolExtension(file.Options, E_VerboseEqualAll, false)) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func IsStringer(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { | ||||||
|  | 	return proto.GetBoolExtension(message.Options, E_Stringer, proto.GetBoolExtension(file.Options, E_StringerAll, false)) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func IsFace(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { | ||||||
|  | 	return proto.GetBoolExtension(message.Options, E_Face, proto.GetBoolExtension(file.Options, E_FaceAll, false)) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func HasDescription(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { | ||||||
|  | 	return proto.GetBoolExtension(message.Options, E_Description, proto.GetBoolExtension(file.Options, E_DescriptionAll, false)) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func HasPopulate(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { | ||||||
|  | 	return proto.GetBoolExtension(message.Options, E_Populate, proto.GetBoolExtension(file.Options, E_PopulateAll, false)) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func HasTestGen(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { | ||||||
|  | 	return proto.GetBoolExtension(message.Options, E_Testgen, proto.GetBoolExtension(file.Options, E_TestgenAll, false)) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func HasBenchGen(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { | ||||||
|  | 	return proto.GetBoolExtension(message.Options, E_Benchgen, proto.GetBoolExtension(file.Options, E_BenchgenAll, false)) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func IsMarshaler(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { | ||||||
|  | 	return proto.GetBoolExtension(message.Options, E_Marshaler, proto.GetBoolExtension(file.Options, E_MarshalerAll, false)) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func IsUnmarshaler(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { | ||||||
|  | 	return proto.GetBoolExtension(message.Options, E_Unmarshaler, proto.GetBoolExtension(file.Options, E_UnmarshalerAll, false)) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func IsSizer(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { | ||||||
|  | 	return proto.GetBoolExtension(message.Options, E_Sizer, proto.GetBoolExtension(file.Options, E_SizerAll, false)) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func IsGoEnumStringer(file *google_protobuf.FileDescriptorProto, enum *google_protobuf.EnumDescriptorProto) bool { | ||||||
|  | 	return proto.GetBoolExtension(enum.Options, E_GoprotoEnumStringer, proto.GetBoolExtension(file.Options, E_GoprotoEnumStringerAll, true)) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func IsEnumStringer(file *google_protobuf.FileDescriptorProto, enum *google_protobuf.EnumDescriptorProto) bool { | ||||||
|  | 	return proto.GetBoolExtension(enum.Options, E_EnumStringer, proto.GetBoolExtension(file.Options, E_EnumStringerAll, false)) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func IsUnsafeMarshaler(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { | ||||||
|  | 	return proto.GetBoolExtension(message.Options, E_UnsafeMarshaler, proto.GetBoolExtension(file.Options, E_UnsafeMarshalerAll, false)) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func IsUnsafeUnmarshaler(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { | ||||||
|  | 	return proto.GetBoolExtension(message.Options, E_UnsafeUnmarshaler, proto.GetBoolExtension(file.Options, E_UnsafeUnmarshalerAll, false)) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func HasExtensionsMap(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { | ||||||
|  | 	return proto.GetBoolExtension(message.Options, E_GoprotoExtensionsMap, proto.GetBoolExtension(file.Options, E_GoprotoExtensionsMapAll, true)) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func HasUnrecognized(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool { | ||||||
|  | 	if IsProto3(file) { | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | 	return proto.GetBoolExtension(message.Options, E_GoprotoUnrecognized, proto.GetBoolExtension(file.Options, E_GoprotoUnrecognizedAll, true)) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func IsProto3(file *google_protobuf.FileDescriptorProto) bool { | ||||||
|  | 	return file.GetSyntax() == "proto3" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func ImportsGoGoProto(file *google_protobuf.FileDescriptorProto) bool { | ||||||
|  | 	return proto.GetBoolExtension(file.Options, E_GogoprotoImport, true) | ||||||
|  | } | ||||||
							
								
								
									
										131
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/defaultcheck/defaultcheck.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										131
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/defaultcheck/defaultcheck.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,131 @@ | |||||||
|  | // Copyright (c) 2013, Vastech SA (PTY) LTD. All rights reserved. | ||||||
|  | // http://github.com/gogo/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. | ||||||
|  | // | ||||||
|  | // 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. | ||||||
|  |  | ||||||
|  | /* | ||||||
|  | The defaultcheck plugin is used to check whether nullable is not used incorrectly. | ||||||
|  | For instance: | ||||||
|  | An error is caused if a nullable field: | ||||||
|  |   - has a default value, | ||||||
|  |   - is an enum which does not start at zero, | ||||||
|  |   - is used for an extension, | ||||||
|  |   - is used for a native proto3 type, | ||||||
|  |   - is used for a repeated native type. | ||||||
|  |  | ||||||
|  | An error is also caused if a field with a default value is used in a message: | ||||||
|  |   - which is a face. | ||||||
|  |   - without getters. | ||||||
|  |  | ||||||
|  | It is enabled by the following extensions: | ||||||
|  |  | ||||||
|  |   - nullable | ||||||
|  |  | ||||||
|  | For incorrect usage of nullable with tests see: | ||||||
|  |  | ||||||
|  |   github.com/gogo/protobuf/test/nullableconflict | ||||||
|  |  | ||||||
|  | */ | ||||||
|  | package defaultcheck | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 	"github.com/gogo/protobuf/gogoproto" | ||||||
|  | 	"github.com/gogo/protobuf/protoc-gen-gogo/generator" | ||||||
|  | 	"os" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type plugin struct { | ||||||
|  | 	*generator.Generator | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func NewPlugin() *plugin { | ||||||
|  | 	return &plugin{} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *plugin) Name() string { | ||||||
|  | 	return "defaultcheck" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *plugin) Init(g *generator.Generator) { | ||||||
|  | 	p.Generator = g | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *plugin) Generate(file *generator.FileDescriptor) { | ||||||
|  | 	proto3 := gogoproto.IsProto3(file.FileDescriptorProto) | ||||||
|  | 	for _, msg := range file.Messages() { | ||||||
|  | 		getters := gogoproto.HasGoGetters(file.FileDescriptorProto, msg.DescriptorProto) | ||||||
|  | 		face := gogoproto.IsFace(file.FileDescriptorProto, msg.DescriptorProto) | ||||||
|  | 		for _, field := range msg.GetField() { | ||||||
|  | 			if len(field.GetDefaultValue()) > 0 { | ||||||
|  | 				if !getters { | ||||||
|  | 					fmt.Fprintf(os.Stderr, "ERROR: field %v.%v cannot have a default value and not have a getter method", generator.CamelCase(*msg.Name), generator.CamelCase(*field.Name)) | ||||||
|  | 					os.Exit(1) | ||||||
|  | 				} | ||||||
|  | 				if face { | ||||||
|  | 					fmt.Fprintf(os.Stderr, "ERROR: field %v.%v cannot have a default value be in a face", generator.CamelCase(*msg.Name), generator.CamelCase(*field.Name)) | ||||||
|  | 					os.Exit(1) | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			if gogoproto.IsNullable(field) { | ||||||
|  | 				continue | ||||||
|  | 			} | ||||||
|  | 			if len(field.GetDefaultValue()) > 0 { | ||||||
|  | 				fmt.Fprintf(os.Stderr, "ERROR: field %v.%v cannot be non-nullable and have a default value", generator.CamelCase(*msg.Name), generator.CamelCase(*field.Name)) | ||||||
|  | 				os.Exit(1) | ||||||
|  | 			} | ||||||
|  | 			if !field.IsMessage() && !gogoproto.IsCustomType(field) { | ||||||
|  | 				if field.IsRepeated() { | ||||||
|  | 					fmt.Fprintf(os.Stderr, "WARNING: field %v.%v is a repeated non-nullable native type, nullable=false has no effect\n", generator.CamelCase(*msg.Name), generator.CamelCase(*field.Name)) | ||||||
|  | 				} else if proto3 { | ||||||
|  | 					fmt.Fprintf(os.Stderr, "ERROR: field %v.%v is a native type and in proto3 syntax with nullable=false there exists conflicting implementations when encoding zero values", generator.CamelCase(*msg.Name), generator.CamelCase(*field.Name)) | ||||||
|  | 					os.Exit(1) | ||||||
|  | 				} | ||||||
|  | 				if field.IsBytes() { | ||||||
|  | 					fmt.Fprintf(os.Stderr, "WARNING: field %v.%v is a non-nullable bytes type, nullable=false has no effect\n", generator.CamelCase(*msg.Name), generator.CamelCase(*field.Name)) | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			if !field.IsEnum() { | ||||||
|  | 				continue | ||||||
|  | 			} | ||||||
|  | 			enum := p.ObjectNamed(field.GetTypeName()).(*generator.EnumDescriptor) | ||||||
|  | 			if len(enum.Value) == 0 || enum.Value[0].GetNumber() != 0 { | ||||||
|  | 				fmt.Fprintf(os.Stderr, "ERROR: field %v.%v cannot be non-nullable and be an enum type %v which does not start with zero", generator.CamelCase(*msg.Name), generator.CamelCase(*field.Name), enum.GetName()) | ||||||
|  | 				os.Exit(1) | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	for _, e := range file.GetExtension() { | ||||||
|  | 		if !gogoproto.IsNullable(e) { | ||||||
|  | 			fmt.Fprintf(os.Stderr, "ERROR: extended field %v cannot be nullable %v", generator.CamelCase(e.GetName()), generator.CamelCase(*e.Name)) | ||||||
|  | 			os.Exit(1) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *plugin) GenerateImports(*generator.FileDescriptor) {} | ||||||
|  |  | ||||||
|  | func init() { | ||||||
|  | 	generator.RegisterPlugin(NewPlugin()) | ||||||
|  | } | ||||||
							
								
								
									
										148
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/description/description.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										148
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/description/description.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,148 @@ | |||||||
|  | // Copyright (c) 2013, Vastech SA (PTY) LTD. All rights reserved. | ||||||
|  | // http://github.com/gogo/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. | ||||||
|  | // | ||||||
|  | // 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. | ||||||
|  |  | ||||||
|  | /* | ||||||
|  | The description (experimental) plugin generates a Description method for each message. | ||||||
|  | The Description method returns a populated google_protobuf.FileDescriptorSet struct. | ||||||
|  | This contains the description of the files used to generate this message. | ||||||
|  |  | ||||||
|  | It is enabled by the following extensions: | ||||||
|  |  | ||||||
|  |   - description | ||||||
|  |   - description_all | ||||||
|  |  | ||||||
|  | The description plugin also generates a test given it is enabled using one of the following extensions: | ||||||
|  |  | ||||||
|  |   - testgen | ||||||
|  |   - testgen_all | ||||||
|  |  | ||||||
|  | Let us look at: | ||||||
|  |  | ||||||
|  |   github.com/gogo/protobuf/test/example/example.proto | ||||||
|  |  | ||||||
|  | Btw all the output can be seen at: | ||||||
|  |  | ||||||
|  |   github.com/gogo/protobuf/test/example/* | ||||||
|  |  | ||||||
|  | The following message: | ||||||
|  |  | ||||||
|  |   message B { | ||||||
|  | 	option (gogoproto.description) = true; | ||||||
|  | 	optional A A = 1 [(gogoproto.nullable) = false, (gogoproto.embed) = true]; | ||||||
|  | 	repeated bytes G = 2 [(gogoproto.customtype) = "github.com/gogo/protobuf/test/custom.Uint128", (gogoproto.nullable) = false]; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  | given to the description plugin, will generate the following code: | ||||||
|  |  | ||||||
|  |   func (this *B) Description() (desc *google_protobuf.FileDescriptorSet) { | ||||||
|  | 	return ExampleDescription() | ||||||
|  |   } | ||||||
|  |  | ||||||
|  | and the following test code: | ||||||
|  |  | ||||||
|  |   func TestDescription(t *testing9.T) { | ||||||
|  | 	ExampleDescription() | ||||||
|  |   } | ||||||
|  |  | ||||||
|  | The hope is to use this struct in some way instead of reflect. | ||||||
|  | This package is subject to change, since a use has not been figured out yet. | ||||||
|  |  | ||||||
|  | */ | ||||||
|  | package description | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 	"github.com/gogo/protobuf/gogoproto" | ||||||
|  | 	descriptor "github.com/gogo/protobuf/protoc-gen-gogo/descriptor" | ||||||
|  | 	"github.com/gogo/protobuf/protoc-gen-gogo/generator" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type plugin struct { | ||||||
|  | 	*generator.Generator | ||||||
|  | 	used bool | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func NewPlugin() *plugin { | ||||||
|  | 	return &plugin{} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *plugin) Name() string { | ||||||
|  | 	return "description" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *plugin) Init(g *generator.Generator) { | ||||||
|  | 	p.Generator = g | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *plugin) Generate(file *generator.FileDescriptor) { | ||||||
|  | 	p.used = false | ||||||
|  | 	localName := generator.FileName(file) | ||||||
|  | 	for _, message := range file.Messages() { | ||||||
|  | 		if !gogoproto.HasDescription(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		if message.DescriptorProto.GetOptions().GetMapEntry() { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		p.used = true | ||||||
|  | 		ccTypeName := generator.CamelCaseSlice(message.TypeName()) | ||||||
|  | 		p.P(`func (this *`, ccTypeName, `) Description() (desc *descriptor.FileDescriptorSet) {`) | ||||||
|  | 		p.In() | ||||||
|  | 		p.P(`return `, localName, `Description()`) | ||||||
|  | 		p.Out() | ||||||
|  | 		p.P(`}`) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if p.used { | ||||||
|  |  | ||||||
|  | 		p.P(`func `, localName, `Description() (desc *descriptor.FileDescriptorSet) {`) | ||||||
|  | 		p.In() | ||||||
|  | 		//Don't generate SourceCodeInfo, since it will create too much code. | ||||||
|  |  | ||||||
|  | 		ss := make([]*descriptor.SourceCodeInfo, 0) | ||||||
|  | 		for _, f := range p.Generator.AllFiles().GetFile() { | ||||||
|  | 			ss = append(ss, f.SourceCodeInfo) | ||||||
|  | 			f.SourceCodeInfo = nil | ||||||
|  | 		} | ||||||
|  | 		s := fmt.Sprintf("%#v", p.Generator.AllFiles()) | ||||||
|  | 		for i, f := range p.Generator.AllFiles().GetFile() { | ||||||
|  | 			f.SourceCodeInfo = ss[i] | ||||||
|  | 		} | ||||||
|  | 		p.P(`return `, s) | ||||||
|  | 		p.Out() | ||||||
|  | 		p.P(`}`) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (this *plugin) GenerateImports(file *generator.FileDescriptor) { | ||||||
|  | 	if this.used { | ||||||
|  | 		this.P(`import "github.com/gogo/protobuf/protoc-gen-gogo/descriptor"`) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func init() { | ||||||
|  | 	generator.RegisterPlugin(NewPlugin()) | ||||||
|  | } | ||||||
							
								
								
									
										71
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/description/descriptiontest.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/description/descriptiontest.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,71 @@ | |||||||
|  | // Copyright (c) 2013, Vastech SA (PTY) LTD. All rights reserved. | ||||||
|  | // http://github.com/gogo/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. | ||||||
|  | // | ||||||
|  | // 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 description | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"github.com/gogo/protobuf/gogoproto" | ||||||
|  | 	"github.com/gogo/protobuf/plugin/testgen" | ||||||
|  | 	"github.com/gogo/protobuf/protoc-gen-gogo/generator" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type test struct { | ||||||
|  | 	*generator.Generator | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func NewTest(g *generator.Generator) testgen.TestPlugin { | ||||||
|  | 	return &test{g} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *test) Generate(imports generator.PluginImports, file *generator.FileDescriptor) bool { | ||||||
|  | 	used := false | ||||||
|  | 	testingPkg := imports.NewImport("testing") | ||||||
|  | 	for _, message := range file.Messages() { | ||||||
|  | 		if !gogoproto.HasDescription(file.FileDescriptorProto, message.DescriptorProto) || | ||||||
|  | 			!gogoproto.HasTestGen(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		if message.DescriptorProto.GetOptions().GetMapEntry() { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		used = true | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if used { | ||||||
|  | 		localName := generator.FileName(file) | ||||||
|  | 		p.P(`func Test`, localName, `Description(t *`, testingPkg.Use(), `.T) {`) | ||||||
|  | 		p.In() | ||||||
|  | 		p.P(localName, `Description()`) | ||||||
|  | 		p.Out() | ||||||
|  | 		p.P(`}`) | ||||||
|  |  | ||||||
|  | 	} | ||||||
|  | 	return used | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func init() { | ||||||
|  | 	testgen.RegisterTestPlugin(NewTest) | ||||||
|  | } | ||||||
							
								
								
									
										196
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/embedcheck/embedcheck.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										196
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/embedcheck/embedcheck.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,196 @@ | |||||||
|  | // Copyright (c) 2013, Vastech SA (PTY) LTD. All rights reserved. | ||||||
|  | // http://github.com/gogo/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. | ||||||
|  | // | ||||||
|  | // 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. | ||||||
|  |  | ||||||
|  | /* | ||||||
|  | The embedcheck plugin is used to check whether embed is not used incorrectly. | ||||||
|  | For instance: | ||||||
|  | An embedded message has a generated string method, but the is a member of a message which does not. | ||||||
|  | This causes a warning. | ||||||
|  | An error is caused by a namespace conflict. | ||||||
|  |  | ||||||
|  | It is enabled by the following extensions: | ||||||
|  |  | ||||||
|  |   - embed | ||||||
|  |   - embed_all | ||||||
|  |  | ||||||
|  | For incorrect usage of embed with tests see: | ||||||
|  |  | ||||||
|  |   github.com/gogo/protobuf/test/embedconflict | ||||||
|  |  | ||||||
|  | */ | ||||||
|  | package embedcheck | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 	"github.com/gogo/protobuf/gogoproto" | ||||||
|  | 	"github.com/gogo/protobuf/protoc-gen-gogo/generator" | ||||||
|  | 	"os" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type plugin struct { | ||||||
|  | 	*generator.Generator | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func NewPlugin() *plugin { | ||||||
|  | 	return &plugin{} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *plugin) Name() string { | ||||||
|  | 	return "embedcheck" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *plugin) Init(g *generator.Generator) { | ||||||
|  | 	p.Generator = g | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var overwriters []map[string]gogoproto.EnableFunc = []map[string]gogoproto.EnableFunc{ | ||||||
|  | 	{ | ||||||
|  | 		"stringer": gogoproto.IsStringer, | ||||||
|  | 	}, | ||||||
|  | 	{ | ||||||
|  | 		"gostring": gogoproto.HasGoString, | ||||||
|  | 	}, | ||||||
|  | 	{ | ||||||
|  | 		"equal": gogoproto.HasEqual, | ||||||
|  | 	}, | ||||||
|  | 	{ | ||||||
|  | 		"verboseequal": gogoproto.HasVerboseEqual, | ||||||
|  | 	}, | ||||||
|  | 	{ | ||||||
|  | 		"size": gogoproto.IsSizer, | ||||||
|  | 	}, | ||||||
|  | 	{ | ||||||
|  | 		"unmarshaler":        gogoproto.IsUnmarshaler, | ||||||
|  | 		"unsafe_unmarshaler": gogoproto.IsUnsafeUnmarshaler, | ||||||
|  | 	}, | ||||||
|  | 	{ | ||||||
|  | 		"marshaler":        gogoproto.IsMarshaler, | ||||||
|  | 		"unsafe_marshaler": gogoproto.IsUnsafeMarshaler, | ||||||
|  | 	}, | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *plugin) Generate(file *generator.FileDescriptor) { | ||||||
|  | 	for _, msg := range file.Messages() { | ||||||
|  | 		for _, os := range overwriters { | ||||||
|  | 			possible := true | ||||||
|  | 			for _, overwriter := range os { | ||||||
|  | 				if overwriter(file.FileDescriptorProto, msg.DescriptorProto) { | ||||||
|  | 					possible = false | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			if possible { | ||||||
|  | 				p.checkOverwrite(msg, os) | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		p.checkNameSpace(msg) | ||||||
|  | 		for _, field := range msg.GetField() { | ||||||
|  | 			if gogoproto.IsEmbed(field) && gogoproto.IsCustomName(field) { | ||||||
|  | 				fmt.Fprintf(os.Stderr, "ERROR: field %v with custom name %v cannot be embedded", *field.Name, gogoproto.GetCustomName(field)) | ||||||
|  | 				os.Exit(1) | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		p.checkRepeated(msg) | ||||||
|  | 	} | ||||||
|  | 	for _, e := range file.GetExtension() { | ||||||
|  | 		if gogoproto.IsEmbed(e) { | ||||||
|  | 			fmt.Fprintf(os.Stderr, "ERROR: extended field %v cannot be embedded", generator.CamelCase(*e.Name)) | ||||||
|  | 			os.Exit(1) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *plugin) checkNameSpace(message *generator.Descriptor) map[string]bool { | ||||||
|  | 	ccTypeName := generator.CamelCaseSlice(message.TypeName()) | ||||||
|  | 	names := make(map[string]bool) | ||||||
|  | 	for _, field := range message.Field { | ||||||
|  | 		fieldname := generator.CamelCase(*field.Name) | ||||||
|  | 		if field.IsMessage() && gogoproto.IsEmbed(field) { | ||||||
|  | 			desc := p.ObjectNamed(field.GetTypeName()) | ||||||
|  | 			moreNames := p.checkNameSpace(desc.(*generator.Descriptor)) | ||||||
|  | 			for another := range moreNames { | ||||||
|  | 				if names[another] { | ||||||
|  | 					fmt.Fprintf(os.Stderr, "ERROR: duplicate embedded fieldname %v in type %v\n", fieldname, ccTypeName) | ||||||
|  | 					os.Exit(1) | ||||||
|  | 				} | ||||||
|  | 				names[another] = true | ||||||
|  | 			} | ||||||
|  | 		} else { | ||||||
|  | 			if names[fieldname] { | ||||||
|  | 				fmt.Fprintf(os.Stderr, "ERROR: duplicate embedded fieldname %v in type %v\n", fieldname, ccTypeName) | ||||||
|  | 				os.Exit(1) | ||||||
|  | 			} | ||||||
|  | 			names[fieldname] = true | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return names | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *plugin) checkOverwrite(message *generator.Descriptor, enablers map[string]gogoproto.EnableFunc) { | ||||||
|  | 	ccTypeName := generator.CamelCaseSlice(message.TypeName()) | ||||||
|  | 	names := []string{} | ||||||
|  | 	for name := range enablers { | ||||||
|  | 		names = append(names, name) | ||||||
|  | 	} | ||||||
|  | 	for _, field := range message.Field { | ||||||
|  | 		if field.IsMessage() && gogoproto.IsEmbed(field) { | ||||||
|  | 			fieldname := generator.CamelCase(*field.Name) | ||||||
|  | 			desc := p.ObjectNamed(field.GetTypeName()) | ||||||
|  | 			msg := desc.(*generator.Descriptor) | ||||||
|  | 			for errStr, enabled := range enablers { | ||||||
|  | 				if enabled(msg.File(), msg.DescriptorProto) { | ||||||
|  | 					fmt.Fprintf(os.Stderr, "WARNING: found non-%v %v with embedded %v %v\n", names, ccTypeName, errStr, fieldname) | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			p.checkOverwrite(msg, enablers) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *plugin) checkRepeated(message *generator.Descriptor) { | ||||||
|  | 	ccTypeName := generator.CamelCaseSlice(message.TypeName()) | ||||||
|  | 	for _, field := range message.Field { | ||||||
|  | 		if !gogoproto.IsEmbed(field) { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		if field.IsBytes() { | ||||||
|  | 			fieldname := generator.CamelCase(*field.Name) | ||||||
|  | 			fmt.Fprintf(os.Stderr, "ERROR: found embedded bytes field %s in message %s\n", fieldname, ccTypeName) | ||||||
|  | 			os.Exit(1) | ||||||
|  | 		} | ||||||
|  | 		if !field.IsRepeated() { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		fieldname := generator.CamelCase(*field.Name) | ||||||
|  | 		fmt.Fprintf(os.Stderr, "ERROR: found repeated embedded field %s in message %s\n", fieldname, ccTypeName) | ||||||
|  | 		os.Exit(1) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *plugin) GenerateImports(*generator.FileDescriptor) {} | ||||||
|  |  | ||||||
|  | func init() { | ||||||
|  | 	generator.RegisterPlugin(NewPlugin()) | ||||||
|  | } | ||||||
							
								
								
									
										102
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/enumstringer/enumstringer.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/enumstringer/enumstringer.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,102 @@ | |||||||
|  | // Copyright (c) 2013, Vastech SA (PTY) LTD. All rights reserved. | ||||||
|  | // http://github.com/gogo/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. | ||||||
|  | // | ||||||
|  | // 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. | ||||||
|  |  | ||||||
|  | /* | ||||||
|  | The enumstringer (experimental) plugin generates a String method for each enum. | ||||||
|  |  | ||||||
|  | It is enabled by the following extensions: | ||||||
|  |  | ||||||
|  |   - enum_stringer | ||||||
|  |   - enum_stringer_all | ||||||
|  |  | ||||||
|  | This package is subject to change. | ||||||
|  |  | ||||||
|  | */ | ||||||
|  | package enumstringer | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"github.com/gogo/protobuf/gogoproto" | ||||||
|  | 	"github.com/gogo/protobuf/protoc-gen-gogo/generator" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type enumstringer struct { | ||||||
|  | 	*generator.Generator | ||||||
|  | 	generator.PluginImports | ||||||
|  | 	atleastOne bool | ||||||
|  | 	localName  string | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func NewEnumStringer() *enumstringer { | ||||||
|  | 	return &enumstringer{} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *enumstringer) Name() string { | ||||||
|  | 	return "enumstringer" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *enumstringer) Init(g *generator.Generator) { | ||||||
|  | 	p.Generator = g | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *enumstringer) Generate(file *generator.FileDescriptor) { | ||||||
|  | 	p.PluginImports = generator.NewPluginImports(p.Generator) | ||||||
|  | 	p.atleastOne = false | ||||||
|  |  | ||||||
|  | 	p.localName = generator.FileName(file) | ||||||
|  |  | ||||||
|  | 	strconvPkg := p.NewImport("strconv") | ||||||
|  |  | ||||||
|  | 	for _, enum := range file.Enums() { | ||||||
|  | 		if !gogoproto.IsEnumStringer(file.FileDescriptorProto, enum.EnumDescriptorProto) { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		if gogoproto.IsGoEnumStringer(file.FileDescriptorProto, enum.EnumDescriptorProto) { | ||||||
|  | 			panic("old enum string method needs to be disabled, please use gogoproto.old_enum_stringer or gogoproto.old_enum_string_all and set it to false") | ||||||
|  | 		} | ||||||
|  | 		p.atleastOne = true | ||||||
|  | 		ccTypeName := generator.CamelCaseSlice(enum.TypeName()) | ||||||
|  | 		p.P("func (x ", ccTypeName, ") String() string {") | ||||||
|  | 		p.In() | ||||||
|  | 		p.P(`s, ok := `, ccTypeName, `_name[int32(x)]`) | ||||||
|  | 		p.P(`if ok {`) | ||||||
|  | 		p.In() | ||||||
|  | 		p.P(`return s`) | ||||||
|  | 		p.Out() | ||||||
|  | 		p.P(`}`) | ||||||
|  | 		p.P(`return `, strconvPkg.Use(), `.Itoa(int(x))`) | ||||||
|  | 		p.Out() | ||||||
|  | 		p.P(`}`) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if !p.atleastOne { | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func init() { | ||||||
|  | 	generator.RegisterPlugin(NewEnumStringer()) | ||||||
|  | } | ||||||
							
								
								
									
										602
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/equal/equal.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										602
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/equal/equal.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,602 @@ | |||||||
|  | // Copyright (c) 2013, Vastech SA (PTY) LTD. All rights reserved. | ||||||
|  | // http://github.com/gogo/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. | ||||||
|  | // | ||||||
|  | // 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. | ||||||
|  |  | ||||||
|  | /* | ||||||
|  | The equal plugin generates an Equal and a VerboseEqual method for each message. | ||||||
|  | These equal methods are quite obvious. | ||||||
|  | The only difference is that VerboseEqual returns a non nil error if it is not equal. | ||||||
|  | This error contains more detail on exactly which part of the message was not equal to the other message. | ||||||
|  | The idea is that this is useful for debugging. | ||||||
|  |  | ||||||
|  | Equal is enabled using the following extensions: | ||||||
|  |  | ||||||
|  |   - equal | ||||||
|  |   - equal_all | ||||||
|  |  | ||||||
|  | While VerboseEqual is enable dusing the following extensions: | ||||||
|  |  | ||||||
|  |   - verbose_equal | ||||||
|  |   - verbose_equal_all | ||||||
|  |  | ||||||
|  | The equal plugin also generates a test given it is enabled using one of the following extensions: | ||||||
|  |  | ||||||
|  |   - testgen | ||||||
|  |   - testgen_all | ||||||
|  |  | ||||||
|  | Let us look at: | ||||||
|  |  | ||||||
|  |   github.com/gogo/protobuf/test/example/example.proto | ||||||
|  |  | ||||||
|  | Btw all the output can be seen at: | ||||||
|  |  | ||||||
|  |   github.com/gogo/protobuf/test/example/* | ||||||
|  |  | ||||||
|  | The following message: | ||||||
|  |  | ||||||
|  |   option (gogoproto.equal_all) = true; | ||||||
|  |   option (gogoproto.verbose_equal_all) = true; | ||||||
|  |  | ||||||
|  |   message B { | ||||||
|  | 	optional A A = 1 [(gogoproto.nullable) = false, (gogoproto.embed) = true]; | ||||||
|  | 	repeated bytes G = 2 [(gogoproto.customtype) = "github.com/gogo/protobuf/test/custom.Uint128", (gogoproto.nullable) = false]; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  | given to the equal plugin, will generate the following code: | ||||||
|  |  | ||||||
|  | 	func (this *B) VerboseEqual(that interface{}) error { | ||||||
|  | 		if that == nil { | ||||||
|  | 			if this == nil { | ||||||
|  | 				return nil | ||||||
|  | 			} | ||||||
|  | 			return fmt2.Errorf("that == nil && this != nil") | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		that1, ok := that.(*B) | ||||||
|  | 		if !ok { | ||||||
|  | 			return fmt2.Errorf("that is not of type *B") | ||||||
|  | 		} | ||||||
|  | 		if that1 == nil { | ||||||
|  | 			if this == nil { | ||||||
|  | 				return nil | ||||||
|  | 			} | ||||||
|  | 			return fmt2.Errorf("that is type *B but is nil && this != nil") | ||||||
|  | 		} else if this == nil { | ||||||
|  | 			return fmt2.Errorf("that is type *B but is not nil && this == nil") | ||||||
|  | 		} | ||||||
|  | 		if !this.A.Equal(&that1.A) { | ||||||
|  | 			return fmt2.Errorf("A this(%v) Not Equal that(%v)", this.A, that1.A) | ||||||
|  | 		} | ||||||
|  | 		if len(this.G) != len(that1.G) { | ||||||
|  | 			return fmt2.Errorf("G this(%v) Not Equal that(%v)", len(this.G), len(that1.G)) | ||||||
|  | 		} | ||||||
|  | 		for i := range this.G { | ||||||
|  | 			if !this.G[i].Equal(that1.G[i]) { | ||||||
|  | 				return fmt2.Errorf("G this[%v](%v) Not Equal that[%v](%v)", i, this.G[i], i, that1.G[i]) | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { | ||||||
|  | 			return fmt2.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) | ||||||
|  | 		} | ||||||
|  | 		return nil | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	func (this *B) Equal(that interface{}) bool { | ||||||
|  | 		if that == nil { | ||||||
|  | 			if this == nil { | ||||||
|  | 				return true | ||||||
|  | 			} | ||||||
|  | 			return false | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		that1, ok := that.(*B) | ||||||
|  | 		if !ok { | ||||||
|  | 			return false | ||||||
|  | 		} | ||||||
|  | 		if that1 == nil { | ||||||
|  | 			if this == nil { | ||||||
|  | 				return true | ||||||
|  | 			} | ||||||
|  | 			return false | ||||||
|  | 		} else if this == nil { | ||||||
|  | 			return false | ||||||
|  | 		} | ||||||
|  | 		if !this.A.Equal(&that1.A) { | ||||||
|  | 			return false | ||||||
|  | 		} | ||||||
|  | 		if len(this.G) != len(that1.G) { | ||||||
|  | 			return false | ||||||
|  | 		} | ||||||
|  | 		for i := range this.G { | ||||||
|  | 			if !this.G[i].Equal(that1.G[i]) { | ||||||
|  | 				return false | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { | ||||||
|  | 			return false | ||||||
|  | 		} | ||||||
|  | 		return true | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | and the following test code: | ||||||
|  |  | ||||||
|  | 	func TestBVerboseEqual(t *testing8.T) { | ||||||
|  | 		popr := math_rand8.New(math_rand8.NewSource(time8.Now().UnixNano())) | ||||||
|  | 		p := NewPopulatedB(popr, false) | ||||||
|  | 		data, err := github_com_gogo_protobuf_proto2.Marshal(p) | ||||||
|  | 		if err != nil { | ||||||
|  | 			panic(err) | ||||||
|  | 		} | ||||||
|  | 		msg := &B{} | ||||||
|  | 		if err := github_com_gogo_protobuf_proto2.Unmarshal(data, msg); err != nil { | ||||||
|  | 			panic(err) | ||||||
|  | 		} | ||||||
|  | 		if err := p.VerboseEqual(msg); err != nil { | ||||||
|  | 			t.Fatalf("%#v !VerboseEqual %#v, since %v", msg, p, err) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | */ | ||||||
|  | package equal | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"github.com/gogo/protobuf/gogoproto" | ||||||
|  | 	"github.com/gogo/protobuf/proto" | ||||||
|  | 	descriptor "github.com/gogo/protobuf/protoc-gen-gogo/descriptor" | ||||||
|  | 	"github.com/gogo/protobuf/protoc-gen-gogo/generator" | ||||||
|  | 	"github.com/gogo/protobuf/vanity" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type plugin struct { | ||||||
|  | 	*generator.Generator | ||||||
|  | 	generator.PluginImports | ||||||
|  | 	fmtPkg   generator.Single | ||||||
|  | 	bytesPkg generator.Single | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func NewPlugin() *plugin { | ||||||
|  | 	return &plugin{} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *plugin) Name() string { | ||||||
|  | 	return "equal" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *plugin) Init(g *generator.Generator) { | ||||||
|  | 	p.Generator = g | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *plugin) Generate(file *generator.FileDescriptor) { | ||||||
|  | 	p.PluginImports = generator.NewPluginImports(p.Generator) | ||||||
|  | 	p.fmtPkg = p.NewImport("fmt") | ||||||
|  | 	p.bytesPkg = p.NewImport("bytes") | ||||||
|  |  | ||||||
|  | 	for _, msg := range file.Messages() { | ||||||
|  | 		if msg.DescriptorProto.GetOptions().GetMapEntry() { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		if gogoproto.HasVerboseEqual(file.FileDescriptorProto, msg.DescriptorProto) { | ||||||
|  | 			p.generateMessage(file, msg, true) | ||||||
|  | 		} | ||||||
|  | 		if gogoproto.HasEqual(file.FileDescriptorProto, msg.DescriptorProto) { | ||||||
|  | 			p.generateMessage(file, msg, false) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *plugin) generateNullableField(fieldname string, verbose bool) { | ||||||
|  | 	p.P(`if this.`, fieldname, ` != nil && that1.`, fieldname, ` != nil {`) | ||||||
|  | 	p.In() | ||||||
|  | 	p.P(`if *this.`, fieldname, ` != *that1.`, fieldname, `{`) | ||||||
|  | 	p.In() | ||||||
|  | 	if verbose { | ||||||
|  | 		p.P(`return `, p.fmtPkg.Use(), `.Errorf("`, fieldname, ` this(%v) Not Equal that(%v)", *this.`, fieldname, `, *that1.`, fieldname, `)`) | ||||||
|  | 	} else { | ||||||
|  | 		p.P(`return false`) | ||||||
|  | 	} | ||||||
|  | 	p.Out() | ||||||
|  | 	p.P(`}`) | ||||||
|  | 	p.Out() | ||||||
|  | 	p.P(`} else if this.`, fieldname, ` != nil {`) | ||||||
|  | 	p.In() | ||||||
|  | 	if verbose { | ||||||
|  | 		p.P(`return `, p.fmtPkg.Use(), `.Errorf("this.`, fieldname, ` == nil && that.`, fieldname, ` != nil")`) | ||||||
|  | 	} else { | ||||||
|  | 		p.P(`return false`) | ||||||
|  | 	} | ||||||
|  | 	p.Out() | ||||||
|  | 	p.P(`} else if that1.`, fieldname, ` != nil {`) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *plugin) generateMsgNullAndTypeCheck(ccTypeName string, verbose bool) { | ||||||
|  | 	p.P(`if that == nil {`) | ||||||
|  | 	p.In() | ||||||
|  | 	p.P(`if this == nil {`) | ||||||
|  | 	p.In() | ||||||
|  | 	if verbose { | ||||||
|  | 		p.P(`return nil`) | ||||||
|  | 	} else { | ||||||
|  | 		p.P(`return true`) | ||||||
|  | 	} | ||||||
|  | 	p.Out() | ||||||
|  | 	p.P(`}`) | ||||||
|  | 	if verbose { | ||||||
|  | 		p.P(`return `, p.fmtPkg.Use(), `.Errorf("that == nil && this != nil")`) | ||||||
|  | 	} else { | ||||||
|  | 		p.P(`return false`) | ||||||
|  | 	} | ||||||
|  | 	p.Out() | ||||||
|  | 	p.P(`}`) | ||||||
|  | 	p.P(``) | ||||||
|  | 	p.P(`that1, ok := that.(*`, ccTypeName, `)`) | ||||||
|  | 	p.P(`if !ok {`) | ||||||
|  | 	p.In() | ||||||
|  | 	p.P(`that2, ok := that.(`, ccTypeName, `)`) | ||||||
|  | 	p.P(`if ok {`) | ||||||
|  | 	p.In() | ||||||
|  | 	p.P(`that1 = &that2`) | ||||||
|  | 	p.Out() | ||||||
|  | 	p.P(`} else {`) | ||||||
|  | 	p.In() | ||||||
|  | 	if verbose { | ||||||
|  | 		p.P(`return `, p.fmtPkg.Use(), `.Errorf("that is not of type *`, ccTypeName, `")`) | ||||||
|  | 	} else { | ||||||
|  | 		p.P(`return false`) | ||||||
|  | 	} | ||||||
|  | 	p.Out() | ||||||
|  | 	p.P(`}`) | ||||||
|  | 	p.Out() | ||||||
|  | 	p.P(`}`) | ||||||
|  | 	p.P(`if that1 == nil {`) | ||||||
|  | 	p.In() | ||||||
|  | 	p.P(`if this == nil {`) | ||||||
|  | 	p.In() | ||||||
|  | 	if verbose { | ||||||
|  | 		p.P(`return nil`) | ||||||
|  | 	} else { | ||||||
|  | 		p.P(`return true`) | ||||||
|  | 	} | ||||||
|  | 	p.Out() | ||||||
|  | 	p.P(`}`) | ||||||
|  | 	if verbose { | ||||||
|  | 		p.P(`return `, p.fmtPkg.Use(), `.Errorf("that is type *`, ccTypeName, ` but is nil && this != nil")`) | ||||||
|  | 	} else { | ||||||
|  | 		p.P(`return false`) | ||||||
|  | 	} | ||||||
|  | 	p.Out() | ||||||
|  | 	p.P(`} else if this == nil {`) | ||||||
|  | 	p.In() | ||||||
|  | 	if verbose { | ||||||
|  | 		p.P(`return `, p.fmtPkg.Use(), `.Errorf("that is type *`, ccTypeName, ` but is not nil && this == nil")`) | ||||||
|  | 	} else { | ||||||
|  | 		p.P(`return false`) | ||||||
|  | 	} | ||||||
|  | 	p.Out() | ||||||
|  | 	p.P(`}`) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *plugin) generateField(file *generator.FileDescriptor, message *generator.Descriptor, field *descriptor.FieldDescriptorProto, verbose bool) { | ||||||
|  | 	proto3 := gogoproto.IsProto3(file.FileDescriptorProto) | ||||||
|  | 	fieldname := p.GetOneOfFieldName(message, field) | ||||||
|  | 	repeated := field.IsRepeated() | ||||||
|  | 	ctype := gogoproto.IsCustomType(field) | ||||||
|  | 	nullable := gogoproto.IsNullable(field) | ||||||
|  | 	// oneof := field.OneofIndex != nil | ||||||
|  | 	if !repeated { | ||||||
|  | 		if ctype { | ||||||
|  | 			if nullable { | ||||||
|  | 				p.P(`if that1.`, fieldname, ` == nil {`) | ||||||
|  | 				p.In() | ||||||
|  | 				p.P(`if this.`, fieldname, ` != nil {`) | ||||||
|  | 				p.In() | ||||||
|  | 				if verbose { | ||||||
|  | 					p.P(`return `, p.fmtPkg.Use(), `.Errorf("this.`, fieldname, ` != nil && that1.`, fieldname, ` == nil")`) | ||||||
|  | 				} else { | ||||||
|  | 					p.P(`return false`) | ||||||
|  | 				} | ||||||
|  | 				p.Out() | ||||||
|  | 				p.P(`}`) | ||||||
|  | 				p.Out() | ||||||
|  | 				p.P(`} else if !this.`, fieldname, `.Equal(*that1.`, fieldname, `) {`) | ||||||
|  | 			} else { | ||||||
|  | 				p.P(`if !this.`, fieldname, `.Equal(that1.`, fieldname, `) {`) | ||||||
|  | 			} | ||||||
|  | 			p.In() | ||||||
|  | 			if verbose { | ||||||
|  | 				p.P(`return `, p.fmtPkg.Use(), `.Errorf("`, fieldname, ` this(%v) Not Equal that(%v)", this.`, fieldname, `, that1.`, fieldname, `)`) | ||||||
|  | 			} else { | ||||||
|  | 				p.P(`return false`) | ||||||
|  | 			} | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 		} else { | ||||||
|  | 			if field.IsMessage() || p.IsGroup(field) { | ||||||
|  | 				if nullable { | ||||||
|  | 					p.P(`if !this.`, fieldname, `.Equal(that1.`, fieldname, `) {`) | ||||||
|  | 				} else { | ||||||
|  | 					p.P(`if !this.`, fieldname, `.Equal(&that1.`, fieldname, `) {`) | ||||||
|  | 				} | ||||||
|  | 			} else if field.IsBytes() { | ||||||
|  | 				p.P(`if !`, p.bytesPkg.Use(), `.Equal(this.`, fieldname, `, that1.`, fieldname, `) {`) | ||||||
|  | 			} else if field.IsString() { | ||||||
|  | 				if nullable && !proto3 { | ||||||
|  | 					p.generateNullableField(fieldname, verbose) | ||||||
|  | 				} else { | ||||||
|  | 					p.P(`if this.`, fieldname, ` != that1.`, fieldname, `{`) | ||||||
|  | 				} | ||||||
|  | 			} else { | ||||||
|  | 				if nullable && !proto3 { | ||||||
|  | 					p.generateNullableField(fieldname, verbose) | ||||||
|  | 				} else { | ||||||
|  | 					p.P(`if this.`, fieldname, ` != that1.`, fieldname, `{`) | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			p.In() | ||||||
|  | 			if verbose { | ||||||
|  | 				p.P(`return `, p.fmtPkg.Use(), `.Errorf("`, fieldname, ` this(%v) Not Equal that(%v)", this.`, fieldname, `, that1.`, fieldname, `)`) | ||||||
|  | 			} else { | ||||||
|  | 				p.P(`return false`) | ||||||
|  | 			} | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 		} | ||||||
|  | 	} else { | ||||||
|  | 		p.P(`if len(this.`, fieldname, `) != len(that1.`, fieldname, `) {`) | ||||||
|  | 		p.In() | ||||||
|  | 		if verbose { | ||||||
|  | 			p.P(`return `, p.fmtPkg.Use(), `.Errorf("`, fieldname, ` this(%v) Not Equal that(%v)", len(this.`, fieldname, `), len(that1.`, fieldname, `))`) | ||||||
|  | 		} else { | ||||||
|  | 			p.P(`return false`) | ||||||
|  | 		} | ||||||
|  | 		p.Out() | ||||||
|  | 		p.P(`}`) | ||||||
|  | 		p.P(`for i := range this.`, fieldname, ` {`) | ||||||
|  | 		p.In() | ||||||
|  | 		if ctype { | ||||||
|  | 			p.P(`if !this.`, fieldname, `[i].Equal(that1.`, fieldname, `[i]) {`) | ||||||
|  | 		} else { | ||||||
|  | 			if p.IsMap(field) { | ||||||
|  | 				m := p.GoMapType(nil, field) | ||||||
|  | 				valuegoTyp, _ := p.GoType(nil, m.ValueField) | ||||||
|  | 				valuegoAliasTyp, _ := p.GoType(nil, m.ValueAliasField) | ||||||
|  | 				nullable, valuegoTyp, valuegoAliasTyp = generator.GoMapValueTypes(field, m.ValueField, valuegoTyp, valuegoAliasTyp) | ||||||
|  |  | ||||||
|  | 				mapValue := m.ValueAliasField | ||||||
|  | 				if mapValue.IsMessage() || p.IsGroup(mapValue) { | ||||||
|  | 					if nullable && valuegoTyp == valuegoAliasTyp { | ||||||
|  | 						p.P(`if !this.`, fieldname, `[i].Equal(that1.`, fieldname, `[i]) {`) | ||||||
|  | 					} else { | ||||||
|  | 						// Equal() has a pointer receiver, but map value is a value type | ||||||
|  | 						a := `this.` + fieldname + `[i]` | ||||||
|  | 						b := `that1.` + fieldname + `[i]` | ||||||
|  | 						if valuegoTyp != valuegoAliasTyp { | ||||||
|  | 							// cast back to the type that has the generated methods on it | ||||||
|  | 							a = `(` + valuegoTyp + `)(` + a + `)` | ||||||
|  | 							b = `(` + valuegoTyp + `)(` + b + `)` | ||||||
|  | 						} | ||||||
|  | 						p.P(`a := `, a) | ||||||
|  | 						p.P(`b := `, b) | ||||||
|  | 						if nullable { | ||||||
|  | 							p.P(`if !a.Equal(b) {`) | ||||||
|  | 						} else { | ||||||
|  | 							p.P(`if !(&a).Equal(&b) {`) | ||||||
|  | 						} | ||||||
|  | 					} | ||||||
|  | 				} else if mapValue.IsBytes() { | ||||||
|  | 					p.P(`if !`, p.bytesPkg.Use(), `.Equal(this.`, fieldname, `[i], that1.`, fieldname, `[i]) {`) | ||||||
|  | 				} else if mapValue.IsString() { | ||||||
|  | 					p.P(`if this.`, fieldname, `[i] != that1.`, fieldname, `[i] {`) | ||||||
|  | 				} else { | ||||||
|  | 					p.P(`if this.`, fieldname, `[i] != that1.`, fieldname, `[i] {`) | ||||||
|  | 				} | ||||||
|  | 			} else if field.IsMessage() || p.IsGroup(field) { | ||||||
|  | 				if nullable { | ||||||
|  | 					p.P(`if !this.`, fieldname, `[i].Equal(that1.`, fieldname, `[i]) {`) | ||||||
|  | 				} else { | ||||||
|  | 					p.P(`if !this.`, fieldname, `[i].Equal(&that1.`, fieldname, `[i]) {`) | ||||||
|  | 				} | ||||||
|  | 			} else if field.IsBytes() { | ||||||
|  | 				p.P(`if !`, p.bytesPkg.Use(), `.Equal(this.`, fieldname, `[i], that1.`, fieldname, `[i]) {`) | ||||||
|  | 			} else if field.IsString() { | ||||||
|  | 				p.P(`if this.`, fieldname, `[i] != that1.`, fieldname, `[i] {`) | ||||||
|  | 			} else { | ||||||
|  | 				p.P(`if this.`, fieldname, `[i] != that1.`, fieldname, `[i] {`) | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		p.In() | ||||||
|  | 		if verbose { | ||||||
|  | 			p.P(`return `, p.fmtPkg.Use(), `.Errorf("`, fieldname, ` this[%v](%v) Not Equal that[%v](%v)", i, this.`, fieldname, `[i], i, that1.`, fieldname, `[i])`) | ||||||
|  | 		} else { | ||||||
|  | 			p.P(`return false`) | ||||||
|  | 		} | ||||||
|  | 		p.Out() | ||||||
|  | 		p.P(`}`) | ||||||
|  | 		p.Out() | ||||||
|  | 		p.P(`}`) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *plugin) generateMessage(file *generator.FileDescriptor, message *generator.Descriptor, verbose bool) { | ||||||
|  | 	ccTypeName := generator.CamelCaseSlice(message.TypeName()) | ||||||
|  | 	if verbose { | ||||||
|  | 		p.P(`func (this *`, ccTypeName, `) VerboseEqual(that interface{}) error {`) | ||||||
|  | 	} else { | ||||||
|  | 		p.P(`func (this *`, ccTypeName, `) Equal(that interface{}) bool {`) | ||||||
|  | 	} | ||||||
|  | 	p.In() | ||||||
|  | 	p.generateMsgNullAndTypeCheck(ccTypeName, verbose) | ||||||
|  | 	oneofs := make(map[string]struct{}) | ||||||
|  |  | ||||||
|  | 	for _, field := range message.Field { | ||||||
|  | 		oneof := field.OneofIndex != nil | ||||||
|  | 		if oneof { | ||||||
|  | 			fieldname := p.GetFieldName(message, field) | ||||||
|  | 			if _, ok := oneofs[fieldname]; ok { | ||||||
|  | 				continue | ||||||
|  | 			} else { | ||||||
|  | 				oneofs[fieldname] = struct{}{} | ||||||
|  | 			} | ||||||
|  | 			p.P(`if that1.`, fieldname, ` == nil {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`if this.`, fieldname, ` != nil {`) | ||||||
|  | 			p.In() | ||||||
|  | 			if verbose { | ||||||
|  | 				p.P(`return `, p.fmtPkg.Use(), `.Errorf("this.`, fieldname, ` != nil && that1.`, fieldname, ` == nil")`) | ||||||
|  | 			} else { | ||||||
|  | 				p.P(`return false`) | ||||||
|  | 			} | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`} else if this.`, fieldname, ` == nil {`) | ||||||
|  | 			p.In() | ||||||
|  | 			if verbose { | ||||||
|  | 				p.P(`return `, p.fmtPkg.Use(), `.Errorf("this.`, fieldname, ` == nil && that1.`, fieldname, ` != nil")`) | ||||||
|  | 			} else { | ||||||
|  | 				p.P(`return false`) | ||||||
|  | 			} | ||||||
|  | 			p.Out() | ||||||
|  | 			if verbose { | ||||||
|  | 				p.P(`} else if err := this.`, fieldname, `.VerboseEqual(that1.`, fieldname, `); err != nil {`) | ||||||
|  | 			} else { | ||||||
|  | 				p.P(`} else if !this.`, fieldname, `.Equal(that1.`, fieldname, `) {`) | ||||||
|  | 			} | ||||||
|  | 			p.In() | ||||||
|  | 			if verbose { | ||||||
|  | 				p.P(`return err`) | ||||||
|  | 			} else { | ||||||
|  | 				p.P(`return false`) | ||||||
|  | 			} | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 		} else { | ||||||
|  | 			p.generateField(file, message, field, verbose) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	if message.DescriptorProto.HasExtension() { | ||||||
|  | 		fieldname := "XXX_extensions" | ||||||
|  | 		if gogoproto.HasExtensionsMap(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 			p.P(`for k, v := range this.`, fieldname, ` {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`if v2, ok := that1.`, fieldname, `[k]; ok {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`if !v.Equal(&v2) {`) | ||||||
|  | 			p.In() | ||||||
|  | 			if verbose { | ||||||
|  | 				p.P(`return `, p.fmtPkg.Use(), `.Errorf("`, fieldname, ` this[%v](%v) Not Equal that[%v](%v)", k, this.`, fieldname, `[k], k, that1.`, fieldname, `[k])`) | ||||||
|  | 			} else { | ||||||
|  | 				p.P(`return false`) | ||||||
|  | 			} | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`} else  {`) | ||||||
|  | 			p.In() | ||||||
|  | 			if verbose { | ||||||
|  | 				p.P(`return `, p.fmtPkg.Use(), `.Errorf("`, fieldname, `[%v] Not In that", k)`) | ||||||
|  | 			} else { | ||||||
|  | 				p.P(`return false`) | ||||||
|  | 			} | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  |  | ||||||
|  | 			p.P(`for k, _ := range that1.`, fieldname, ` {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`if _, ok := this.`, fieldname, `[k]; !ok {`) | ||||||
|  | 			p.In() | ||||||
|  | 			if verbose { | ||||||
|  | 				p.P(`return `, p.fmtPkg.Use(), `.Errorf("`, fieldname, `[%v] Not In this", k)`) | ||||||
|  | 			} else { | ||||||
|  | 				p.P(`return false`) | ||||||
|  | 			} | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 		} else { | ||||||
|  | 			p.P(`if !`, p.bytesPkg.Use(), `.Equal(this.`, fieldname, `, that1.`, fieldname, `) {`) | ||||||
|  | 			p.In() | ||||||
|  | 			if verbose { | ||||||
|  | 				p.P(`return `, p.fmtPkg.Use(), `.Errorf("`, fieldname, ` this(%v) Not Equal that(%v)", this.`, fieldname, `, that1.`, fieldname, `)`) | ||||||
|  | 			} else { | ||||||
|  | 				p.P(`return false`) | ||||||
|  | 			} | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	if gogoproto.HasUnrecognized(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 		fieldname := "XXX_unrecognized" | ||||||
|  | 		p.P(`if !`, p.bytesPkg.Use(), `.Equal(this.`, fieldname, `, that1.`, fieldname, `) {`) | ||||||
|  | 		p.In() | ||||||
|  | 		if verbose { | ||||||
|  | 			p.P(`return `, p.fmtPkg.Use(), `.Errorf("`, fieldname, ` this(%v) Not Equal that(%v)", this.`, fieldname, `, that1.`, fieldname, `)`) | ||||||
|  | 		} else { | ||||||
|  | 			p.P(`return false`) | ||||||
|  | 		} | ||||||
|  | 		p.Out() | ||||||
|  | 		p.P(`}`) | ||||||
|  | 	} | ||||||
|  | 	if verbose { | ||||||
|  | 		p.P(`return nil`) | ||||||
|  | 	} else { | ||||||
|  | 		p.P(`return true`) | ||||||
|  | 	} | ||||||
|  | 	p.Out() | ||||||
|  | 	p.P(`}`) | ||||||
|  |  | ||||||
|  | 	//Generate Equal methods for oneof fields | ||||||
|  | 	m := proto.Clone(message.DescriptorProto).(*descriptor.DescriptorProto) | ||||||
|  | 	for _, field := range m.Field { | ||||||
|  | 		oneof := field.OneofIndex != nil | ||||||
|  | 		if !oneof { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		ccTypeName := p.OneOfTypeName(message, field) | ||||||
|  | 		if verbose { | ||||||
|  | 			p.P(`func (this *`, ccTypeName, `) VerboseEqual(that interface{}) error {`) | ||||||
|  | 		} else { | ||||||
|  | 			p.P(`func (this *`, ccTypeName, `) Equal(that interface{}) bool {`) | ||||||
|  | 		} | ||||||
|  | 		p.In() | ||||||
|  |  | ||||||
|  | 		p.generateMsgNullAndTypeCheck(ccTypeName, verbose) | ||||||
|  | 		vanity.TurnOffNullableForNativeTypesWithoutDefaultsOnly(field) | ||||||
|  | 		p.generateField(file, message, field, verbose) | ||||||
|  |  | ||||||
|  | 		if verbose { | ||||||
|  | 			p.P(`return nil`) | ||||||
|  | 		} else { | ||||||
|  | 			p.P(`return true`) | ||||||
|  | 		} | ||||||
|  | 		p.Out() | ||||||
|  | 		p.P(`}`) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func init() { | ||||||
|  | 	generator.RegisterPlugin(NewPlugin()) | ||||||
|  | } | ||||||
							
								
								
									
										94
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/equal/equaltest.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/equal/equaltest.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,94 @@ | |||||||
|  | // Copyright (c) 2013, Vastech SA (PTY) LTD. All rights reserved. | ||||||
|  | // http://github.com/gogo/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. | ||||||
|  | // | ||||||
|  | // 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 equal | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"github.com/gogo/protobuf/gogoproto" | ||||||
|  | 	"github.com/gogo/protobuf/plugin/testgen" | ||||||
|  | 	"github.com/gogo/protobuf/protoc-gen-gogo/generator" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type test struct { | ||||||
|  | 	*generator.Generator | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func NewTest(g *generator.Generator) testgen.TestPlugin { | ||||||
|  | 	return &test{g} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *test) Generate(imports generator.PluginImports, file *generator.FileDescriptor) bool { | ||||||
|  | 	used := false | ||||||
|  | 	randPkg := imports.NewImport("math/rand") | ||||||
|  | 	timePkg := imports.NewImport("time") | ||||||
|  | 	testingPkg := imports.NewImport("testing") | ||||||
|  | 	protoPkg := imports.NewImport("github.com/gogo/protobuf/proto") | ||||||
|  | 	if !gogoproto.ImportsGoGoProto(file.FileDescriptorProto) { | ||||||
|  | 		protoPkg = imports.NewImport("github.com/golang/protobuf/proto") | ||||||
|  | 	} | ||||||
|  | 	for _, message := range file.Messages() { | ||||||
|  | 		ccTypeName := generator.CamelCaseSlice(message.TypeName()) | ||||||
|  | 		if !gogoproto.HasVerboseEqual(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		if message.DescriptorProto.GetOptions().GetMapEntry() { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		if gogoproto.HasTestGen(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 			used = true | ||||||
|  | 			p.P(`func Test`, ccTypeName, `VerboseEqual(t *`, testingPkg.Use(), `.T) {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`popr := `, randPkg.Use(), `.New(`, randPkg.Use(), `.NewSource(`, timePkg.Use(), `.Now().UnixNano()))`) | ||||||
|  | 			p.P(`p := NewPopulated`, ccTypeName, `(popr, false)`) | ||||||
|  | 			p.P(`data, err := `, protoPkg.Use(), `.Marshal(p)`) | ||||||
|  | 			p.P(`if err != nil {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`panic(err)`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.P(`msg := &`, ccTypeName, `{}`) | ||||||
|  | 			p.P(`if err := `, protoPkg.Use(), `.Unmarshal(data, msg); err != nil {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`panic(err)`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.P(`if err := p.VerboseEqual(msg); err != nil {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`t.Fatalf("%#v !VerboseEqual %#v, since %v", msg, p, err)`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 	} | ||||||
|  | 	return used | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func init() { | ||||||
|  | 	testgen.RegisterTestPlugin(NewTest) | ||||||
|  | } | ||||||
							
								
								
									
										231
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/face/face.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										231
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/face/face.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,231 @@ | |||||||
|  | // Copyright (c) 2013, Vastech SA (PTY) LTD. All rights reserved. | ||||||
|  | // http://github.com/gogo/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. | ||||||
|  | // | ||||||
|  | // 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. | ||||||
|  |  | ||||||
|  | /* | ||||||
|  | The face plugin generates a function will be generated which can convert a structure which satisfies an interface (face) to the specified structure. | ||||||
|  | This interface contains getters for each of the fields in the struct. | ||||||
|  | The specified struct is also generated with the getters. | ||||||
|  | This means that getters should be turned off so as not to conflict with face getters. | ||||||
|  | This allows it to satisfy its own face. | ||||||
|  |  | ||||||
|  | It is enabled by the following extensions: | ||||||
|  |  | ||||||
|  |   - face | ||||||
|  |   - face_all | ||||||
|  |  | ||||||
|  | Turn off getters by using the following extensions: | ||||||
|  |  | ||||||
|  |   - getters | ||||||
|  |   - getters_all | ||||||
|  |  | ||||||
|  | The face plugin also generates a test given it is enabled using one of the following extensions: | ||||||
|  |  | ||||||
|  |   - testgen | ||||||
|  |   - testgen_all | ||||||
|  |  | ||||||
|  | Let us look at: | ||||||
|  |  | ||||||
|  |   github.com/gogo/protobuf/test/example/example.proto | ||||||
|  |  | ||||||
|  | Btw all the output can be seen at: | ||||||
|  |  | ||||||
|  |   github.com/gogo/protobuf/test/example/* | ||||||
|  |  | ||||||
|  | The following message: | ||||||
|  |  | ||||||
|  |   message A { | ||||||
|  | 	option (gogoproto.face) = true; | ||||||
|  | 	option (gogoproto.goproto_getters) = false; | ||||||
|  | 	optional string Description = 1 [(gogoproto.nullable) = false]; | ||||||
|  | 	optional int64 Number = 2 [(gogoproto.nullable) = false]; | ||||||
|  | 	optional bytes Id = 3 [(gogoproto.customtype) = "github.com/gogo/protobuf/test/custom.Uuid", (gogoproto.nullable) = false]; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  | given to the face plugin, will generate the following code: | ||||||
|  |  | ||||||
|  | 	type AFace interface { | ||||||
|  | 		Proto() github_com_gogo_protobuf_proto.Message | ||||||
|  | 		GetDescription() string | ||||||
|  | 		GetNumber() int64 | ||||||
|  | 		GetId() github_com_gogo_protobuf_test_custom.Uuid | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	func (this *A) Proto() github_com_gogo_protobuf_proto.Message { | ||||||
|  | 		return this | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	func (this *A) TestProto() github_com_gogo_protobuf_proto.Message { | ||||||
|  | 		return NewAFromFace(this) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	func (this *A) GetDescription() string { | ||||||
|  | 		return this.Description | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	func (this *A) GetNumber() int64 { | ||||||
|  | 		return this.Number | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	func (this *A) GetId() github_com_gogo_protobuf_test_custom.Uuid { | ||||||
|  | 		return this.Id | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	func NewAFromFace(that AFace) *A { | ||||||
|  | 		this := &A{} | ||||||
|  | 		this.Description = that.GetDescription() | ||||||
|  | 		this.Number = that.GetNumber() | ||||||
|  | 		this.Id = that.GetId() | ||||||
|  | 		return this | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | and the following test code: | ||||||
|  |  | ||||||
|  | 	func TestAFace(t *testing7.T) { | ||||||
|  | 		popr := math_rand7.New(math_rand7.NewSource(time7.Now().UnixNano())) | ||||||
|  | 		p := NewPopulatedA(popr, true) | ||||||
|  | 		msg := p.TestProto() | ||||||
|  | 		if !p.Equal(msg) { | ||||||
|  | 			t.Fatalf("%#v !Face Equal %#v", msg, p) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | The struct A, representing the message, will also be generated just like always. | ||||||
|  | As you can see A satisfies its own Face, AFace. | ||||||
|  |  | ||||||
|  | Creating another struct which satisfies AFace is very easy. | ||||||
|  | Simply create all these methods specified in AFace. | ||||||
|  | Implementing The Proto method is done with the helper function NewAFromFace: | ||||||
|  |  | ||||||
|  | 	func (this *MyStruct) Proto() proto.Message { | ||||||
|  | 	  return NewAFromFace(this) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | just the like TestProto method which is used to test the NewAFromFace function. | ||||||
|  |  | ||||||
|  | */ | ||||||
|  | package face | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"github.com/gogo/protobuf/gogoproto" | ||||||
|  | 	"github.com/gogo/protobuf/protoc-gen-gogo/generator" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type plugin struct { | ||||||
|  | 	*generator.Generator | ||||||
|  | 	generator.PluginImports | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func NewPlugin() *plugin { | ||||||
|  | 	return &plugin{} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *plugin) Name() string { | ||||||
|  | 	return "face" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *plugin) Init(g *generator.Generator) { | ||||||
|  | 	p.Generator = g | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *plugin) Generate(file *generator.FileDescriptor) { | ||||||
|  | 	p.PluginImports = generator.NewPluginImports(p.Generator) | ||||||
|  | 	protoPkg := p.NewImport("github.com/gogo/protobuf/proto") | ||||||
|  | 	if !gogoproto.ImportsGoGoProto(file.FileDescriptorProto) { | ||||||
|  | 		protoPkg = p.NewImport("github.com/golang/protobuf/proto") | ||||||
|  | 	} | ||||||
|  | 	for _, message := range file.Messages() { | ||||||
|  | 		if !gogoproto.IsFace(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		if message.DescriptorProto.GetOptions().GetMapEntry() { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		if message.DescriptorProto.HasExtension() { | ||||||
|  | 			panic("face does not support message with extensions") | ||||||
|  | 		} | ||||||
|  | 		if gogoproto.HasGoGetters(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 			panic("face requires getters to be disabled please use gogoproto.getters or gogoproto.getters_all and set it to false") | ||||||
|  | 		} | ||||||
|  | 		ccTypeName := generator.CamelCaseSlice(message.TypeName()) | ||||||
|  | 		p.P(`type `, ccTypeName, `Face interface{`) | ||||||
|  | 		p.In() | ||||||
|  | 		p.P(`Proto() `, protoPkg.Use(), `.Message`) | ||||||
|  | 		for _, field := range message.Field { | ||||||
|  | 			fieldname := p.GetFieldName(message, field) | ||||||
|  | 			goTyp, _ := p.GoType(message, field) | ||||||
|  | 			if p.IsMap(field) { | ||||||
|  | 				m := p.GoMapType(nil, field) | ||||||
|  | 				goTyp = m.GoType | ||||||
|  | 			} | ||||||
|  | 			p.P(`Get`, fieldname, `() `, goTyp) | ||||||
|  | 		} | ||||||
|  | 		p.Out() | ||||||
|  | 		p.P(`}`) | ||||||
|  | 		p.P(``) | ||||||
|  | 		p.P(`func (this *`, ccTypeName, `) Proto() `, protoPkg.Use(), `.Message {`) | ||||||
|  | 		p.In() | ||||||
|  | 		p.P(`return this`) | ||||||
|  | 		p.Out() | ||||||
|  | 		p.P(`}`) | ||||||
|  | 		p.P(``) | ||||||
|  | 		p.P(`func (this *`, ccTypeName, `) TestProto() `, protoPkg.Use(), `.Message {`) | ||||||
|  | 		p.In() | ||||||
|  | 		p.P(`return New`, ccTypeName, `FromFace(this)`) | ||||||
|  | 		p.Out() | ||||||
|  | 		p.P(`}`) | ||||||
|  | 		p.P(``) | ||||||
|  | 		for _, field := range message.Field { | ||||||
|  | 			fieldname := p.GetFieldName(message, field) | ||||||
|  | 			goTyp, _ := p.GoType(message, field) | ||||||
|  | 			if generator.IsMap(file.FileDescriptorProto, field) { | ||||||
|  | 				m := p.GoMapType(nil, field) | ||||||
|  | 				goTyp = m.GoType | ||||||
|  | 			} | ||||||
|  | 			p.P(`func (this *`, ccTypeName, `) Get`, fieldname, `() `, goTyp, `{`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(` return this.`, fieldname) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.P(``) | ||||||
|  | 		} | ||||||
|  | 		p.P(``) | ||||||
|  | 		p.P(`func New`, ccTypeName, `FromFace(that `, ccTypeName, `Face) *`, ccTypeName, ` {`) | ||||||
|  | 		p.In() | ||||||
|  | 		p.P(`this := &`, ccTypeName, `{}`) | ||||||
|  | 		for _, field := range message.Field { | ||||||
|  | 			fieldname := p.GetFieldName(message, field) | ||||||
|  | 			p.P(`this.`, fieldname, ` = that.Get`, fieldname, `()`) | ||||||
|  | 		} | ||||||
|  | 		p.P(`return this`) | ||||||
|  | 		p.Out() | ||||||
|  | 		p.P(`}`) | ||||||
|  | 		p.P(``) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func init() { | ||||||
|  | 	generator.RegisterPlugin(NewPlugin()) | ||||||
|  | } | ||||||
							
								
								
									
										80
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/face/facetest.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/face/facetest.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,80 @@ | |||||||
|  | // Copyright (c) 2013, Vastech SA (PTY) LTD. All rights reserved. | ||||||
|  | // http://github.com/gogo/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. | ||||||
|  | // | ||||||
|  | // 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 face | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"github.com/gogo/protobuf/gogoproto" | ||||||
|  | 	"github.com/gogo/protobuf/plugin/testgen" | ||||||
|  | 	"github.com/gogo/protobuf/protoc-gen-gogo/generator" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type test struct { | ||||||
|  | 	*generator.Generator | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func NewTest(g *generator.Generator) testgen.TestPlugin { | ||||||
|  | 	return &test{g} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *test) Generate(imports generator.PluginImports, file *generator.FileDescriptor) bool { | ||||||
|  | 	used := false | ||||||
|  | 	randPkg := imports.NewImport("math/rand") | ||||||
|  | 	timePkg := imports.NewImport("time") | ||||||
|  | 	testingPkg := imports.NewImport("testing") | ||||||
|  | 	for _, message := range file.Messages() { | ||||||
|  | 		ccTypeName := generator.CamelCaseSlice(message.TypeName()) | ||||||
|  | 		if !gogoproto.IsFace(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		if message.DescriptorProto.GetOptions().GetMapEntry() { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		if gogoproto.HasTestGen(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 			used = true | ||||||
|  |  | ||||||
|  | 			p.P(`func Test`, ccTypeName, `Face(t *`, testingPkg.Use(), `.T) {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`popr := `, randPkg.Use(), `.New(`, randPkg.Use(), `.NewSource(`, timePkg.Use(), `.Now().UnixNano()))`) | ||||||
|  | 			p.P(`p := NewPopulated`, ccTypeName, `(popr, true)`) | ||||||
|  | 			p.P(`msg := p.TestProto()`) | ||||||
|  | 			p.P(`if !p.Equal(msg) {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`t.Fatalf("%#v !Face Equal %#v", msg, p)`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 	} | ||||||
|  | 	return used | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func init() { | ||||||
|  | 	testgen.RegisterTestPlugin(NewTest) | ||||||
|  | } | ||||||
							
								
								
									
										360
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/gostring/gostring.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										360
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/gostring/gostring.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,360 @@ | |||||||
|  | // Copyright (c) 2013, Vastech SA (PTY) LTD. All rights reserved. | ||||||
|  | // http://github.com/gogo/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. | ||||||
|  | // | ||||||
|  | // 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. | ||||||
|  |  | ||||||
|  | /* | ||||||
|  | The gostring plugin generates a GoString method for each message. | ||||||
|  | The GoString method is called whenever you use a fmt.Printf as such: | ||||||
|  |  | ||||||
|  |   fmt.Printf("%#v", mymessage) | ||||||
|  |  | ||||||
|  | or whenever you actually call GoString() | ||||||
|  | The output produced by the GoString method can be copied from the output into code and used to set a variable. | ||||||
|  | It is totally valid Go Code and is populated exactly as the struct that was printed out. | ||||||
|  |  | ||||||
|  | It is enabled by the following extensions: | ||||||
|  |  | ||||||
|  |   - gostring | ||||||
|  |   - gostring_all | ||||||
|  |  | ||||||
|  | The gostring plugin also generates a test given it is enabled using one of the following extensions: | ||||||
|  |  | ||||||
|  |   - testgen | ||||||
|  |   - testgen_all | ||||||
|  |  | ||||||
|  | Let us look at: | ||||||
|  |  | ||||||
|  |   github.com/gogo/protobuf/test/example/example.proto | ||||||
|  |  | ||||||
|  | Btw all the output can be seen at: | ||||||
|  |  | ||||||
|  |   github.com/gogo/protobuf/test/example/* | ||||||
|  |  | ||||||
|  | The following message: | ||||||
|  |  | ||||||
|  |   option (gogoproto.gostring_all) = true; | ||||||
|  |  | ||||||
|  |   message A { | ||||||
|  | 	optional string Description = 1 [(gogoproto.nullable) = false]; | ||||||
|  | 	optional int64 Number = 2 [(gogoproto.nullable) = false]; | ||||||
|  | 	optional bytes Id = 3 [(gogoproto.customtype) = "github.com/gogo/protobuf/test/custom.Uuid", (gogoproto.nullable) = false]; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  | given to the gostring plugin, will generate the following code: | ||||||
|  |  | ||||||
|  |   func (this *A) GoString() string { | ||||||
|  | 	if this == nil { | ||||||
|  | 		return "nil" | ||||||
|  | 	} | ||||||
|  | 	s := strings1.Join([]string{`&test.A{` + `Description:` + fmt1.Sprintf("%#v", this.Description), `Number:` + fmt1.Sprintf("%#v", this.Number), `Id:` + fmt1.Sprintf("%#v", this.Id), `XXX_unrecognized:` + fmt1.Sprintf("%#v", this.XXX_unrecognized) + `}`}, ", ") | ||||||
|  | 	return s | ||||||
|  |   } | ||||||
|  |  | ||||||
|  | and the following test code: | ||||||
|  |  | ||||||
|  | 	func TestAGoString(t *testing6.T) { | ||||||
|  | 		popr := math_rand6.New(math_rand6.NewSource(time6.Now().UnixNano())) | ||||||
|  | 		p := NewPopulatedA(popr, false) | ||||||
|  | 		s1 := p.GoString() | ||||||
|  | 		s2 := fmt2.Sprintf("%#v", p) | ||||||
|  | 		if s1 != s2 { | ||||||
|  | 			t.Fatalf("GoString want %v got %v", s1, s2) | ||||||
|  | 		} | ||||||
|  | 		_, err := go_parser.ParseExpr(s1) | ||||||
|  | 		if err != nil { | ||||||
|  | 			panic(err) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | Typically fmt.Printf("%#v") will stop to print when it reaches a pointer and | ||||||
|  | not print their values, while the generated GoString method will always print all values, recursively. | ||||||
|  |  | ||||||
|  | */ | ||||||
|  | package gostring | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"github.com/gogo/protobuf/gogoproto" | ||||||
|  | 	"github.com/gogo/protobuf/protoc-gen-gogo/generator" | ||||||
|  | 	"strconv" | ||||||
|  | 	"strings" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type gostring struct { | ||||||
|  | 	*generator.Generator | ||||||
|  | 	generator.PluginImports | ||||||
|  | 	atleastOne bool | ||||||
|  | 	localName  string | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func NewGoString() *gostring { | ||||||
|  | 	return &gostring{} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *gostring) Name() string { | ||||||
|  | 	return "gostring" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *gostring) Init(g *generator.Generator) { | ||||||
|  | 	p.Generator = g | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *gostring) Generate(file *generator.FileDescriptor) { | ||||||
|  | 	proto3 := gogoproto.IsProto3(file.FileDescriptorProto) | ||||||
|  | 	p.PluginImports = generator.NewPluginImports(p.Generator) | ||||||
|  | 	p.atleastOne = false | ||||||
|  |  | ||||||
|  | 	p.localName = generator.FileName(file) | ||||||
|  |  | ||||||
|  | 	fmtPkg := p.NewImport("fmt") | ||||||
|  | 	stringsPkg := p.NewImport("strings") | ||||||
|  | 	protoPkg := p.NewImport("github.com/gogo/protobuf/proto") | ||||||
|  | 	if !gogoproto.ImportsGoGoProto(file.FileDescriptorProto) { | ||||||
|  | 		protoPkg = p.NewImport("github.com/golang/protobuf/proto") | ||||||
|  | 	} | ||||||
|  | 	sortPkg := p.NewImport("sort") | ||||||
|  | 	strconvPkg := p.NewImport("strconv") | ||||||
|  | 	reflectPkg := p.NewImport("reflect") | ||||||
|  | 	sortKeysPkg := p.NewImport("github.com/gogo/protobuf/sortkeys") | ||||||
|  |  | ||||||
|  | 	for _, message := range file.Messages() { | ||||||
|  | 		if !gogoproto.HasGoString(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		if message.DescriptorProto.GetOptions().GetMapEntry() { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		p.atleastOne = true | ||||||
|  | 		packageName := file.PackageName() | ||||||
|  |  | ||||||
|  | 		ccTypeName := generator.CamelCaseSlice(message.TypeName()) | ||||||
|  | 		p.P(`func (this *`, ccTypeName, `) GoString() string {`) | ||||||
|  | 		p.In() | ||||||
|  | 		p.P(`if this == nil {`) | ||||||
|  | 		p.In() | ||||||
|  | 		p.P(`return "nil"`) | ||||||
|  | 		p.Out() | ||||||
|  | 		p.P(`}`) | ||||||
|  |  | ||||||
|  | 		p.P(`s := make([]string, 0, `, strconv.Itoa(len(message.Field)+4), `)`) | ||||||
|  | 		p.P(`s = append(s, "&`, packageName, ".", ccTypeName, `{")`) | ||||||
|  |  | ||||||
|  | 		oneofs := make(map[string]struct{}) | ||||||
|  | 		for _, field := range message.Field { | ||||||
|  | 			nullable := gogoproto.IsNullable(field) | ||||||
|  | 			repeated := field.IsRepeated() | ||||||
|  | 			fieldname := p.GetFieldName(message, field) | ||||||
|  | 			oneof := field.OneofIndex != nil | ||||||
|  | 			if oneof { | ||||||
|  | 				if _, ok := oneofs[fieldname]; ok { | ||||||
|  | 					continue | ||||||
|  | 				} else { | ||||||
|  | 					oneofs[fieldname] = struct{}{} | ||||||
|  | 				} | ||||||
|  | 				p.P(`if this.`, fieldname, ` != nil {`) | ||||||
|  | 				p.In() | ||||||
|  | 				p.P(`s = append(s, "`, fieldname, `: " + `, fmtPkg.Use(), `.Sprintf("%#v", this.`, fieldname, `) + ",\n")`) | ||||||
|  | 				p.Out() | ||||||
|  | 				p.P(`}`) | ||||||
|  | 			} else if generator.IsMap(file.FileDescriptorProto, field) { | ||||||
|  | 				m := p.GoMapType(nil, field) | ||||||
|  | 				mapgoTyp, keyField, keyAliasField := m.GoType, m.KeyField, m.KeyAliasField | ||||||
|  | 				keysName := `keysFor` + fieldname | ||||||
|  | 				keygoTyp, _ := p.GoType(nil, keyField) | ||||||
|  | 				keygoTyp = strings.Replace(keygoTyp, "*", "", 1) | ||||||
|  | 				keygoAliasTyp, _ := p.GoType(nil, keyAliasField) | ||||||
|  | 				keygoAliasTyp = strings.Replace(keygoAliasTyp, "*", "", 1) | ||||||
|  | 				keyCapTyp := generator.CamelCase(keygoTyp) | ||||||
|  | 				p.P(keysName, ` := make([]`, keygoTyp, `, 0, len(this.`, fieldname, `))`) | ||||||
|  | 				p.P(`for k, _ := range this.`, fieldname, ` {`) | ||||||
|  | 				p.In() | ||||||
|  | 				if keygoAliasTyp == keygoTyp { | ||||||
|  | 					p.P(keysName, ` = append(`, keysName, `, k)`) | ||||||
|  | 				} else { | ||||||
|  | 					p.P(keysName, ` = append(`, keysName, `, `, keygoTyp, `(k))`) | ||||||
|  | 				} | ||||||
|  | 				p.Out() | ||||||
|  | 				p.P(`}`) | ||||||
|  | 				p.P(sortKeysPkg.Use(), `.`, keyCapTyp, `s(`, keysName, `)`) | ||||||
|  | 				mapName := `mapStringFor` + fieldname | ||||||
|  | 				p.P(mapName, ` := "`, mapgoTyp, `{"`) | ||||||
|  | 				p.P(`for _, k := range `, keysName, ` {`) | ||||||
|  | 				p.In() | ||||||
|  | 				if keygoAliasTyp == keygoTyp { | ||||||
|  | 					p.P(mapName, ` += fmt.Sprintf("%#v: %#v,", k, this.`, fieldname, `[k])`) | ||||||
|  | 				} else { | ||||||
|  | 					p.P(mapName, ` += fmt.Sprintf("%#v: %#v,", k, this.`, fieldname, `[`, keygoAliasTyp, `(k)])`) | ||||||
|  | 				} | ||||||
|  | 				p.Out() | ||||||
|  | 				p.P(`}`) | ||||||
|  | 				p.P(mapName, ` += "}"`) | ||||||
|  | 				p.P(`if this.`, fieldname, ` != nil {`) | ||||||
|  | 				p.In() | ||||||
|  | 				p.P(`s = append(s, "`, fieldname, `: " + `, mapName, `+ ",\n")`) | ||||||
|  | 				p.Out() | ||||||
|  | 				p.P(`}`) | ||||||
|  | 			} else if field.IsMessage() || p.IsGroup(field) { | ||||||
|  | 				if nullable || repeated { | ||||||
|  | 					p.P(`if this.`, fieldname, ` != nil {`) | ||||||
|  | 					p.In() | ||||||
|  | 				} | ||||||
|  | 				if nullable || repeated { | ||||||
|  | 					p.P(`s = append(s, "`, fieldname, `: " + `, fmtPkg.Use(), `.Sprintf("%#v", this.`, fieldname, `) + ",\n")`) | ||||||
|  | 				} else { | ||||||
|  | 					p.P(`s = append(s, "`, fieldname, `: " + `, stringsPkg.Use(), `.Replace(this.`, fieldname, `.GoString()`, ",`&`,``,1)", ` + ",\n")`) | ||||||
|  | 				} | ||||||
|  | 				if nullable || repeated { | ||||||
|  | 					p.Out() | ||||||
|  | 					p.P(`}`) | ||||||
|  | 				} | ||||||
|  | 			} else { | ||||||
|  | 				if !proto3 && (nullable || repeated) { | ||||||
|  | 					p.P(`if this.`, fieldname, ` != nil {`) | ||||||
|  | 					p.In() | ||||||
|  | 				} | ||||||
|  | 				if field.IsEnum() { | ||||||
|  | 					if nullable && !repeated && !proto3 { | ||||||
|  | 						goTyp, _ := p.GoType(message, field) | ||||||
|  | 						p.P(`s = append(s, "`, fieldname, `: " + valueToGoString`, p.localName, `(this.`, fieldname, `,"`, packageName, ".", generator.GoTypeToName(goTyp), `"`, `) + ",\n")`) | ||||||
|  | 					} else { | ||||||
|  | 						p.P(`s = append(s, "`, fieldname, `: " + `, fmtPkg.Use(), `.Sprintf("%#v", this.`, fieldname, `) + ",\n")`) | ||||||
|  | 					} | ||||||
|  | 				} else { | ||||||
|  | 					if nullable && !repeated && !proto3 { | ||||||
|  | 						goTyp, _ := p.GoType(message, field) | ||||||
|  | 						p.P(`s = append(s, "`, fieldname, `: " + valueToGoString`, p.localName, `(this.`, fieldname, `,"`, generator.GoTypeToName(goTyp), `"`, `) + ",\n")`) | ||||||
|  | 					} else { | ||||||
|  | 						p.P(`s = append(s, "`, fieldname, `: " + `, fmtPkg.Use(), `.Sprintf("%#v", this.`, fieldname, `) + ",\n")`) | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 				if !proto3 && (nullable || repeated) { | ||||||
|  | 					p.Out() | ||||||
|  | 					p.P(`}`) | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		if message.DescriptorProto.HasExtension() { | ||||||
|  | 			p.P(`if this.XXX_extensions != nil {`) | ||||||
|  | 			p.In() | ||||||
|  | 			if gogoproto.HasExtensionsMap(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 				p.P(`s = append(s, "XXX_extensions: " + extensionToGoString`, p.localName, `(this.XXX_extensions) + ",\n")`) | ||||||
|  | 			} else { | ||||||
|  | 				p.P(`s = append(s, "XXX_extensions: " + `, fmtPkg.Use(), `.Sprintf("%#v", this.XXX_extensions) + ",\n")`) | ||||||
|  | 			} | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 		} | ||||||
|  | 		if gogoproto.HasUnrecognized(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 			p.P(`if this.XXX_unrecognized != nil {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`s = append(s, "XXX_unrecognized:" + `, fmtPkg.Use(), `.Sprintf("%#v", this.XXX_unrecognized) + ",\n")`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		p.P(`s = append(s, "}")`) | ||||||
|  | 		//outStr += strings.Join([]string{" + `}`", `}`, `,", "`, ")"}, "") | ||||||
|  | 		p.P(`return `, stringsPkg.Use(), `.Join(s, "")`) | ||||||
|  | 		p.Out() | ||||||
|  | 		p.P(`}`) | ||||||
|  |  | ||||||
|  | 		//Generate GoString methods for oneof fields | ||||||
|  | 		for _, field := range message.Field { | ||||||
|  | 			oneof := field.OneofIndex != nil | ||||||
|  | 			if !oneof { | ||||||
|  | 				continue | ||||||
|  | 			} | ||||||
|  | 			ccTypeName := p.OneOfTypeName(message, field) | ||||||
|  | 			p.P(`func (this *`, ccTypeName, `) GoString() string {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`if this == nil {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`return "nil"`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			outFlds := []string{} | ||||||
|  | 			fieldname := p.GetOneOfFieldName(message, field) | ||||||
|  | 			if field.IsMessage() || p.IsGroup(field) { | ||||||
|  | 				tmp := strings.Join([]string{"`", fieldname, ":` + "}, "") | ||||||
|  | 				tmp += strings.Join([]string{fmtPkg.Use(), `.Sprintf("%#v", this.`, fieldname, `)`}, "") | ||||||
|  | 				outFlds = append(outFlds, tmp) | ||||||
|  | 			} else { | ||||||
|  | 				tmp := strings.Join([]string{"`", fieldname, ":` + "}, "") | ||||||
|  | 				tmp += strings.Join([]string{fmtPkg.Use(), `.Sprintf("%#v", this.`, fieldname, ")"}, "") | ||||||
|  | 				outFlds = append(outFlds, tmp) | ||||||
|  | 			} | ||||||
|  | 			outStr := strings.Join([]string{"s := ", stringsPkg.Use(), ".Join([]string{`&", packageName, ".", ccTypeName, "{` + \n"}, "") | ||||||
|  | 			outStr += strings.Join(outFlds, ",\n") | ||||||
|  | 			outStr += strings.Join([]string{" + `}`", `}`, `,", "`, ")"}, "") | ||||||
|  | 			p.P(outStr) | ||||||
|  | 			p.P(`return s`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if !p.atleastOne { | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	p.P(`func valueToGoString`, p.localName, `(v interface{}, typ string) string {`) | ||||||
|  | 	p.In() | ||||||
|  | 	p.P(`rv := `, reflectPkg.Use(), `.ValueOf(v)`) | ||||||
|  | 	p.P(`if rv.IsNil() {`) | ||||||
|  | 	p.In() | ||||||
|  | 	p.P(`return "nil"`) | ||||||
|  | 	p.Out() | ||||||
|  | 	p.P(`}`) | ||||||
|  | 	p.P(`pv := `, reflectPkg.Use(), `.Indirect(rv).Interface()`) | ||||||
|  | 	p.P(`return `, fmtPkg.Use(), `.Sprintf("func(v %v) *%v { return &v } ( %#v )", typ, typ, pv)`) | ||||||
|  | 	p.Out() | ||||||
|  | 	p.P(`}`) | ||||||
|  |  | ||||||
|  | 	p.P(`func extensionToGoString`, p.localName, `(e map[int32]`, protoPkg.Use(), `.Extension) string {`) | ||||||
|  | 	p.In() | ||||||
|  | 	p.P(`if e == nil { return "nil" }`) | ||||||
|  | 	p.P(`s := "map[int32]proto.Extension{"`) | ||||||
|  | 	p.P(`keys := make([]int, 0, len(e))`) | ||||||
|  | 	p.P(`for k := range e {`) | ||||||
|  | 	p.In() | ||||||
|  | 	p.P(`keys = append(keys, int(k))`) | ||||||
|  | 	p.Out() | ||||||
|  | 	p.P(`}`) | ||||||
|  | 	p.P(sortPkg.Use(), `.Ints(keys)`) | ||||||
|  | 	p.P(`ss := []string{}`) | ||||||
|  | 	p.P(`for _, k := range keys {`) | ||||||
|  | 	p.In() | ||||||
|  | 	p.P(`ss = append(ss, `, strconvPkg.Use(), `.Itoa(k) + ": " + e[int32(k)].GoString())`) | ||||||
|  | 	p.Out() | ||||||
|  | 	p.P(`}`) | ||||||
|  | 	p.P(`s+=`, stringsPkg.Use(), `.Join(ss, ",") + "}"`) | ||||||
|  | 	p.P(`return s`) | ||||||
|  | 	p.Out() | ||||||
|  | 	p.P(`}`) | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func init() { | ||||||
|  | 	generator.RegisterPlugin(NewGoString()) | ||||||
|  | } | ||||||
							
								
								
									
										88
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/gostring/gostringtest.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/gostring/gostringtest.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,88 @@ | |||||||
|  | // Copyright (c) 2013, Vastech SA (PTY) LTD. All rights reserved. | ||||||
|  | // http://github.com/gogo/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. | ||||||
|  | // | ||||||
|  | // 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 gostring | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"github.com/gogo/protobuf/gogoproto" | ||||||
|  | 	"github.com/gogo/protobuf/plugin/testgen" | ||||||
|  | 	"github.com/gogo/protobuf/protoc-gen-gogo/generator" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type test struct { | ||||||
|  | 	*generator.Generator | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func NewTest(g *generator.Generator) testgen.TestPlugin { | ||||||
|  | 	return &test{g} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *test) Generate(imports generator.PluginImports, file *generator.FileDescriptor) bool { | ||||||
|  | 	used := false | ||||||
|  | 	randPkg := imports.NewImport("math/rand") | ||||||
|  | 	timePkg := imports.NewImport("time") | ||||||
|  | 	testingPkg := imports.NewImport("testing") | ||||||
|  | 	fmtPkg := imports.NewImport("fmt") | ||||||
|  | 	parserPkg := imports.NewImport("go/parser") | ||||||
|  | 	for _, message := range file.Messages() { | ||||||
|  | 		ccTypeName := generator.CamelCaseSlice(message.TypeName()) | ||||||
|  | 		if !gogoproto.HasGoString(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		if message.DescriptorProto.GetOptions().GetMapEntry() { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		if gogoproto.HasTestGen(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 			used = true | ||||||
|  | 			p.P(`func Test`, ccTypeName, `GoString(t *`, testingPkg.Use(), `.T) {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`popr := `, randPkg.Use(), `.New(`, randPkg.Use(), `.NewSource(`, timePkg.Use(), `.Now().UnixNano()))`) | ||||||
|  | 			p.P(`p := NewPopulated`, ccTypeName, `(popr, false)`) | ||||||
|  | 			p.P(`s1 := p.GoString()`) | ||||||
|  | 			p.P(`s2 := `, fmtPkg.Use(), `.Sprintf("%#v", p)`) | ||||||
|  | 			p.P(`if s1 != s2 {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`t.Fatalf("GoString want %v got %v", s1, s2)`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.P(`_, err := `, parserPkg.Use(), `.ParseExpr(s1)`) | ||||||
|  | 			p.P(`if err != nil {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`panic(err)`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 	} | ||||||
|  | 	return used | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func init() { | ||||||
|  | 	testgen.RegisterTestPlugin(NewTest) | ||||||
|  | } | ||||||
							
								
								
									
										439
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/grpc/grpc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										439
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/grpc/grpc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,439 @@ | |||||||
|  | // Go support for Protocol Buffers - Google's data interchange format | ||||||
|  | // | ||||||
|  | // Copyright 2015 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 grpc outputs gRPC service descriptions in Go code. | ||||||
|  | // It runs as a plugin for the Go protocol buffer compiler plugin. | ||||||
|  | // It is linked in to protoc-gen-go. | ||||||
|  | package grpc | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 	"path" | ||||||
|  | 	"strconv" | ||||||
|  | 	"strings" | ||||||
|  |  | ||||||
|  | 	pb "github.com/gogo/protobuf/protoc-gen-gogo/descriptor" | ||||||
|  | 	"github.com/gogo/protobuf/protoc-gen-gogo/generator" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | // Paths for packages used by code generated in this file, | ||||||
|  | // relative to the import_prefix of the generator.Generator. | ||||||
|  | const ( | ||||||
|  | 	contextPkgPath = "golang.org/x/net/context" | ||||||
|  | 	grpcPkgPath    = "google.golang.org/grpc" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func init() { | ||||||
|  | 	generator.RegisterPlugin(new(grpc)) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // grpc is an implementation of the Go protocol buffer compiler's | ||||||
|  | // plugin architecture.  It generates bindings for gRPC support. | ||||||
|  | type grpc struct { | ||||||
|  | 	gen *generator.Generator | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Name returns the name of this plugin, "grpc". | ||||||
|  | func (g *grpc) Name() string { | ||||||
|  | 	return "grpc" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // The names for packages imported in the generated code. | ||||||
|  | // They may vary from the final path component of the import path | ||||||
|  | // if the name is used by other packages. | ||||||
|  | var ( | ||||||
|  | 	contextPkg string | ||||||
|  | 	grpcPkg    string | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | // Init initializes the plugin. | ||||||
|  | func (g *grpc) Init(gen *generator.Generator) { | ||||||
|  | 	g.gen = gen | ||||||
|  | 	contextPkg = generator.RegisterUniquePackageName("context", nil) | ||||||
|  | 	grpcPkg = generator.RegisterUniquePackageName("grpc", nil) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Given a type name defined in a .proto, return its object. | ||||||
|  | // Also record that we're using it, to guarantee the associated import. | ||||||
|  | func (g *grpc) objectNamed(name string) generator.Object { | ||||||
|  | 	g.gen.RecordTypeUse(name) | ||||||
|  | 	return g.gen.ObjectNamed(name) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Given a type name defined in a .proto, return its name as we will print it. | ||||||
|  | func (g *grpc) typeName(str string) string { | ||||||
|  | 	return g.gen.TypeName(g.objectNamed(str)) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // P forwards to g.gen.P. | ||||||
|  | func (g *grpc) P(args ...interface{}) { g.gen.P(args...) } | ||||||
|  |  | ||||||
|  | // Generate generates code for the services in the given file. | ||||||
|  | func (g *grpc) Generate(file *generator.FileDescriptor) { | ||||||
|  | 	if len(file.FileDescriptorProto.Service) == 0 { | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 	g.P("// Reference imports to suppress errors if they are not otherwise used.") | ||||||
|  | 	g.P("var _ ", contextPkg, ".Context") | ||||||
|  | 	g.P("var _ ", grpcPkg, ".ClientConn") | ||||||
|  | 	g.P() | ||||||
|  | 	for i, service := range file.FileDescriptorProto.Service { | ||||||
|  | 		g.generateService(file, service, i) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // GenerateImports generates the import declaration for this file. | ||||||
|  | func (g *grpc) GenerateImports(file *generator.FileDescriptor) { | ||||||
|  | 	if len(file.FileDescriptorProto.Service) == 0 { | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 	g.P("import (") | ||||||
|  | 	g.P(contextPkg, " ", strconv.Quote(path.Join(g.gen.ImportPrefix, contextPkgPath))) | ||||||
|  | 	g.P(grpcPkg, " ", strconv.Quote(path.Join(g.gen.ImportPrefix, grpcPkgPath))) | ||||||
|  | 	g.P(")") | ||||||
|  | 	g.P() | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // reservedClientName records whether a client name is reserved on the client side. | ||||||
|  | var reservedClientName = map[string]bool{ | ||||||
|  | // TODO: do we need any in gRPC? | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func unexport(s string) string { return strings.ToLower(s[:1]) + s[1:] } | ||||||
|  |  | ||||||
|  | // generateService generates all the code for the named service. | ||||||
|  | func (g *grpc) generateService(file *generator.FileDescriptor, service *pb.ServiceDescriptorProto, index int) { | ||||||
|  | 	path := fmt.Sprintf("6,%d", index) // 6 means service. | ||||||
|  |  | ||||||
|  | 	origServName := service.GetName() | ||||||
|  | 	fullServName := file.GetPackage() + "." + origServName | ||||||
|  | 	servName := generator.CamelCase(origServName) | ||||||
|  |  | ||||||
|  | 	g.P() | ||||||
|  | 	g.P("// Client API for ", servName, " service") | ||||||
|  | 	g.P() | ||||||
|  |  | ||||||
|  | 	// Client interface. | ||||||
|  | 	g.P("type ", servName, "Client interface {") | ||||||
|  | 	for i, method := range service.Method { | ||||||
|  | 		g.gen.PrintComments(fmt.Sprintf("%s,2,%d", path, i)) // 2 means method in a service. | ||||||
|  | 		g.P(g.generateClientSignature(servName, method)) | ||||||
|  | 	} | ||||||
|  | 	g.P("}") | ||||||
|  | 	g.P() | ||||||
|  |  | ||||||
|  | 	// Client structure. | ||||||
|  | 	g.P("type ", unexport(servName), "Client struct {") | ||||||
|  | 	g.P("cc *", grpcPkg, ".ClientConn") | ||||||
|  | 	g.P("}") | ||||||
|  | 	g.P() | ||||||
|  |  | ||||||
|  | 	// NewClient factory. | ||||||
|  | 	g.P("func New", servName, "Client (cc *", grpcPkg, ".ClientConn) ", servName, "Client {") | ||||||
|  | 	g.P("return &", unexport(servName), "Client{cc}") | ||||||
|  | 	g.P("}") | ||||||
|  | 	g.P() | ||||||
|  |  | ||||||
|  | 	var methodIndex, streamIndex int | ||||||
|  | 	serviceDescVar := "_" + servName + "_serviceDesc" | ||||||
|  | 	// Client method implementations. | ||||||
|  | 	for _, method := range service.Method { | ||||||
|  | 		var descExpr string | ||||||
|  | 		if !method.GetServerStreaming() && !method.GetClientStreaming() { | ||||||
|  | 			// Unary RPC method | ||||||
|  | 			descExpr = fmt.Sprintf("&%s.Methods[%d]", serviceDescVar, methodIndex) | ||||||
|  | 			methodIndex++ | ||||||
|  | 		} else { | ||||||
|  | 			// Streaming RPC method | ||||||
|  | 			descExpr = fmt.Sprintf("&%s.Streams[%d]", serviceDescVar, streamIndex) | ||||||
|  | 			streamIndex++ | ||||||
|  | 		} | ||||||
|  | 		g.generateClientMethod(servName, fullServName, serviceDescVar, method, descExpr) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	g.P("// Server API for ", servName, " service") | ||||||
|  | 	g.P() | ||||||
|  |  | ||||||
|  | 	// Server interface. | ||||||
|  | 	serverType := servName + "Server" | ||||||
|  | 	g.P("type ", serverType, " interface {") | ||||||
|  | 	for i, method := range service.Method { | ||||||
|  | 		g.gen.PrintComments(fmt.Sprintf("%s,2,%d", path, i)) // 2 means method in a service. | ||||||
|  | 		g.P(g.generateServerSignature(servName, method)) | ||||||
|  | 	} | ||||||
|  | 	g.P("}") | ||||||
|  | 	g.P() | ||||||
|  |  | ||||||
|  | 	// Server registration. | ||||||
|  | 	g.P("func Register", servName, "Server(s *", grpcPkg, ".Server, srv ", serverType, ") {") | ||||||
|  | 	g.P("s.RegisterService(&", serviceDescVar, `, srv)`) | ||||||
|  | 	g.P("}") | ||||||
|  | 	g.P() | ||||||
|  |  | ||||||
|  | 	// Server handler implementations. | ||||||
|  | 	var handlerNames []string | ||||||
|  | 	for _, method := range service.Method { | ||||||
|  | 		hname := g.generateServerMethod(servName, method) | ||||||
|  | 		handlerNames = append(handlerNames, hname) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	// Service descriptor. | ||||||
|  | 	g.P("var ", serviceDescVar, " = ", grpcPkg, ".ServiceDesc {") | ||||||
|  | 	g.P("ServiceName: ", strconv.Quote(fullServName), ",") | ||||||
|  | 	g.P("HandlerType: (*", serverType, ")(nil),") | ||||||
|  | 	g.P("Methods: []", grpcPkg, ".MethodDesc{") | ||||||
|  | 	for i, method := range service.Method { | ||||||
|  | 		if method.GetServerStreaming() || method.GetClientStreaming() { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		g.P("{") | ||||||
|  | 		g.P("MethodName: ", strconv.Quote(method.GetName()), ",") | ||||||
|  | 		g.P("Handler: ", handlerNames[i], ",") | ||||||
|  | 		g.P("},") | ||||||
|  | 	} | ||||||
|  | 	g.P("},") | ||||||
|  | 	g.P("Streams: []", grpcPkg, ".StreamDesc{") | ||||||
|  | 	for i, method := range service.Method { | ||||||
|  | 		if !method.GetServerStreaming() && !method.GetClientStreaming() { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		g.P("{") | ||||||
|  | 		g.P("StreamName: ", strconv.Quote(method.GetName()), ",") | ||||||
|  | 		g.P("Handler: ", handlerNames[i], ",") | ||||||
|  | 		if method.GetServerStreaming() { | ||||||
|  | 			g.P("ServerStreams: true,") | ||||||
|  | 		} | ||||||
|  | 		if method.GetClientStreaming() { | ||||||
|  | 			g.P("ClientStreams: true,") | ||||||
|  | 		} | ||||||
|  | 		g.P("},") | ||||||
|  | 	} | ||||||
|  | 	g.P("},") | ||||||
|  | 	g.P("}") | ||||||
|  | 	g.P() | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // generateClientSignature returns the client-side signature for a method. | ||||||
|  | func (g *grpc) generateClientSignature(servName string, method *pb.MethodDescriptorProto) string { | ||||||
|  | 	origMethName := method.GetName() | ||||||
|  | 	methName := generator.CamelCase(origMethName) | ||||||
|  | 	if reservedClientName[methName] { | ||||||
|  | 		methName += "_" | ||||||
|  | 	} | ||||||
|  | 	reqArg := ", in *" + g.typeName(method.GetInputType()) | ||||||
|  | 	if method.GetClientStreaming() { | ||||||
|  | 		reqArg = "" | ||||||
|  | 	} | ||||||
|  | 	respName := "*" + g.typeName(method.GetOutputType()) | ||||||
|  | 	if method.GetServerStreaming() || method.GetClientStreaming() { | ||||||
|  | 		respName = servName + "_" + generator.CamelCase(origMethName) + "Client" | ||||||
|  | 	} | ||||||
|  | 	return fmt.Sprintf("%s(ctx %s.Context%s, opts ...%s.CallOption) (%s, error)", methName, contextPkg, reqArg, grpcPkg, respName) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (g *grpc) generateClientMethod(servName, fullServName, serviceDescVar string, method *pb.MethodDescriptorProto, descExpr string) { | ||||||
|  | 	sname := fmt.Sprintf("/%s/%s", fullServName, method.GetName()) | ||||||
|  | 	methName := generator.CamelCase(method.GetName()) | ||||||
|  | 	inType := g.typeName(method.GetInputType()) | ||||||
|  | 	outType := g.typeName(method.GetOutputType()) | ||||||
|  |  | ||||||
|  | 	g.P("func (c *", unexport(servName), "Client) ", g.generateClientSignature(servName, method), "{") | ||||||
|  | 	if !method.GetServerStreaming() && !method.GetClientStreaming() { | ||||||
|  | 		g.P("out := new(", outType, ")") | ||||||
|  | 		// TODO: Pass descExpr to Invoke. | ||||||
|  | 		g.P("err := ", grpcPkg, `.Invoke(ctx, "`, sname, `", in, out, c.cc, opts...)`) | ||||||
|  | 		g.P("if err != nil { return nil, err }") | ||||||
|  | 		g.P("return out, nil") | ||||||
|  | 		g.P("}") | ||||||
|  | 		g.P() | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 	streamType := unexport(servName) + methName + "Client" | ||||||
|  | 	g.P("stream, err := ", grpcPkg, ".NewClientStream(ctx, ", descExpr, `, c.cc, "`, sname, `", opts...)`) | ||||||
|  | 	g.P("if err != nil { return nil, err }") | ||||||
|  | 	g.P("x := &", streamType, "{stream}") | ||||||
|  | 	if !method.GetClientStreaming() { | ||||||
|  | 		g.P("if err := x.ClientStream.SendMsg(in); err != nil { return nil, err }") | ||||||
|  | 		g.P("if err := x.ClientStream.CloseSend(); err != nil { return nil, err }") | ||||||
|  | 	} | ||||||
|  | 	g.P("return x, nil") | ||||||
|  | 	g.P("}") | ||||||
|  | 	g.P() | ||||||
|  |  | ||||||
|  | 	genSend := method.GetClientStreaming() | ||||||
|  | 	genRecv := method.GetServerStreaming() | ||||||
|  | 	genCloseAndRecv := !method.GetServerStreaming() | ||||||
|  |  | ||||||
|  | 	// Stream auxiliary types and methods. | ||||||
|  | 	g.P("type ", servName, "_", methName, "Client interface {") | ||||||
|  | 	if genSend { | ||||||
|  | 		g.P("Send(*", inType, ") error") | ||||||
|  | 	} | ||||||
|  | 	if genRecv { | ||||||
|  | 		g.P("Recv() (*", outType, ", error)") | ||||||
|  | 	} | ||||||
|  | 	if genCloseAndRecv { | ||||||
|  | 		g.P("CloseAndRecv() (*", outType, ", error)") | ||||||
|  | 	} | ||||||
|  | 	g.P(grpcPkg, ".ClientStream") | ||||||
|  | 	g.P("}") | ||||||
|  | 	g.P() | ||||||
|  |  | ||||||
|  | 	g.P("type ", streamType, " struct {") | ||||||
|  | 	g.P(grpcPkg, ".ClientStream") | ||||||
|  | 	g.P("}") | ||||||
|  | 	g.P() | ||||||
|  |  | ||||||
|  | 	if genSend { | ||||||
|  | 		g.P("func (x *", streamType, ") Send(m *", inType, ") error {") | ||||||
|  | 		g.P("return x.ClientStream.SendMsg(m)") | ||||||
|  | 		g.P("}") | ||||||
|  | 		g.P() | ||||||
|  | 	} | ||||||
|  | 	if genRecv { | ||||||
|  | 		g.P("func (x *", streamType, ") Recv() (*", outType, ", error) {") | ||||||
|  | 		g.P("m := new(", outType, ")") | ||||||
|  | 		g.P("if err := x.ClientStream.RecvMsg(m); err != nil { return nil, err }") | ||||||
|  | 		g.P("return m, nil") | ||||||
|  | 		g.P("}") | ||||||
|  | 		g.P() | ||||||
|  | 	} | ||||||
|  | 	if genCloseAndRecv { | ||||||
|  | 		g.P("func (x *", streamType, ") CloseAndRecv() (*", outType, ", error) {") | ||||||
|  | 		g.P("if err := x.ClientStream.CloseSend(); err != nil { return nil, err }") | ||||||
|  | 		g.P("m := new(", outType, ")") | ||||||
|  | 		g.P("if err := x.ClientStream.RecvMsg(m); err != nil { return nil, err }") | ||||||
|  | 		g.P("return m, nil") | ||||||
|  | 		g.P("}") | ||||||
|  | 		g.P() | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // generateServerSignature returns the server-side signature for a method. | ||||||
|  | func (g *grpc) generateServerSignature(servName string, method *pb.MethodDescriptorProto) string { | ||||||
|  | 	origMethName := method.GetName() | ||||||
|  | 	methName := generator.CamelCase(origMethName) | ||||||
|  | 	if reservedClientName[methName] { | ||||||
|  | 		methName += "_" | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	var reqArgs []string | ||||||
|  | 	ret := "error" | ||||||
|  | 	if !method.GetServerStreaming() && !method.GetClientStreaming() { | ||||||
|  | 		reqArgs = append(reqArgs, contextPkg+".Context") | ||||||
|  | 		ret = "(*" + g.typeName(method.GetOutputType()) + ", error)" | ||||||
|  | 	} | ||||||
|  | 	if !method.GetClientStreaming() { | ||||||
|  | 		reqArgs = append(reqArgs, "*"+g.typeName(method.GetInputType())) | ||||||
|  | 	} | ||||||
|  | 	if method.GetServerStreaming() || method.GetClientStreaming() { | ||||||
|  | 		reqArgs = append(reqArgs, servName+"_"+generator.CamelCase(origMethName)+"Server") | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return methName + "(" + strings.Join(reqArgs, ", ") + ") " + ret | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (g *grpc) generateServerMethod(servName string, method *pb.MethodDescriptorProto) string { | ||||||
|  | 	methName := generator.CamelCase(method.GetName()) | ||||||
|  | 	hname := fmt.Sprintf("_%s_%s_Handler", servName, methName) | ||||||
|  | 	inType := g.typeName(method.GetInputType()) | ||||||
|  | 	outType := g.typeName(method.GetOutputType()) | ||||||
|  |  | ||||||
|  | 	if !method.GetServerStreaming() && !method.GetClientStreaming() { | ||||||
|  | 		g.P("func ", hname, "(srv interface{}, ctx ", contextPkg, ".Context, dec func(interface{}) error) (interface{}, error) {") | ||||||
|  | 		g.P("in := new(", inType, ")") | ||||||
|  | 		g.P("if err := dec(in); err != nil { return nil, err }") | ||||||
|  | 		g.P("out, err := srv.(", servName, "Server).", methName, "(ctx, in)") | ||||||
|  | 		g.P("if err != nil { return nil, err }") | ||||||
|  | 		g.P("return out, nil") | ||||||
|  | 		g.P("}") | ||||||
|  | 		g.P() | ||||||
|  | 		return hname | ||||||
|  | 	} | ||||||
|  | 	streamType := unexport(servName) + methName + "Server" | ||||||
|  | 	g.P("func ", hname, "(srv interface{}, stream ", grpcPkg, ".ServerStream) error {") | ||||||
|  | 	if !method.GetClientStreaming() { | ||||||
|  | 		g.P("m := new(", inType, ")") | ||||||
|  | 		g.P("if err := stream.RecvMsg(m); err != nil { return err }") | ||||||
|  | 		g.P("return srv.(", servName, "Server).", methName, "(m, &", streamType, "{stream})") | ||||||
|  | 	} else { | ||||||
|  | 		g.P("return srv.(", servName, "Server).", methName, "(&", streamType, "{stream})") | ||||||
|  | 	} | ||||||
|  | 	g.P("}") | ||||||
|  | 	g.P() | ||||||
|  |  | ||||||
|  | 	genSend := method.GetServerStreaming() | ||||||
|  | 	genSendAndClose := !method.GetServerStreaming() | ||||||
|  | 	genRecv := method.GetClientStreaming() | ||||||
|  |  | ||||||
|  | 	// Stream auxiliary types and methods. | ||||||
|  | 	g.P("type ", servName, "_", methName, "Server interface {") | ||||||
|  | 	if genSend { | ||||||
|  | 		g.P("Send(*", outType, ") error") | ||||||
|  | 	} | ||||||
|  | 	if genSendAndClose { | ||||||
|  | 		g.P("SendAndClose(*", outType, ") error") | ||||||
|  | 	} | ||||||
|  | 	if genRecv { | ||||||
|  | 		g.P("Recv() (*", inType, ", error)") | ||||||
|  | 	} | ||||||
|  | 	g.P(grpcPkg, ".ServerStream") | ||||||
|  | 	g.P("}") | ||||||
|  | 	g.P() | ||||||
|  |  | ||||||
|  | 	g.P("type ", streamType, " struct {") | ||||||
|  | 	g.P(grpcPkg, ".ServerStream") | ||||||
|  | 	g.P("}") | ||||||
|  | 	g.P() | ||||||
|  |  | ||||||
|  | 	if genSend { | ||||||
|  | 		g.P("func (x *", streamType, ") Send(m *", outType, ") error {") | ||||||
|  | 		g.P("return x.ServerStream.SendMsg(m)") | ||||||
|  | 		g.P("}") | ||||||
|  | 		g.P() | ||||||
|  | 	} | ||||||
|  | 	if genSendAndClose { | ||||||
|  | 		g.P("func (x *", streamType, ") SendAndClose(m *", outType, ") error {") | ||||||
|  | 		g.P("return x.ServerStream.SendMsg(m)") | ||||||
|  | 		g.P("}") | ||||||
|  | 		g.P() | ||||||
|  | 	} | ||||||
|  | 	if genRecv { | ||||||
|  | 		g.P("func (x *", streamType, ") Recv() (*", inType, ", error) {") | ||||||
|  | 		g.P("m := new(", inType, ")") | ||||||
|  | 		g.P("if err := x.ServerStream.RecvMsg(m); err != nil { return nil, err }") | ||||||
|  | 		g.P("return m, nil") | ||||||
|  | 		g.P("}") | ||||||
|  | 		g.P() | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return hname | ||||||
|  | } | ||||||
							
								
								
									
										1271
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/marshalto/marshalto.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1271
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/marshalto/marshalto.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										91
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/oneofcheck/oneofcheck.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/oneofcheck/oneofcheck.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,91 @@ | |||||||
|  | // Copyright (c) 2013, Vastech SA (PTY) LTD. All rights reserved. | ||||||
|  | // http://github.com/gogo/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. | ||||||
|  | // | ||||||
|  | // 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. | ||||||
|  |  | ||||||
|  | /* | ||||||
|  | The oneofcheck plugin is used to check whether oneof is not used incorrectly. | ||||||
|  | For instance: | ||||||
|  | An error is caused if a oneof field: | ||||||
|  |   - is used in a face | ||||||
|  |   - is an embedded field | ||||||
|  |  | ||||||
|  | */ | ||||||
|  | package oneofcheck | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 	"github.com/gogo/protobuf/gogoproto" | ||||||
|  | 	"github.com/gogo/protobuf/protoc-gen-gogo/generator" | ||||||
|  | 	"os" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type plugin struct { | ||||||
|  | 	*generator.Generator | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func NewPlugin() *plugin { | ||||||
|  | 	return &plugin{} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *plugin) Name() string { | ||||||
|  | 	return "oneofcheck" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *plugin) Init(g *generator.Generator) { | ||||||
|  | 	p.Generator = g | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *plugin) Generate(file *generator.FileDescriptor) { | ||||||
|  | 	for _, msg := range file.Messages() { | ||||||
|  | 		face := gogoproto.IsFace(file.FileDescriptorProto, msg.DescriptorProto) | ||||||
|  | 		for _, field := range msg.GetField() { | ||||||
|  | 			if field.OneofIndex == nil { | ||||||
|  | 				continue | ||||||
|  | 			} | ||||||
|  | 			if face { | ||||||
|  | 				fmt.Fprintf(os.Stderr, "ERROR: field %v.%v cannot be in a face and oneof\n", generator.CamelCase(*msg.Name), generator.CamelCase(*field.Name)) | ||||||
|  | 				os.Exit(1) | ||||||
|  | 			} | ||||||
|  | 			if gogoproto.IsEmbed(field) { | ||||||
|  | 				fmt.Fprintf(os.Stderr, "ERROR: field %v.%v cannot be in an oneof and an embedded field\n", generator.CamelCase(*msg.Name), generator.CamelCase(*field.Name)) | ||||||
|  | 				os.Exit(1) | ||||||
|  | 			} | ||||||
|  | 			if !gogoproto.IsNullable(field) { | ||||||
|  | 				fmt.Fprintf(os.Stderr, "ERROR: field %v.%v cannot be in an oneof and a non-nullable field\n", generator.CamelCase(*msg.Name), generator.CamelCase(*field.Name)) | ||||||
|  | 				os.Exit(1) | ||||||
|  | 			} | ||||||
|  | 			if gogoproto.IsUnion(file.FileDescriptorProto, msg.DescriptorProto) { | ||||||
|  | 				fmt.Fprintf(os.Stderr, "ERROR: field %v.%v cannot be in an oneof and in an union (deprecated)\n", generator.CamelCase(*msg.Name), generator.CamelCase(*field.Name)) | ||||||
|  | 				os.Exit(1) | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *plugin) GenerateImports(*generator.FileDescriptor) {} | ||||||
|  |  | ||||||
|  | func init() { | ||||||
|  | 	generator.RegisterPlugin(NewPlugin()) | ||||||
|  | } | ||||||
							
								
								
									
										774
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/populate/populate.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										774
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/populate/populate.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,774 @@ | |||||||
|  | // Copyright (c) 2013, Vastech SA (PTY) LTD. All rights reserved. | ||||||
|  | // http://github.com/gogo/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. | ||||||
|  | // | ||||||
|  | // 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. | ||||||
|  |  | ||||||
|  | /* | ||||||
|  | The populate plugin generates a NewPopulated function. | ||||||
|  | This function returns a newly populated structure. | ||||||
|  |  | ||||||
|  | It is enabled by the following extensions: | ||||||
|  |  | ||||||
|  |   - populate | ||||||
|  |   - populate_all | ||||||
|  |  | ||||||
|  | Let us look at: | ||||||
|  |  | ||||||
|  |   github.com/gogo/protobuf/test/example/example.proto | ||||||
|  |  | ||||||
|  | Btw all the output can be seen at: | ||||||
|  |  | ||||||
|  |   github.com/gogo/protobuf/test/example/* | ||||||
|  |  | ||||||
|  | The following message: | ||||||
|  |  | ||||||
|  |   option (gogoproto.populate_all) = true; | ||||||
|  |  | ||||||
|  |   message B { | ||||||
|  | 	optional A A = 1 [(gogoproto.nullable) = false, (gogoproto.embed) = true]; | ||||||
|  | 	repeated bytes G = 2 [(gogoproto.customtype) = "github.com/gogo/protobuf/test/custom.Uint128", (gogoproto.nullable) = false]; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  | given to the populate plugin, will generate code the following code: | ||||||
|  |  | ||||||
|  |   func NewPopulatedB(r randyExample, easy bool) *B { | ||||||
|  | 	this := &B{} | ||||||
|  | 	v2 := NewPopulatedA(r, easy) | ||||||
|  | 	this.A = *v2 | ||||||
|  | 	if r.Intn(10) != 0 { | ||||||
|  | 		v3 := r.Intn(10) | ||||||
|  | 		this.G = make([]github_com_gogo_protobuf_test_custom.Uint128, v3) | ||||||
|  | 		for i := 0; i < v3; i++ { | ||||||
|  | 			v4 := github_com_gogo_protobuf_test_custom.NewPopulatedUint128(r) | ||||||
|  | 			this.G[i] = *v4 | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	if !easy && r.Intn(10) != 0 { | ||||||
|  | 		this.XXX_unrecognized = randUnrecognizedExample(r, 3) | ||||||
|  | 	} | ||||||
|  | 	return this | ||||||
|  |   } | ||||||
|  |  | ||||||
|  | The idea that is useful for testing. | ||||||
|  | Most of the other plugins' generated test code uses it. | ||||||
|  | You will still be able to use the generated test code of other packages | ||||||
|  | if you turn off the popluate plugin and write your own custom NewPopulated function. | ||||||
|  |  | ||||||
|  | If the easy flag is not set the XXX_unrecognized and XXX_extensions fields are also populated. | ||||||
|  | These have caused problems with JSON marshalling and unmarshalling tests. | ||||||
|  |  | ||||||
|  | */ | ||||||
|  | package populate | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 	"github.com/gogo/protobuf/gogoproto" | ||||||
|  | 	"github.com/gogo/protobuf/proto" | ||||||
|  | 	descriptor "github.com/gogo/protobuf/protoc-gen-gogo/descriptor" | ||||||
|  | 	"github.com/gogo/protobuf/protoc-gen-gogo/generator" | ||||||
|  | 	"github.com/gogo/protobuf/vanity" | ||||||
|  | 	"math" | ||||||
|  | 	"strconv" | ||||||
|  | 	"strings" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type VarGen interface { | ||||||
|  | 	Next() string | ||||||
|  | 	Current() string | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type varGen struct { | ||||||
|  | 	index int64 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func NewVarGen() VarGen { | ||||||
|  | 	return &varGen{0} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (this *varGen) Next() string { | ||||||
|  | 	this.index++ | ||||||
|  | 	return fmt.Sprintf("v%d", this.index) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (this *varGen) Current() string { | ||||||
|  | 	return fmt.Sprintf("v%d", this.index) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type plugin struct { | ||||||
|  | 	*generator.Generator | ||||||
|  | 	generator.PluginImports | ||||||
|  | 	varGen     VarGen | ||||||
|  | 	atleastOne bool | ||||||
|  | 	localName  string | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func NewPlugin() *plugin { | ||||||
|  | 	return &plugin{} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *plugin) Name() string { | ||||||
|  | 	return "populate" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *plugin) Init(g *generator.Generator) { | ||||||
|  | 	p.Generator = g | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func value(typeName string, fieldType descriptor.FieldDescriptorProto_Type) string { | ||||||
|  | 	switch fieldType { | ||||||
|  | 	case descriptor.FieldDescriptorProto_TYPE_DOUBLE: | ||||||
|  | 		return typeName + "(r.Float64())" | ||||||
|  | 	case descriptor.FieldDescriptorProto_TYPE_FLOAT: | ||||||
|  | 		return typeName + "(r.Float32())" | ||||||
|  | 	case descriptor.FieldDescriptorProto_TYPE_INT64, | ||||||
|  | 		descriptor.FieldDescriptorProto_TYPE_SFIXED64, | ||||||
|  | 		descriptor.FieldDescriptorProto_TYPE_SINT64: | ||||||
|  | 		return typeName + "(r.Int63())" | ||||||
|  | 	case descriptor.FieldDescriptorProto_TYPE_UINT64, | ||||||
|  | 		descriptor.FieldDescriptorProto_TYPE_FIXED64: | ||||||
|  | 		return typeName + "(uint64(r.Uint32()))" | ||||||
|  | 	case descriptor.FieldDescriptorProto_TYPE_INT32, | ||||||
|  | 		descriptor.FieldDescriptorProto_TYPE_SINT32, | ||||||
|  | 		descriptor.FieldDescriptorProto_TYPE_SFIXED32, | ||||||
|  | 		descriptor.FieldDescriptorProto_TYPE_ENUM: | ||||||
|  | 		return typeName + "(r.Int31())" | ||||||
|  | 	case descriptor.FieldDescriptorProto_TYPE_UINT32, | ||||||
|  | 		descriptor.FieldDescriptorProto_TYPE_FIXED32: | ||||||
|  | 		return typeName + "(r.Uint32())" | ||||||
|  | 	case descriptor.FieldDescriptorProto_TYPE_BOOL: | ||||||
|  | 		return typeName + `(bool(r.Intn(2) == 0))` | ||||||
|  | 	case descriptor.FieldDescriptorProto_TYPE_STRING, | ||||||
|  | 		descriptor.FieldDescriptorProto_TYPE_GROUP, | ||||||
|  | 		descriptor.FieldDescriptorProto_TYPE_MESSAGE, | ||||||
|  | 		descriptor.FieldDescriptorProto_TYPE_BYTES: | ||||||
|  | 	} | ||||||
|  | 	panic(fmt.Errorf("unexpected type %v", typeName)) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func negative(fieldType descriptor.FieldDescriptorProto_Type) bool { | ||||||
|  | 	switch fieldType { | ||||||
|  | 	case descriptor.FieldDescriptorProto_TYPE_UINT64, | ||||||
|  | 		descriptor.FieldDescriptorProto_TYPE_FIXED64, | ||||||
|  | 		descriptor.FieldDescriptorProto_TYPE_UINT32, | ||||||
|  | 		descriptor.FieldDescriptorProto_TYPE_FIXED32, | ||||||
|  | 		descriptor.FieldDescriptorProto_TYPE_BOOL: | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | 	return true | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func getFuncName(goTypName string) string { | ||||||
|  | 	funcName := "NewPopulated" + goTypName | ||||||
|  | 	goTypNames := strings.Split(goTypName, ".") | ||||||
|  | 	if len(goTypNames) == 2 { | ||||||
|  | 		funcName = goTypNames[0] + ".NewPopulated" + goTypNames[1] | ||||||
|  | 	} else if len(goTypNames) != 1 { | ||||||
|  | 		panic(fmt.Errorf("unreachable: too many dots in %v", goTypName)) | ||||||
|  | 	} | ||||||
|  | 	return funcName | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func getFuncCall(goTypName string) string { | ||||||
|  | 	funcName := getFuncName(goTypName) | ||||||
|  | 	funcCall := funcName + "(r, easy)" | ||||||
|  | 	return funcCall | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func getCustomFuncCall(goTypName string) string { | ||||||
|  | 	funcName := getFuncName(goTypName) | ||||||
|  | 	funcCall := funcName + "(r)" | ||||||
|  | 	return funcCall | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *plugin) getEnumVal(field *descriptor.FieldDescriptorProto, goTyp string) string { | ||||||
|  | 	enum := p.ObjectNamed(field.GetTypeName()).(*generator.EnumDescriptor) | ||||||
|  | 	l := len(enum.Value) | ||||||
|  | 	values := make([]string, l) | ||||||
|  | 	for i := range enum.Value { | ||||||
|  | 		values[i] = strconv.Itoa(int(*enum.Value[i].Number)) | ||||||
|  | 	} | ||||||
|  | 	arr := "[]int32{" + strings.Join(values, ",") + "}" | ||||||
|  | 	val := strings.Join([]string{generator.GoTypeToName(goTyp), `(`, arr, `[r.Intn(`, fmt.Sprintf("%d", l), `)])`}, "") | ||||||
|  | 	return val | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *plugin) GenerateField(file *generator.FileDescriptor, message *generator.Descriptor, field *descriptor.FieldDescriptorProto) { | ||||||
|  | 	proto3 := gogoproto.IsProto3(file.FileDescriptorProto) | ||||||
|  | 	goTyp, _ := p.GoType(message, field) | ||||||
|  | 	fieldname := p.GetOneOfFieldName(message, field) | ||||||
|  | 	goTypName := generator.GoTypeToName(goTyp) | ||||||
|  | 	if p.IsMap(field) { | ||||||
|  | 		m := p.GoMapType(nil, field) | ||||||
|  | 		keygoTyp, _ := p.GoType(nil, m.KeyField) | ||||||
|  | 		keygoTyp = strings.Replace(keygoTyp, "*", "", 1) | ||||||
|  | 		keygoAliasTyp, _ := p.GoType(nil, m.KeyAliasField) | ||||||
|  | 		keygoAliasTyp = strings.Replace(keygoAliasTyp, "*", "", 1) | ||||||
|  |  | ||||||
|  | 		valuegoTyp, _ := p.GoType(nil, m.ValueField) | ||||||
|  | 		valuegoAliasTyp, _ := p.GoType(nil, m.ValueAliasField) | ||||||
|  | 		keytypName := generator.GoTypeToName(keygoTyp) | ||||||
|  | 		keygoAliasTyp = generator.GoTypeToName(keygoAliasTyp) | ||||||
|  | 		valuetypAliasName := generator.GoTypeToName(valuegoAliasTyp) | ||||||
|  |  | ||||||
|  | 		nullable, valuegoTyp, valuegoAliasTyp := generator.GoMapValueTypes(field, m.ValueField, valuegoTyp, valuegoAliasTyp) | ||||||
|  |  | ||||||
|  | 		p.P(p.varGen.Next(), ` := r.Intn(10)`) | ||||||
|  | 		p.P(`this.`, fieldname, ` = make(`, m.GoType, `)`) | ||||||
|  | 		p.P(`for i := 0; i < `, p.varGen.Current(), `; i++ {`) | ||||||
|  | 		p.In() | ||||||
|  | 		keyval := "" | ||||||
|  | 		if m.KeyField.IsString() { | ||||||
|  | 			keyval = fmt.Sprintf("randString%v(r)", p.localName) | ||||||
|  | 		} else { | ||||||
|  | 			keyval = value(keytypName, m.KeyField.GetType()) | ||||||
|  | 		} | ||||||
|  | 		if keygoAliasTyp != keygoTyp { | ||||||
|  | 			keyval = keygoAliasTyp + `(` + keyval + `)` | ||||||
|  | 		} | ||||||
|  | 		if m.ValueField.IsMessage() || p.IsGroup(field) { | ||||||
|  | 			s := `this.` + fieldname + `[` + keyval + `] = ` | ||||||
|  | 			goTypName := generator.GoTypeToName(valuegoTyp) | ||||||
|  | 			funcCall := getFuncCall(goTypName) | ||||||
|  | 			if !nullable { | ||||||
|  | 				funcCall = `*` + funcCall | ||||||
|  | 			} | ||||||
|  | 			if valuegoTyp != valuegoAliasTyp { | ||||||
|  | 				funcCall = `(` + valuegoAliasTyp + `)(` + funcCall + `)` | ||||||
|  | 			} | ||||||
|  | 			s += funcCall | ||||||
|  | 			p.P(s) | ||||||
|  | 		} else if m.ValueField.IsEnum() { | ||||||
|  | 			s := `this.` + fieldname + `[` + keyval + `]` + ` = ` + p.getEnumVal(m.ValueField, valuegoTyp) | ||||||
|  | 			p.P(s) | ||||||
|  | 		} else if m.ValueField.IsBytes() { | ||||||
|  | 			count := p.varGen.Next() | ||||||
|  | 			p.P(count, ` := r.Intn(100)`) | ||||||
|  | 			p.P(p.varGen.Next(), ` := `, keyval) | ||||||
|  | 			p.P(`this.`, fieldname, `[`, p.varGen.Current(), `] = make(`, valuegoTyp, `, `, count, `)`) | ||||||
|  | 			p.P(`for i := 0; i < `, count, `; i++ {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`this.`, fieldname, `[`, p.varGen.Current(), `][i] = byte(r.Intn(256))`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 		} else if m.ValueField.IsString() { | ||||||
|  | 			s := `this.` + fieldname + `[` + keyval + `]` + ` = ` + fmt.Sprintf("randString%v(r)", p.localName) | ||||||
|  | 			p.P(s) | ||||||
|  | 		} else { | ||||||
|  | 			p.P(p.varGen.Next(), ` := `, keyval) | ||||||
|  | 			p.P(`this.`, fieldname, `[`, p.varGen.Current(), `] = `, value(valuetypAliasName, m.ValueField.GetType())) | ||||||
|  | 			if negative(m.ValueField.GetType()) { | ||||||
|  | 				p.P(`if r.Intn(2) == 0 {`) | ||||||
|  | 				p.In() | ||||||
|  | 				p.P(`this.`, fieldname, `[`, p.varGen.Current(), `] *= -1`) | ||||||
|  | 				p.Out() | ||||||
|  | 				p.P(`}`) | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		p.Out() | ||||||
|  | 		p.P(`}`) | ||||||
|  | 	} else if field.IsMessage() || p.IsGroup(field) { | ||||||
|  | 		funcCall := getFuncCall(goTypName) | ||||||
|  | 		if field.IsRepeated() { | ||||||
|  | 			p.P(p.varGen.Next(), ` := r.Intn(10)`) | ||||||
|  | 			p.P(`this.`, fieldname, ` = make(`, goTyp, `, `, p.varGen.Current(), `)`) | ||||||
|  | 			p.P(`for i := 0; i < `, p.varGen.Current(), `; i++ {`) | ||||||
|  | 			p.In() | ||||||
|  | 			if gogoproto.IsNullable(field) { | ||||||
|  | 				p.P(`this.`, fieldname, `[i] = `, funcCall) | ||||||
|  | 			} else { | ||||||
|  | 				p.P(p.varGen.Next(), `:= `, funcCall) | ||||||
|  | 				p.P(`this.`, fieldname, `[i] = *`, p.varGen.Current()) | ||||||
|  | 			} | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 		} else { | ||||||
|  | 			if gogoproto.IsNullable(field) { | ||||||
|  | 				p.P(`this.`, fieldname, ` = `, funcCall) | ||||||
|  | 			} else { | ||||||
|  | 				p.P(p.varGen.Next(), `:= `, funcCall) | ||||||
|  | 				p.P(`this.`, fieldname, ` = *`, p.varGen.Current()) | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} else { | ||||||
|  | 		if field.IsEnum() { | ||||||
|  | 			val := p.getEnumVal(field, goTyp) | ||||||
|  | 			if field.IsRepeated() { | ||||||
|  | 				p.P(p.varGen.Next(), ` := r.Intn(10)`) | ||||||
|  | 				p.P(`this.`, fieldname, ` = make(`, goTyp, `, `, p.varGen.Current(), `)`) | ||||||
|  | 				p.P(`for i := 0; i < `, p.varGen.Current(), `; i++ {`) | ||||||
|  | 				p.In() | ||||||
|  | 				p.P(`this.`, fieldname, `[i] = `, val) | ||||||
|  | 				p.Out() | ||||||
|  | 				p.P(`}`) | ||||||
|  | 			} else if !gogoproto.IsNullable(field) || proto3 { | ||||||
|  | 				p.P(`this.`, fieldname, ` = `, val) | ||||||
|  | 			} else { | ||||||
|  | 				p.P(p.varGen.Next(), ` := `, val) | ||||||
|  | 				p.P(`this.`, fieldname, ` = &`, p.varGen.Current()) | ||||||
|  | 			} | ||||||
|  | 		} else if gogoproto.IsCustomType(field) { | ||||||
|  | 			funcCall := getCustomFuncCall(goTypName) | ||||||
|  | 			if field.IsRepeated() { | ||||||
|  | 				p.P(p.varGen.Next(), ` := r.Intn(10)`) | ||||||
|  | 				p.P(`this.`, fieldname, ` = make(`, goTyp, `, `, p.varGen.Current(), `)`) | ||||||
|  | 				p.P(`for i := 0; i < `, p.varGen.Current(), `; i++ {`) | ||||||
|  | 				p.In() | ||||||
|  | 				p.P(p.varGen.Next(), `:= `, funcCall) | ||||||
|  | 				p.P(`this.`, fieldname, `[i] = *`, p.varGen.Current()) | ||||||
|  | 				p.Out() | ||||||
|  | 				p.P(`}`) | ||||||
|  | 			} else if gogoproto.IsNullable(field) { | ||||||
|  | 				p.P(`this.`, fieldname, ` = `, funcCall) | ||||||
|  | 			} else { | ||||||
|  | 				p.P(p.varGen.Next(), `:= `, funcCall) | ||||||
|  | 				p.P(`this.`, fieldname, ` = *`, p.varGen.Current()) | ||||||
|  | 			} | ||||||
|  | 		} else if field.IsBytes() { | ||||||
|  | 			if field.IsRepeated() { | ||||||
|  | 				p.P(p.varGen.Next(), ` := r.Intn(100)`) | ||||||
|  | 				p.P(`this.`, fieldname, ` = make(`, goTyp, `, `, p.varGen.Current(), `)`) | ||||||
|  | 				p.P(`for i := 0; i < `, p.varGen.Current(), `; i++ {`) | ||||||
|  | 				p.In() | ||||||
|  | 				p.P(p.varGen.Next(), ` := r.Intn(100)`) | ||||||
|  | 				p.P(`this.`, fieldname, `[i] = make([]byte,`, p.varGen.Current(), `)`) | ||||||
|  | 				p.P(`for j := 0; j < `, p.varGen.Current(), `; j++ {`) | ||||||
|  | 				p.In() | ||||||
|  | 				p.P(`this.`, fieldname, `[i][j] = byte(r.Intn(256))`) | ||||||
|  | 				p.Out() | ||||||
|  | 				p.P(`}`) | ||||||
|  | 				p.Out() | ||||||
|  | 				p.P(`}`) | ||||||
|  | 			} else { | ||||||
|  | 				p.P(p.varGen.Next(), ` := r.Intn(100)`) | ||||||
|  | 				p.P(`this.`, fieldname, ` = make(`, goTyp, `, `, p.varGen.Current(), `)`) | ||||||
|  | 				p.P(`for i := 0; i < `, p.varGen.Current(), `; i++ {`) | ||||||
|  | 				p.In() | ||||||
|  | 				p.P(`this.`, fieldname, `[i] = byte(r.Intn(256))`) | ||||||
|  | 				p.Out() | ||||||
|  | 				p.P(`}`) | ||||||
|  | 			} | ||||||
|  | 		} else if field.IsString() { | ||||||
|  | 			val := fmt.Sprintf("randString%v(r)", p.localName) | ||||||
|  | 			if field.IsRepeated() { | ||||||
|  | 				p.P(p.varGen.Next(), ` := r.Intn(10)`) | ||||||
|  | 				p.P(`this.`, fieldname, ` = make(`, goTyp, `, `, p.varGen.Current(), `)`) | ||||||
|  | 				p.P(`for i := 0; i < `, p.varGen.Current(), `; i++ {`) | ||||||
|  | 				p.In() | ||||||
|  | 				p.P(`this.`, fieldname, `[i] = `, val) | ||||||
|  | 				p.Out() | ||||||
|  | 				p.P(`}`) | ||||||
|  | 			} else if !gogoproto.IsNullable(field) || proto3 { | ||||||
|  | 				p.P(`this.`, fieldname, ` = `, val) | ||||||
|  | 			} else { | ||||||
|  | 				p.P(p.varGen.Next(), `:= `, val) | ||||||
|  | 				p.P(`this.`, fieldname, ` = &`, p.varGen.Current()) | ||||||
|  | 			} | ||||||
|  | 		} else { | ||||||
|  | 			typName := generator.GoTypeToName(goTyp) | ||||||
|  | 			if field.IsRepeated() { | ||||||
|  | 				p.P(p.varGen.Next(), ` := r.Intn(100)`) | ||||||
|  | 				p.P(`this.`, fieldname, ` = make(`, goTyp, `, `, p.varGen.Current(), `)`) | ||||||
|  | 				p.P(`for i := 0; i < `, p.varGen.Current(), `; i++ {`) | ||||||
|  | 				p.In() | ||||||
|  | 				p.P(`this.`, fieldname, `[i] = `, value(typName, field.GetType())) | ||||||
|  | 				if negative(field.GetType()) { | ||||||
|  | 					p.P(`if r.Intn(2) == 0 {`) | ||||||
|  | 					p.In() | ||||||
|  | 					p.P(`this.`, fieldname, `[i] *= -1`) | ||||||
|  | 					p.Out() | ||||||
|  | 					p.P(`}`) | ||||||
|  | 				} | ||||||
|  | 				p.Out() | ||||||
|  | 				p.P(`}`) | ||||||
|  | 			} else if !gogoproto.IsNullable(field) || proto3 { | ||||||
|  | 				p.P(`this.`, fieldname, ` = `, value(typName, field.GetType())) | ||||||
|  | 				if negative(field.GetType()) { | ||||||
|  | 					p.P(`if r.Intn(2) == 0 {`) | ||||||
|  | 					p.In() | ||||||
|  | 					p.P(`this.`, fieldname, ` *= -1`) | ||||||
|  | 					p.Out() | ||||||
|  | 					p.P(`}`) | ||||||
|  | 				} | ||||||
|  | 			} else { | ||||||
|  | 				p.P(p.varGen.Next(), ` := `, value(typName, field.GetType())) | ||||||
|  | 				if negative(field.GetType()) { | ||||||
|  | 					p.P(`if r.Intn(2) == 0 {`) | ||||||
|  | 					p.In() | ||||||
|  | 					p.P(p.varGen.Current(), ` *= -1`) | ||||||
|  | 					p.Out() | ||||||
|  | 					p.P(`}`) | ||||||
|  | 				} | ||||||
|  | 				p.P(`this.`, fieldname, ` = &`, p.varGen.Current()) | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *plugin) hasLoop(field *descriptor.FieldDescriptorProto, visited []*generator.Descriptor, excludes []*generator.Descriptor) *generator.Descriptor { | ||||||
|  | 	if field.IsMessage() || p.IsGroup(field) || p.IsMap(field) { | ||||||
|  | 		var fieldMessage *generator.Descriptor | ||||||
|  | 		if p.IsMap(field) { | ||||||
|  | 			m := p.GoMapType(nil, field) | ||||||
|  | 			if !m.ValueField.IsMessage() { | ||||||
|  | 				return nil | ||||||
|  | 			} | ||||||
|  | 			fieldMessage = p.ObjectNamed(m.ValueField.GetTypeName()).(*generator.Descriptor) | ||||||
|  | 		} else { | ||||||
|  | 			fieldMessage = p.ObjectNamed(field.GetTypeName()).(*generator.Descriptor) | ||||||
|  | 		} | ||||||
|  | 		fieldTypeName := generator.CamelCaseSlice(fieldMessage.TypeName()) | ||||||
|  | 		for _, message := range visited { | ||||||
|  | 			messageTypeName := generator.CamelCaseSlice(message.TypeName()) | ||||||
|  | 			if fieldTypeName == messageTypeName { | ||||||
|  | 				for _, e := range excludes { | ||||||
|  | 					if fieldTypeName == generator.CamelCaseSlice(e.TypeName()) { | ||||||
|  | 						return nil | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 				return fieldMessage | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		for _, f := range fieldMessage.Field { | ||||||
|  | 			visited = append(visited, fieldMessage) | ||||||
|  | 			loopTo := p.hasLoop(f, visited, excludes) | ||||||
|  | 			if loopTo != nil { | ||||||
|  | 				return loopTo | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *plugin) loops(field *descriptor.FieldDescriptorProto, message *generator.Descriptor) int { | ||||||
|  | 	//fmt.Fprintf(os.Stderr, "loops %v %v\n", field.GetTypeName(), generator.CamelCaseSlice(message.TypeName())) | ||||||
|  | 	excludes := []*generator.Descriptor{} | ||||||
|  | 	loops := 0 | ||||||
|  | 	for { | ||||||
|  | 		visited := []*generator.Descriptor{} | ||||||
|  | 		loopTo := p.hasLoop(field, visited, excludes) | ||||||
|  | 		if loopTo == nil { | ||||||
|  | 			break | ||||||
|  | 		} | ||||||
|  | 		//fmt.Fprintf(os.Stderr, "loopTo %v\n", generator.CamelCaseSlice(loopTo.TypeName())) | ||||||
|  | 		excludes = append(excludes, loopTo) | ||||||
|  | 		loops++ | ||||||
|  | 	} | ||||||
|  | 	return loops | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *plugin) Generate(file *generator.FileDescriptor) { | ||||||
|  | 	p.atleastOne = false | ||||||
|  | 	p.PluginImports = generator.NewPluginImports(p.Generator) | ||||||
|  | 	p.varGen = NewVarGen() | ||||||
|  | 	proto3 := gogoproto.IsProto3(file.FileDescriptorProto) | ||||||
|  |  | ||||||
|  | 	p.localName = generator.FileName(file) | ||||||
|  | 	protoPkg := p.NewImport("github.com/gogo/protobuf/proto") | ||||||
|  | 	if !gogoproto.ImportsGoGoProto(file.FileDescriptorProto) { | ||||||
|  | 		protoPkg = p.NewImport("github.com/golang/protobuf/proto") | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	for _, message := range file.Messages() { | ||||||
|  | 		if !gogoproto.HasPopulate(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		if message.DescriptorProto.GetOptions().GetMapEntry() { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		p.atleastOne = true | ||||||
|  | 		ccTypeName := generator.CamelCaseSlice(message.TypeName()) | ||||||
|  | 		loopLevels := make([]int, len(message.Field)) | ||||||
|  | 		maxLoopLevel := 0 | ||||||
|  | 		for i, field := range message.Field { | ||||||
|  | 			loopLevels[i] = p.loops(field, message) | ||||||
|  | 			if loopLevels[i] > maxLoopLevel { | ||||||
|  | 				maxLoopLevel = loopLevels[i] | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		ranTotal := 0 | ||||||
|  | 		for i := range loopLevels { | ||||||
|  | 			ranTotal += int(math.Pow10(maxLoopLevel - loopLevels[i])) | ||||||
|  | 		} | ||||||
|  | 		p.P(`func NewPopulated`, ccTypeName, `(r randy`, p.localName, `, easy bool) *`, ccTypeName, ` {`) | ||||||
|  | 		p.In() | ||||||
|  | 		p.P(`this := &`, ccTypeName, `{}`) | ||||||
|  | 		if gogoproto.IsUnion(message.File(), message.DescriptorProto) && len(message.Field) > 0 { | ||||||
|  | 			p.P(`fieldNum := r.Intn(`, fmt.Sprintf("%d", ranTotal), `)`) | ||||||
|  | 			p.P(`switch fieldNum {`) | ||||||
|  | 			k := 0 | ||||||
|  | 			for i, field := range message.Field { | ||||||
|  | 				is := []string{} | ||||||
|  | 				ran := int(math.Pow10(maxLoopLevel - loopLevels[i])) | ||||||
|  | 				for j := 0; j < ran; j++ { | ||||||
|  | 					is = append(is, fmt.Sprintf("%d", j+k)) | ||||||
|  | 				} | ||||||
|  | 				k += ran | ||||||
|  | 				p.P(`case `, strings.Join(is, ","), `:`) | ||||||
|  | 				p.In() | ||||||
|  | 				p.GenerateField(file, message, field) | ||||||
|  | 				p.Out() | ||||||
|  | 			} | ||||||
|  | 			p.P(`}`) | ||||||
|  | 		} else { | ||||||
|  | 			var maxFieldNumber int32 | ||||||
|  | 			oneofs := make(map[string]struct{}) | ||||||
|  | 			for fieldIndex, field := range message.Field { | ||||||
|  | 				if field.GetNumber() > maxFieldNumber { | ||||||
|  | 					maxFieldNumber = field.GetNumber() | ||||||
|  | 				} | ||||||
|  | 				oneof := field.OneofIndex != nil | ||||||
|  | 				if !oneof { | ||||||
|  | 					if field.IsRequired() || (!gogoproto.IsNullable(field) && !field.IsRepeated()) || (proto3 && !field.IsMessage()) { | ||||||
|  | 						p.GenerateField(file, message, field) | ||||||
|  | 					} else { | ||||||
|  | 						if loopLevels[fieldIndex] > 0 { | ||||||
|  | 							p.P(`if r.Intn(10) == 0 {`) | ||||||
|  | 						} else { | ||||||
|  | 							p.P(`if r.Intn(10) != 0 {`) | ||||||
|  | 						} | ||||||
|  | 						p.In() | ||||||
|  | 						p.GenerateField(file, message, field) | ||||||
|  | 						p.Out() | ||||||
|  | 						p.P(`}`) | ||||||
|  | 					} | ||||||
|  | 				} else { | ||||||
|  | 					fieldname := p.GetFieldName(message, field) | ||||||
|  | 					if _, ok := oneofs[fieldname]; ok { | ||||||
|  | 						continue | ||||||
|  | 					} else { | ||||||
|  | 						oneofs[fieldname] = struct{}{} | ||||||
|  | 					} | ||||||
|  | 					fieldNumbers := []int32{} | ||||||
|  | 					for _, f := range message.Field { | ||||||
|  | 						fname := p.GetFieldName(message, f) | ||||||
|  | 						if fname == fieldname { | ||||||
|  | 							fieldNumbers = append(fieldNumbers, f.GetNumber()) | ||||||
|  | 						} | ||||||
|  | 					} | ||||||
|  |  | ||||||
|  | 					p.P(`oneofNumber_`, fieldname, ` := `, fmt.Sprintf("%#v", fieldNumbers), `[r.Intn(`, strconv.Itoa(len(fieldNumbers)), `)]`) | ||||||
|  | 					p.P(`switch oneofNumber_`, fieldname, ` {`) | ||||||
|  | 					for _, f := range message.Field { | ||||||
|  | 						fname := p.GetFieldName(message, f) | ||||||
|  | 						if fname != fieldname { | ||||||
|  | 							continue | ||||||
|  | 						} | ||||||
|  | 						p.P(`case `, strconv.Itoa(int(f.GetNumber())), `:`) | ||||||
|  | 						p.In() | ||||||
|  | 						ccTypeName := p.OneOfTypeName(message, f) | ||||||
|  | 						p.P(`this.`, fname, ` = NewPopulated`, ccTypeName, `(r, easy)`) | ||||||
|  | 						p.Out() | ||||||
|  | 					} | ||||||
|  | 					p.P(`}`) | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			if message.DescriptorProto.HasExtension() { | ||||||
|  | 				p.P(`if !easy && r.Intn(10) != 0 {`) | ||||||
|  | 				p.In() | ||||||
|  | 				p.P(`l := r.Intn(5)`) | ||||||
|  | 				p.P(`for i := 0; i < l; i++ {`) | ||||||
|  | 				p.In() | ||||||
|  | 				if len(message.DescriptorProto.GetExtensionRange()) > 1 { | ||||||
|  | 					p.P(`eIndex := r.Intn(`, strconv.Itoa(len(message.DescriptorProto.GetExtensionRange())), `)`) | ||||||
|  | 					p.P(`fieldNumber := 0`) | ||||||
|  | 					p.P(`switch eIndex {`) | ||||||
|  | 					for i, e := range message.DescriptorProto.GetExtensionRange() { | ||||||
|  | 						p.P(`case `, strconv.Itoa(i), `:`) | ||||||
|  | 						p.In() | ||||||
|  | 						p.P(`fieldNumber = r.Intn(`, strconv.Itoa(int(e.GetEnd()-e.GetStart())), `) + `, strconv.Itoa(int(e.GetStart()))) | ||||||
|  | 						p.Out() | ||||||
|  | 						if e.GetEnd() > maxFieldNumber { | ||||||
|  | 							maxFieldNumber = e.GetEnd() | ||||||
|  | 						} | ||||||
|  | 					} | ||||||
|  | 					p.P(`}`) | ||||||
|  | 				} else { | ||||||
|  | 					e := message.DescriptorProto.GetExtensionRange()[0] | ||||||
|  | 					p.P(`fieldNumber := r.Intn(`, strconv.Itoa(int(e.GetEnd()-e.GetStart())), `) + `, strconv.Itoa(int(e.GetStart()))) | ||||||
|  | 					if e.GetEnd() > maxFieldNumber { | ||||||
|  | 						maxFieldNumber = e.GetEnd() | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 				p.P(`wire := r.Intn(4)`) | ||||||
|  | 				p.P(`if wire == 3 { wire = 5 }`) | ||||||
|  | 				p.P(`data := randField`, p.localName, `(nil, r, fieldNumber, wire)`) | ||||||
|  | 				p.P(protoPkg.Use(), `.SetRawExtension(this, int32(fieldNumber), data)`) | ||||||
|  | 				p.Out() | ||||||
|  | 				p.P(`}`) | ||||||
|  | 				p.Out() | ||||||
|  | 				p.P(`}`) | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			if maxFieldNumber < (1 << 10) { | ||||||
|  | 				p.P(`if !easy && r.Intn(10) != 0 {`) | ||||||
|  | 				p.In() | ||||||
|  | 				if gogoproto.HasUnrecognized(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 					p.P(`this.XXX_unrecognized = randUnrecognized`, p.localName, `(r, `, strconv.Itoa(int(maxFieldNumber+1)), `)`) | ||||||
|  | 				} | ||||||
|  | 				p.Out() | ||||||
|  | 				p.P(`}`) | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		p.P(`return this`) | ||||||
|  | 		p.Out() | ||||||
|  | 		p.P(`}`) | ||||||
|  | 		p.P(``) | ||||||
|  |  | ||||||
|  | 		//Generate NewPopulated functions for oneof fields | ||||||
|  | 		m := proto.Clone(message.DescriptorProto).(*descriptor.DescriptorProto) | ||||||
|  | 		for _, f := range m.Field { | ||||||
|  | 			oneof := f.OneofIndex != nil | ||||||
|  | 			if !oneof { | ||||||
|  | 				continue | ||||||
|  | 			} | ||||||
|  | 			ccTypeName := p.OneOfTypeName(message, f) | ||||||
|  | 			p.P(`func NewPopulated`, ccTypeName, `(r randy`, p.localName, `, easy bool) *`, ccTypeName, ` {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`this := &`, ccTypeName, `{}`) | ||||||
|  | 			vanity.TurnOffNullableForNativeTypesWithoutDefaultsOnly(f) | ||||||
|  | 			p.GenerateField(file, message, f) | ||||||
|  | 			p.P(`return this`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if !p.atleastOne { | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	p.P(`type randy`, p.localName, ` interface {`) | ||||||
|  | 	p.In() | ||||||
|  | 	p.P(`Float32() float32`) | ||||||
|  | 	p.P(`Float64() float64`) | ||||||
|  | 	p.P(`Int63() int64`) | ||||||
|  | 	p.P(`Int31() int32`) | ||||||
|  | 	p.P(`Uint32() uint32`) | ||||||
|  | 	p.P(`Intn(n int) int`) | ||||||
|  | 	p.Out() | ||||||
|  | 	p.P(`}`) | ||||||
|  |  | ||||||
|  | 	p.P(`func randUTF8Rune`, p.localName, `(r randy`, p.localName, `) rune {`) | ||||||
|  | 	p.In() | ||||||
|  | 	p.P(`ru := r.Intn(62)`) | ||||||
|  | 	p.P(`if ru < 10 {`) | ||||||
|  | 	p.In() | ||||||
|  | 	p.P(`return rune(ru+48)`) | ||||||
|  | 	p.Out() | ||||||
|  | 	p.P(`} else if ru < 36 {`) | ||||||
|  | 	p.In() | ||||||
|  | 	p.P(`return rune(ru+55)`) | ||||||
|  | 	p.Out() | ||||||
|  | 	p.P(`}`) | ||||||
|  | 	p.P(`return rune(ru+61)`) | ||||||
|  | 	p.Out() | ||||||
|  | 	p.P(`}`) | ||||||
|  |  | ||||||
|  | 	p.P(`func randString`, p.localName, `(r randy`, p.localName, `) string {`) | ||||||
|  | 	p.In() | ||||||
|  | 	p.P(p.varGen.Next(), ` := r.Intn(100)`) | ||||||
|  | 	p.P(`tmps := make([]rune, `, p.varGen.Current(), `)`) | ||||||
|  | 	p.P(`for i := 0; i < `, p.varGen.Current(), `; i++ {`) | ||||||
|  | 	p.In() | ||||||
|  | 	p.P(`tmps[i] = randUTF8Rune`, p.localName, `(r)`) | ||||||
|  | 	p.Out() | ||||||
|  | 	p.P(`}`) | ||||||
|  | 	p.P(`return string(tmps)`) | ||||||
|  | 	p.Out() | ||||||
|  | 	p.P(`}`) | ||||||
|  |  | ||||||
|  | 	p.P(`func randUnrecognized`, p.localName, `(r randy`, p.localName, `, maxFieldNumber int) (data []byte) {`) | ||||||
|  | 	p.In() | ||||||
|  | 	p.P(`l := r.Intn(5)`) | ||||||
|  | 	p.P(`for i := 0; i < l; i++ {`) | ||||||
|  | 	p.In() | ||||||
|  | 	p.P(`wire := r.Intn(4)`) | ||||||
|  | 	p.P(`if wire == 3 { wire = 5 }`) | ||||||
|  | 	p.P(`fieldNumber := maxFieldNumber + r.Intn(100)`) | ||||||
|  | 	p.P(`data = randField`, p.localName, `(data, r, fieldNumber, wire)`) | ||||||
|  | 	p.Out() | ||||||
|  | 	p.P(`}`) | ||||||
|  | 	p.P(`return data`) | ||||||
|  | 	p.Out() | ||||||
|  | 	p.P(`}`) | ||||||
|  |  | ||||||
|  | 	p.P(`func randField`, p.localName, `(data []byte, r randy`, p.localName, `, fieldNumber int, wire int) []byte {`) | ||||||
|  | 	p.In() | ||||||
|  | 	p.P(`key := uint32(fieldNumber)<<3 | uint32(wire)`) | ||||||
|  | 	p.P(`switch wire {`) | ||||||
|  | 	p.P(`case 0:`) | ||||||
|  | 	p.In() | ||||||
|  | 	p.P(`data = encodeVarintPopulate`, p.localName, `(data, uint64(key))`) | ||||||
|  | 	p.P(p.varGen.Next(), ` := r.Int63()`) | ||||||
|  | 	p.P(`if r.Intn(2) == 0 {`) | ||||||
|  | 	p.In() | ||||||
|  | 	p.P(p.varGen.Current(), ` *= -1`) | ||||||
|  | 	p.Out() | ||||||
|  | 	p.P(`}`) | ||||||
|  | 	p.P(`data = encodeVarintPopulate`, p.localName, `(data, uint64(`, p.varGen.Current(), `))`) | ||||||
|  | 	p.Out() | ||||||
|  | 	p.P(`case 1:`) | ||||||
|  | 	p.In() | ||||||
|  | 	p.P(`data = encodeVarintPopulate`, p.localName, `(data, uint64(key))`) | ||||||
|  | 	p.P(`data = append(data, byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)))`) | ||||||
|  | 	p.Out() | ||||||
|  | 	p.P(`case 2:`) | ||||||
|  | 	p.In() | ||||||
|  | 	p.P(`data = encodeVarintPopulate`, p.localName, `(data, uint64(key))`) | ||||||
|  | 	p.P(`ll := r.Intn(100)`) | ||||||
|  | 	p.P(`data = encodeVarintPopulate`, p.localName, `(data, uint64(ll))`) | ||||||
|  | 	p.P(`for j := 0; j < ll; j++ {`) | ||||||
|  | 	p.In() | ||||||
|  | 	p.P(`data = append(data, byte(r.Intn(256)))`) | ||||||
|  | 	p.Out() | ||||||
|  | 	p.P(`}`) | ||||||
|  | 	p.Out() | ||||||
|  | 	p.P(`default:`) | ||||||
|  | 	p.In() | ||||||
|  | 	p.P(`data = encodeVarintPopulate`, p.localName, `(data, uint64(key))`) | ||||||
|  | 	p.P(`data = append(data, byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)))`) | ||||||
|  | 	p.Out() | ||||||
|  | 	p.P(`}`) | ||||||
|  | 	p.P(`return data`) | ||||||
|  | 	p.Out() | ||||||
|  | 	p.P(`}`) | ||||||
|  |  | ||||||
|  | 	p.P(`func encodeVarintPopulate`, p.localName, `(data []byte, v uint64) []byte {`) | ||||||
|  | 	p.In() | ||||||
|  | 	p.P(`for v >= 1<<7 {`) | ||||||
|  | 	p.In() | ||||||
|  | 	p.P(`data = append(data, uint8(uint64(v)&0x7f|0x80))`) | ||||||
|  | 	p.P(`v >>= 7`) | ||||||
|  | 	p.Out() | ||||||
|  | 	p.P(`}`) | ||||||
|  | 	p.P(`data = append(data, uint8(v))`) | ||||||
|  | 	p.P(`return data`) | ||||||
|  | 	p.Out() | ||||||
|  | 	p.P(`}`) | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func init() { | ||||||
|  | 	generator.RegisterPlugin(NewPlugin()) | ||||||
|  | } | ||||||
							
								
								
									
										590
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/size/size.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										590
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/size/size.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,590 @@ | |||||||
|  | // Copyright (c) 2013, Vastech SA (PTY) LTD. All rights reserved. | ||||||
|  | // http://github.com/gogo/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. | ||||||
|  | // | ||||||
|  | // 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. | ||||||
|  |  | ||||||
|  | /* | ||||||
|  | The size plugin generates a Size method for each message. | ||||||
|  | This is useful with the MarshalTo method generated by the marshalto plugin and the | ||||||
|  | gogoproto.marshaler and gogoproto.marshaler_all extensions. | ||||||
|  |  | ||||||
|  | It is enabled by the following extensions: | ||||||
|  |  | ||||||
|  |   - sizer | ||||||
|  |   - sizer_all | ||||||
|  |  | ||||||
|  | The size plugin also generates a test given it is enabled using one of the following extensions: | ||||||
|  |  | ||||||
|  |   - testgen | ||||||
|  |   - testgen_all | ||||||
|  |  | ||||||
|  | And a benchmark given it is enabled using one of the following extensions: | ||||||
|  |  | ||||||
|  |   - benchgen | ||||||
|  |   - benchgen_all | ||||||
|  |  | ||||||
|  | Let us look at: | ||||||
|  |  | ||||||
|  |   github.com/gogo/protobuf/test/example/example.proto | ||||||
|  |  | ||||||
|  | Btw all the output can be seen at: | ||||||
|  |  | ||||||
|  |   github.com/gogo/protobuf/test/example/* | ||||||
|  |  | ||||||
|  | The following message: | ||||||
|  |  | ||||||
|  |   option (gogoproto.sizer_all) = true; | ||||||
|  |  | ||||||
|  |   message B { | ||||||
|  | 	option (gogoproto.description) = true; | ||||||
|  | 	optional A A = 1 [(gogoproto.nullable) = false, (gogoproto.embed) = true]; | ||||||
|  | 	repeated bytes G = 2 [(gogoproto.customtype) = "github.com/gogo/protobuf/test/custom.Uint128", (gogoproto.nullable) = false]; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  | given to the size plugin, will generate the following code: | ||||||
|  |  | ||||||
|  |   func (m *B) Size() (n int) { | ||||||
|  | 	var l int | ||||||
|  | 	_ = l | ||||||
|  | 	l = m.A.Size() | ||||||
|  | 	n += 1 + l + sovExample(uint64(l)) | ||||||
|  | 	if len(m.G) > 0 { | ||||||
|  | 		for _, e := range m.G { | ||||||
|  | 			l = e.Size() | ||||||
|  | 			n += 1 + l + sovExample(uint64(l)) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	if m.XXX_unrecognized != nil { | ||||||
|  | 		n += len(m.XXX_unrecognized) | ||||||
|  | 	} | ||||||
|  | 	return n | ||||||
|  |   } | ||||||
|  |  | ||||||
|  | and the following test code: | ||||||
|  |  | ||||||
|  | 	func TestBSize(t *testing5.T) { | ||||||
|  | 		popr := math_rand5.New(math_rand5.NewSource(time5.Now().UnixNano())) | ||||||
|  | 		p := NewPopulatedB(popr, true) | ||||||
|  | 		data, err := github_com_gogo_protobuf_proto2.Marshal(p) | ||||||
|  | 		if err != nil { | ||||||
|  | 			panic(err) | ||||||
|  | 		} | ||||||
|  | 		size := p.Size() | ||||||
|  | 		if len(data) != size { | ||||||
|  | 			t.Fatalf("size %v != marshalled size %v", size, len(data)) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	func BenchmarkBSize(b *testing5.B) { | ||||||
|  | 		popr := math_rand5.New(math_rand5.NewSource(616)) | ||||||
|  | 		total := 0 | ||||||
|  | 		pops := make([]*B, 1000) | ||||||
|  | 		for i := 0; i < 1000; i++ { | ||||||
|  | 			pops[i] = NewPopulatedB(popr, false) | ||||||
|  | 		} | ||||||
|  | 		b.ResetTimer() | ||||||
|  | 		for i := 0; i < b.N; i++ { | ||||||
|  | 			total += pops[i%1000].Size() | ||||||
|  | 		} | ||||||
|  | 		b.SetBytes(int64(total / b.N)) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | The sovExample function is a size of varint function for the example.pb.go file. | ||||||
|  |  | ||||||
|  | */ | ||||||
|  | package size | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 	"github.com/gogo/protobuf/gogoproto" | ||||||
|  | 	"github.com/gogo/protobuf/proto" | ||||||
|  | 	descriptor "github.com/gogo/protobuf/protoc-gen-gogo/descriptor" | ||||||
|  | 	"github.com/gogo/protobuf/protoc-gen-gogo/generator" | ||||||
|  | 	"github.com/gogo/protobuf/vanity" | ||||||
|  | 	"strconv" | ||||||
|  | 	"strings" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type size struct { | ||||||
|  | 	*generator.Generator | ||||||
|  | 	generator.PluginImports | ||||||
|  | 	atleastOne bool | ||||||
|  | 	localName  string | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func NewSize() *size { | ||||||
|  | 	return &size{} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *size) Name() string { | ||||||
|  | 	return "size" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *size) Init(g *generator.Generator) { | ||||||
|  | 	p.Generator = g | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func wireToType(wire string) int { | ||||||
|  | 	switch wire { | ||||||
|  | 	case "fixed64": | ||||||
|  | 		return proto.WireFixed64 | ||||||
|  | 	case "fixed32": | ||||||
|  | 		return proto.WireFixed32 | ||||||
|  | 	case "varint": | ||||||
|  | 		return proto.WireVarint | ||||||
|  | 	case "bytes": | ||||||
|  | 		return proto.WireBytes | ||||||
|  | 	case "group": | ||||||
|  | 		return proto.WireBytes | ||||||
|  | 	case "zigzag32": | ||||||
|  | 		return proto.WireVarint | ||||||
|  | 	case "zigzag64": | ||||||
|  | 		return proto.WireVarint | ||||||
|  | 	} | ||||||
|  | 	panic("unreachable") | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func keySize(fieldNumber int32, wireType int) int { | ||||||
|  | 	x := uint32(fieldNumber)<<3 | uint32(wireType) | ||||||
|  | 	size := 0 | ||||||
|  | 	for size = 0; x > 127; size++ { | ||||||
|  | 		x >>= 7 | ||||||
|  | 	} | ||||||
|  | 	size++ | ||||||
|  | 	return size | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *size) sizeVarint() { | ||||||
|  | 	p.P(` | ||||||
|  | 	func sov`, p.localName, `(x uint64) (n int) { | ||||||
|  | 		for { | ||||||
|  | 			n++ | ||||||
|  | 			x >>= 7 | ||||||
|  | 			if x == 0 { | ||||||
|  | 				break | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		return n | ||||||
|  | 	}`) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *size) sizeZigZag() { | ||||||
|  | 	p.P(`func soz`, p.localName, `(x uint64) (n int) { | ||||||
|  | 		return sov`, p.localName, `(uint64((x << 1) ^ uint64((int64(x) >> 63)))) | ||||||
|  | 	}`) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *size) generateField(proto3 bool, file *generator.FileDescriptor, message *generator.Descriptor, field *descriptor.FieldDescriptorProto) { | ||||||
|  | 	fieldname := p.GetOneOfFieldName(message, field) | ||||||
|  | 	nullable := gogoproto.IsNullable(field) | ||||||
|  | 	repeated := field.IsRepeated() | ||||||
|  | 	if repeated { | ||||||
|  | 		p.P(`if len(m.`, fieldname, `) > 0 {`) | ||||||
|  | 		p.In() | ||||||
|  | 	} else if ((!proto3 || field.IsMessage()) && nullable) || (!gogoproto.IsCustomType(field) && *field.Type == descriptor.FieldDescriptorProto_TYPE_BYTES) { | ||||||
|  | 		p.P(`if m.`, fieldname, ` != nil {`) | ||||||
|  | 		p.In() | ||||||
|  | 	} | ||||||
|  | 	packed := field.IsPacked() | ||||||
|  | 	_, wire := p.GoType(message, field) | ||||||
|  | 	wireType := wireToType(wire) | ||||||
|  | 	fieldNumber := field.GetNumber() | ||||||
|  | 	if packed { | ||||||
|  | 		wireType = proto.WireBytes | ||||||
|  | 	} | ||||||
|  | 	key := keySize(fieldNumber, wireType) | ||||||
|  | 	switch *field.Type { | ||||||
|  | 	case descriptor.FieldDescriptorProto_TYPE_DOUBLE, | ||||||
|  | 		descriptor.FieldDescriptorProto_TYPE_FIXED64, | ||||||
|  | 		descriptor.FieldDescriptorProto_TYPE_SFIXED64: | ||||||
|  | 		if packed { | ||||||
|  | 			p.P(`n+=`, strconv.Itoa(key), `+sov`, p.localName, `(uint64(len(m.`, fieldname, `)*8))`, `+len(m.`, fieldname, `)*8`) | ||||||
|  | 		} else if repeated { | ||||||
|  | 			p.P(`n+=`, strconv.Itoa(key+8), `*len(m.`, fieldname, `)`) | ||||||
|  | 		} else if proto3 { | ||||||
|  | 			p.P(`if m.`, fieldname, ` != 0 {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`n+=`, strconv.Itoa(key+8)) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 		} else if nullable { | ||||||
|  | 			p.P(`n+=`, strconv.Itoa(key+8)) | ||||||
|  | 		} else { | ||||||
|  | 			p.P(`n+=`, strconv.Itoa(key+8)) | ||||||
|  | 		} | ||||||
|  | 	case descriptor.FieldDescriptorProto_TYPE_FLOAT, | ||||||
|  | 		descriptor.FieldDescriptorProto_TYPE_FIXED32, | ||||||
|  | 		descriptor.FieldDescriptorProto_TYPE_SFIXED32: | ||||||
|  | 		if packed { | ||||||
|  | 			p.P(`n+=`, strconv.Itoa(key), `+sov`, p.localName, `(uint64(len(m.`, fieldname, `)*4))`, `+len(m.`, fieldname, `)*4`) | ||||||
|  | 		} else if repeated { | ||||||
|  | 			p.P(`n+=`, strconv.Itoa(key+4), `*len(m.`, fieldname, `)`) | ||||||
|  | 		} else if proto3 { | ||||||
|  | 			p.P(`if m.`, fieldname, ` != 0 {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`n+=`, strconv.Itoa(key+4)) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 		} else if nullable { | ||||||
|  | 			p.P(`n+=`, strconv.Itoa(key+4)) | ||||||
|  | 		} else { | ||||||
|  | 			p.P(`n+=`, strconv.Itoa(key+4)) | ||||||
|  | 		} | ||||||
|  | 	case descriptor.FieldDescriptorProto_TYPE_INT64, | ||||||
|  | 		descriptor.FieldDescriptorProto_TYPE_UINT64, | ||||||
|  | 		descriptor.FieldDescriptorProto_TYPE_UINT32, | ||||||
|  | 		descriptor.FieldDescriptorProto_TYPE_ENUM, | ||||||
|  | 		descriptor.FieldDescriptorProto_TYPE_INT32: | ||||||
|  | 		if packed { | ||||||
|  | 			p.P(`l = 0`) | ||||||
|  | 			p.P(`for _, e := range m.`, fieldname, ` {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`l+=sov`, p.localName, `(uint64(e))`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.P(`n+=`, strconv.Itoa(key), `+sov`, p.localName, `(uint64(l))+l`) | ||||||
|  | 		} else if repeated { | ||||||
|  | 			p.P(`for _, e := range m.`, fieldname, ` {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`n+=`, strconv.Itoa(key), `+sov`, p.localName, `(uint64(e))`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 		} else if proto3 { | ||||||
|  | 			p.P(`if m.`, fieldname, ` != 0 {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`n+=`, strconv.Itoa(key), `+sov`, p.localName, `(uint64(m.`, fieldname, `))`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 		} else if nullable { | ||||||
|  | 			p.P(`n+=`, strconv.Itoa(key), `+sov`, p.localName, `(uint64(*m.`, fieldname, `))`) | ||||||
|  | 		} else { | ||||||
|  | 			p.P(`n+=`, strconv.Itoa(key), `+sov`, p.localName, `(uint64(m.`, fieldname, `))`) | ||||||
|  | 		} | ||||||
|  | 	case descriptor.FieldDescriptorProto_TYPE_BOOL: | ||||||
|  | 		if packed { | ||||||
|  | 			p.P(`n+=`, strconv.Itoa(key), `+sov`, p.localName, `(uint64(len(m.`, fieldname, `)))`, `+len(m.`, fieldname, `)*1`) | ||||||
|  | 		} else if repeated { | ||||||
|  | 			p.P(`n+=`, strconv.Itoa(key+1), `*len(m.`, fieldname, `)`) | ||||||
|  | 		} else if proto3 { | ||||||
|  | 			p.P(`if m.`, fieldname, ` {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`n+=`, strconv.Itoa(key+1)) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 		} else if nullable { | ||||||
|  | 			p.P(`n+=`, strconv.Itoa(key+1)) | ||||||
|  | 		} else { | ||||||
|  | 			p.P(`n+=`, strconv.Itoa(key+1)) | ||||||
|  | 		} | ||||||
|  | 	case descriptor.FieldDescriptorProto_TYPE_STRING: | ||||||
|  | 		if repeated { | ||||||
|  | 			p.P(`for _, s := range m.`, fieldname, ` { `) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`l = len(s)`) | ||||||
|  | 			p.P(`n+=`, strconv.Itoa(key), `+l+sov`, p.localName, `(uint64(l))`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 		} else if proto3 { | ||||||
|  | 			p.P(`l=len(m.`, fieldname, `)`) | ||||||
|  | 			p.P(`if l > 0 {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`n+=`, strconv.Itoa(key), `+l+sov`, p.localName, `(uint64(l))`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 		} else if nullable { | ||||||
|  | 			p.P(`l=len(*m.`, fieldname, `)`) | ||||||
|  | 			p.P(`n+=`, strconv.Itoa(key), `+l+sov`, p.localName, `(uint64(l))`) | ||||||
|  | 		} else { | ||||||
|  | 			p.P(`l=len(m.`, fieldname, `)`) | ||||||
|  | 			p.P(`n+=`, strconv.Itoa(key), `+l+sov`, p.localName, `(uint64(l))`) | ||||||
|  | 		} | ||||||
|  | 	case descriptor.FieldDescriptorProto_TYPE_GROUP: | ||||||
|  | 		panic(fmt.Errorf("size does not support group %v", fieldname)) | ||||||
|  | 	case descriptor.FieldDescriptorProto_TYPE_MESSAGE: | ||||||
|  | 		if generator.IsMap(file.FileDescriptorProto, field) { | ||||||
|  | 			m := p.GoMapType(nil, field) | ||||||
|  | 			_, keywire := p.GoType(nil, m.KeyAliasField) | ||||||
|  | 			valuegoTyp, _ := p.GoType(nil, m.ValueField) | ||||||
|  | 			valuegoAliasTyp, valuewire := p.GoType(nil, m.ValueAliasField) | ||||||
|  | 			_, fieldwire := p.GoType(nil, field) | ||||||
|  |  | ||||||
|  | 			nullable, valuegoTyp, valuegoAliasTyp = generator.GoMapValueTypes(field, m.ValueField, valuegoTyp, valuegoAliasTyp) | ||||||
|  |  | ||||||
|  | 			fieldKeySize := keySize(field.GetNumber(), wireToType(fieldwire)) | ||||||
|  | 			keyKeySize := keySize(1, wireToType(keywire)) | ||||||
|  | 			valueKeySize := keySize(2, wireToType(valuewire)) | ||||||
|  | 			p.P(`for k, v := range m.`, fieldname, ` { `) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`_ = k`) | ||||||
|  | 			p.P(`_ = v`) | ||||||
|  | 			sum := []string{strconv.Itoa(keyKeySize)} | ||||||
|  | 			switch m.KeyField.GetType() { | ||||||
|  | 			case descriptor.FieldDescriptorProto_TYPE_DOUBLE, | ||||||
|  | 				descriptor.FieldDescriptorProto_TYPE_FIXED64, | ||||||
|  | 				descriptor.FieldDescriptorProto_TYPE_SFIXED64: | ||||||
|  | 				sum = append(sum, `8`) | ||||||
|  | 			case descriptor.FieldDescriptorProto_TYPE_FLOAT, | ||||||
|  | 				descriptor.FieldDescriptorProto_TYPE_FIXED32, | ||||||
|  | 				descriptor.FieldDescriptorProto_TYPE_SFIXED32: | ||||||
|  | 				sum = append(sum, `4`) | ||||||
|  | 			case descriptor.FieldDescriptorProto_TYPE_INT64, | ||||||
|  | 				descriptor.FieldDescriptorProto_TYPE_UINT64, | ||||||
|  | 				descriptor.FieldDescriptorProto_TYPE_UINT32, | ||||||
|  | 				descriptor.FieldDescriptorProto_TYPE_ENUM, | ||||||
|  | 				descriptor.FieldDescriptorProto_TYPE_INT32: | ||||||
|  | 				sum = append(sum, `sov`+p.localName+`(uint64(k))`) | ||||||
|  | 			case descriptor.FieldDescriptorProto_TYPE_BOOL: | ||||||
|  | 				sum = append(sum, `1`) | ||||||
|  | 			case descriptor.FieldDescriptorProto_TYPE_STRING, | ||||||
|  | 				descriptor.FieldDescriptorProto_TYPE_BYTES: | ||||||
|  | 				sum = append(sum, `len(k)+sov`+p.localName+`(uint64(len(k)))`) | ||||||
|  | 			case descriptor.FieldDescriptorProto_TYPE_SINT32, | ||||||
|  | 				descriptor.FieldDescriptorProto_TYPE_SINT64: | ||||||
|  | 				sum = append(sum, `soz`+p.localName+`(uint64(k))`) | ||||||
|  | 			} | ||||||
|  | 			sum = append(sum, strconv.Itoa(valueKeySize)) | ||||||
|  | 			switch m.ValueField.GetType() { | ||||||
|  | 			case descriptor.FieldDescriptorProto_TYPE_DOUBLE, | ||||||
|  | 				descriptor.FieldDescriptorProto_TYPE_FIXED64, | ||||||
|  | 				descriptor.FieldDescriptorProto_TYPE_SFIXED64: | ||||||
|  | 				sum = append(sum, strconv.Itoa(8)) | ||||||
|  | 			case descriptor.FieldDescriptorProto_TYPE_FLOAT, | ||||||
|  | 				descriptor.FieldDescriptorProto_TYPE_FIXED32, | ||||||
|  | 				descriptor.FieldDescriptorProto_TYPE_SFIXED32: | ||||||
|  | 				sum = append(sum, strconv.Itoa(4)) | ||||||
|  | 			case descriptor.FieldDescriptorProto_TYPE_INT64, | ||||||
|  | 				descriptor.FieldDescriptorProto_TYPE_UINT64, | ||||||
|  | 				descriptor.FieldDescriptorProto_TYPE_UINT32, | ||||||
|  | 				descriptor.FieldDescriptorProto_TYPE_ENUM, | ||||||
|  | 				descriptor.FieldDescriptorProto_TYPE_INT32: | ||||||
|  | 				sum = append(sum, `sov`+p.localName+`(uint64(v))`) | ||||||
|  | 			case descriptor.FieldDescriptorProto_TYPE_BOOL: | ||||||
|  | 				sum = append(sum, `1`) | ||||||
|  | 			case descriptor.FieldDescriptorProto_TYPE_STRING, | ||||||
|  | 				descriptor.FieldDescriptorProto_TYPE_BYTES: | ||||||
|  | 				sum = append(sum, `len(v)+sov`+p.localName+`(uint64(len(v)))`) | ||||||
|  | 			case descriptor.FieldDescriptorProto_TYPE_SINT32, | ||||||
|  | 				descriptor.FieldDescriptorProto_TYPE_SINT64: | ||||||
|  | 				sum = append(sum, `soz`+p.localName+`(uint64(v))`) | ||||||
|  | 			case descriptor.FieldDescriptorProto_TYPE_MESSAGE: | ||||||
|  | 				if nullable { | ||||||
|  | 					p.P(`l = 0`) | ||||||
|  | 					p.P(`if v != nil {`) | ||||||
|  | 					p.In() | ||||||
|  | 					if valuegoTyp != valuegoAliasTyp { | ||||||
|  | 						p.P(`l = ((`, valuegoTyp, `)(v)).Size()`) | ||||||
|  | 					} else { | ||||||
|  | 						p.P(`l = v.Size()`) | ||||||
|  | 					} | ||||||
|  | 					p.Out() | ||||||
|  | 					p.P(`}`) | ||||||
|  | 				} else { | ||||||
|  | 					if valuegoTyp != valuegoAliasTyp { | ||||||
|  | 						p.P(`l = ((*`, valuegoTyp, `)(&v)).Size()`) | ||||||
|  | 					} else { | ||||||
|  | 						p.P(`l = v.Size()`) | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 				sum = append(sum, `l+sov`+p.localName+`(uint64(l))`) | ||||||
|  | 			} | ||||||
|  | 			p.P(`mapEntrySize := `, strings.Join(sum, "+")) | ||||||
|  | 			p.P(`n+=mapEntrySize+`, fieldKeySize, `+sov`, p.localName, `(uint64(mapEntrySize))`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 		} else if repeated { | ||||||
|  | 			p.P(`for _, e := range m.`, fieldname, ` { `) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`l=e.Size()`) | ||||||
|  | 			p.P(`n+=`, strconv.Itoa(key), `+l+sov`, p.localName, `(uint64(l))`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 		} else { | ||||||
|  | 			p.P(`l=m.`, fieldname, `.Size()`) | ||||||
|  | 			p.P(`n+=`, strconv.Itoa(key), `+l+sov`, p.localName, `(uint64(l))`) | ||||||
|  | 		} | ||||||
|  | 	case descriptor.FieldDescriptorProto_TYPE_BYTES: | ||||||
|  | 		if !gogoproto.IsCustomType(field) { | ||||||
|  | 			if repeated { | ||||||
|  | 				p.P(`for _, b := range m.`, fieldname, ` { `) | ||||||
|  | 				p.In() | ||||||
|  | 				p.P(`l = len(b)`) | ||||||
|  | 				p.P(`n+=`, strconv.Itoa(key), `+l+sov`, p.localName, `(uint64(l))`) | ||||||
|  | 				p.Out() | ||||||
|  | 				p.P(`}`) | ||||||
|  | 			} else if proto3 { | ||||||
|  | 				p.P(`l=len(m.`, fieldname, `)`) | ||||||
|  | 				p.P(`if l > 0 {`) | ||||||
|  | 				p.In() | ||||||
|  | 				p.P(`n+=`, strconv.Itoa(key), `+l+sov`, p.localName, `(uint64(l))`) | ||||||
|  | 				p.Out() | ||||||
|  | 				p.P(`}`) | ||||||
|  | 			} else { | ||||||
|  | 				p.P(`l=len(m.`, fieldname, `)`) | ||||||
|  | 				p.P(`n+=`, strconv.Itoa(key), `+l+sov`, p.localName, `(uint64(l))`) | ||||||
|  | 			} | ||||||
|  | 		} else { | ||||||
|  | 			if repeated { | ||||||
|  | 				p.P(`for _, e := range m.`, fieldname, ` { `) | ||||||
|  | 				p.In() | ||||||
|  | 				p.P(`l=e.Size()`) | ||||||
|  | 				p.P(`n+=`, strconv.Itoa(key), `+l+sov`, p.localName, `(uint64(l))`) | ||||||
|  | 				p.Out() | ||||||
|  | 				p.P(`}`) | ||||||
|  | 			} else { | ||||||
|  | 				p.P(`l=m.`, fieldname, `.Size()`) | ||||||
|  | 				p.P(`n+=`, strconv.Itoa(key), `+l+sov`, p.localName, `(uint64(l))`) | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	case descriptor.FieldDescriptorProto_TYPE_SINT32, | ||||||
|  | 		descriptor.FieldDescriptorProto_TYPE_SINT64: | ||||||
|  | 		if packed { | ||||||
|  | 			p.P(`l = 0`) | ||||||
|  | 			p.P(`for _, e := range m.`, fieldname, ` {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`l+=soz`, p.localName, `(uint64(e))`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.P(`n+=`, strconv.Itoa(key), `+sov`, p.localName, `(uint64(l))+l`) | ||||||
|  | 		} else if repeated { | ||||||
|  | 			p.P(`for _, e := range m.`, fieldname, ` {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`n+=`, strconv.Itoa(key), `+soz`, p.localName, `(uint64(e))`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 		} else if proto3 { | ||||||
|  | 			p.P(`if m.`, fieldname, ` != 0 {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`n+=`, strconv.Itoa(key), `+soz`, p.localName, `(uint64(m.`, fieldname, `))`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 		} else if nullable { | ||||||
|  | 			p.P(`n+=`, strconv.Itoa(key), `+soz`, p.localName, `(uint64(*m.`, fieldname, `))`) | ||||||
|  | 		} else { | ||||||
|  | 			p.P(`n+=`, strconv.Itoa(key), `+soz`, p.localName, `(uint64(m.`, fieldname, `))`) | ||||||
|  | 		} | ||||||
|  | 	default: | ||||||
|  | 		panic("not implemented") | ||||||
|  | 	} | ||||||
|  | 	if ((!proto3 || field.IsMessage()) && nullable) || repeated || (!gogoproto.IsCustomType(field) && *field.Type == descriptor.FieldDescriptorProto_TYPE_BYTES) { | ||||||
|  | 		p.Out() | ||||||
|  | 		p.P(`}`) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *size) Generate(file *generator.FileDescriptor) { | ||||||
|  | 	p.PluginImports = generator.NewPluginImports(p.Generator) | ||||||
|  | 	p.atleastOne = false | ||||||
|  | 	p.localName = generator.FileName(file) | ||||||
|  | 	protoPkg := p.NewImport("github.com/gogo/protobuf/proto") | ||||||
|  | 	if !gogoproto.ImportsGoGoProto(file.FileDescriptorProto) { | ||||||
|  | 		protoPkg = p.NewImport("github.com/golang/protobuf/proto") | ||||||
|  | 	} | ||||||
|  | 	for _, message := range file.Messages() { | ||||||
|  | 		if !gogoproto.IsSizer(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		if message.DescriptorProto.GetOptions().GetMapEntry() { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		p.atleastOne = true | ||||||
|  | 		ccTypeName := generator.CamelCaseSlice(message.TypeName()) | ||||||
|  | 		p.P(`func (m *`, ccTypeName, `) Size() (n int) {`) | ||||||
|  | 		p.In() | ||||||
|  | 		p.P(`var l int`) | ||||||
|  | 		p.P(`_ = l`) | ||||||
|  | 		oneofs := make(map[string]struct{}) | ||||||
|  | 		for _, field := range message.Field { | ||||||
|  | 			oneof := field.OneofIndex != nil | ||||||
|  | 			if !oneof { | ||||||
|  | 				proto3 := gogoproto.IsProto3(file.FileDescriptorProto) | ||||||
|  | 				p.generateField(proto3, file, message, field) | ||||||
|  | 			} else { | ||||||
|  | 				fieldname := p.GetFieldName(message, field) | ||||||
|  | 				if _, ok := oneofs[fieldname]; ok { | ||||||
|  | 					continue | ||||||
|  | 				} else { | ||||||
|  | 					oneofs[fieldname] = struct{}{} | ||||||
|  | 				} | ||||||
|  | 				p.P(`if m.`, fieldname, ` != nil {`) | ||||||
|  | 				p.In() | ||||||
|  | 				p.P(`n+=m.`, fieldname, `.Size()`) | ||||||
|  | 				p.Out() | ||||||
|  | 				p.P(`}`) | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		if message.DescriptorProto.HasExtension() { | ||||||
|  | 			p.P(`if m.XXX_extensions != nil {`) | ||||||
|  | 			p.In() | ||||||
|  | 			if gogoproto.HasExtensionsMap(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 				p.P(`n += `, protoPkg.Use(), `.SizeOfExtensionMap(m.XXX_extensions)`) | ||||||
|  | 			} else { | ||||||
|  | 				p.P(`n+=len(m.XXX_extensions)`) | ||||||
|  | 			} | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 		} | ||||||
|  | 		if gogoproto.HasUnrecognized(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 			p.P(`if m.XXX_unrecognized != nil {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`n+=len(m.XXX_unrecognized)`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 		} | ||||||
|  | 		p.P(`return n`) | ||||||
|  | 		p.Out() | ||||||
|  | 		p.P(`}`) | ||||||
|  | 		p.P() | ||||||
|  |  | ||||||
|  | 		//Generate Size methods for oneof fields | ||||||
|  | 		m := proto.Clone(message.DescriptorProto).(*descriptor.DescriptorProto) | ||||||
|  | 		for _, f := range m.Field { | ||||||
|  | 			oneof := f.OneofIndex != nil | ||||||
|  | 			if !oneof { | ||||||
|  | 				continue | ||||||
|  | 			} | ||||||
|  | 			ccTypeName := p.OneOfTypeName(message, f) | ||||||
|  | 			p.P(`func (m *`, ccTypeName, `) Size() (n int) {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`var l int`) | ||||||
|  | 			p.P(`_ = l`) | ||||||
|  | 			vanity.TurnOffNullableForNativeTypesWithoutDefaultsOnly(f) | ||||||
|  | 			p.generateField(false, file, message, f) | ||||||
|  | 			p.P(`return n`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if !p.atleastOne { | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	p.sizeVarint() | ||||||
|  | 	p.sizeZigZag() | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func init() { | ||||||
|  | 	generator.RegisterPlugin(NewSize()) | ||||||
|  | } | ||||||
							
								
								
									
										127
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/size/sizetest.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										127
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/size/sizetest.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,127 @@ | |||||||
|  | // Copyright (c) 2013, Vastech SA (PTY) LTD. All rights reserved. | ||||||
|  | // http://github.com/gogo/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. | ||||||
|  | // | ||||||
|  | // 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 size | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"github.com/gogo/protobuf/gogoproto" | ||||||
|  | 	"github.com/gogo/protobuf/plugin/testgen" | ||||||
|  | 	"github.com/gogo/protobuf/protoc-gen-gogo/generator" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type test struct { | ||||||
|  | 	*generator.Generator | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func NewTest(g *generator.Generator) testgen.TestPlugin { | ||||||
|  | 	return &test{g} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *test) Generate(imports generator.PluginImports, file *generator.FileDescriptor) bool { | ||||||
|  | 	used := false | ||||||
|  | 	randPkg := imports.NewImport("math/rand") | ||||||
|  | 	timePkg := imports.NewImport("time") | ||||||
|  | 	testingPkg := imports.NewImport("testing") | ||||||
|  | 	protoPkg := imports.NewImport("github.com/gogo/protobuf/proto") | ||||||
|  | 	if !gogoproto.ImportsGoGoProto(file.FileDescriptorProto) { | ||||||
|  | 		protoPkg = imports.NewImport("github.com/golang/protobuf/proto") | ||||||
|  | 	} | ||||||
|  | 	for _, message := range file.Messages() { | ||||||
|  | 		ccTypeName := generator.CamelCaseSlice(message.TypeName()) | ||||||
|  | 		if !gogoproto.IsSizer(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		if message.DescriptorProto.GetOptions().GetMapEntry() { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		if gogoproto.HasTestGen(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 			used = true | ||||||
|  | 			p.P(`func Test`, ccTypeName, `Size(t *`, testingPkg.Use(), `.T) {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`seed := `, timePkg.Use(), `.Now().UnixNano()`) | ||||||
|  | 			p.P(`popr := `, randPkg.Use(), `.New(`, randPkg.Use(), `.NewSource(seed))`) | ||||||
|  | 			p.P(`p := NewPopulated`, ccTypeName, `(popr, true)`) | ||||||
|  | 			p.P(`size2 := `, protoPkg.Use(), `.Size(p)`) | ||||||
|  | 			p.P(`data, err := `, protoPkg.Use(), `.Marshal(p)`) | ||||||
|  | 			p.P(`if err != nil {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`t.Fatalf("seed = %d, err = %v", seed, err)`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.P(`size := p.Size()`) | ||||||
|  | 			p.P(`if len(data) != size {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`t.Errorf("seed = %d, size %v != marshalled size %v", seed, size, len(data))`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.P(`if size2 != size {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`t.Errorf("seed = %d, size %v != before marshal proto.Size %v", seed, size, size2)`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.P(`size3 := `, protoPkg.Use(), `.Size(p)`) | ||||||
|  | 			p.P(`if size3 != size {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`t.Errorf("seed = %d, size %v != after marshal proto.Size %v", seed, size, size3)`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.P() | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		if gogoproto.HasBenchGen(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 			used = true | ||||||
|  | 			p.P(`func Benchmark`, ccTypeName, `Size(b *`, testingPkg.Use(), `.B) {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`popr := `, randPkg.Use(), `.New(`, randPkg.Use(), `.NewSource(616))`) | ||||||
|  | 			p.P(`total := 0`) | ||||||
|  | 			p.P(`pops := make([]*`, ccTypeName, `, 1000)`) | ||||||
|  | 			p.P(`for i := 0; i < 1000; i++ {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`pops[i] = NewPopulated`, ccTypeName, `(popr, false)`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.P(`b.ResetTimer()`) | ||||||
|  | 			p.P(`for i := 0; i < b.N; i++ {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`total += pops[i%1000].Size()`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.P(`b.SetBytes(int64(total / b.N))`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.P() | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 	} | ||||||
|  | 	return used | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func init() { | ||||||
|  | 	testgen.RegisterTestPlugin(NewTest) | ||||||
|  | } | ||||||
							
								
								
									
										293
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/stringer/stringer.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										293
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/stringer/stringer.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,293 @@ | |||||||
|  | // Copyright (c) 2013, Vastech SA (PTY) LTD. All rights reserved. | ||||||
|  | // http://github.com/gogo/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. | ||||||
|  | // | ||||||
|  | // 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. | ||||||
|  |  | ||||||
|  | /* | ||||||
|  | The stringer plugin generates a String method for each message. | ||||||
|  |  | ||||||
|  | It is enabled by the following extensions: | ||||||
|  |  | ||||||
|  |   - stringer | ||||||
|  |   - stringer_all | ||||||
|  |  | ||||||
|  | The stringer plugin also generates a test given it is enabled using one of the following extensions: | ||||||
|  |  | ||||||
|  |   - testgen | ||||||
|  |   - testgen_all | ||||||
|  |  | ||||||
|  | Let us look at: | ||||||
|  |  | ||||||
|  |   github.com/gogo/protobuf/test/example/example.proto | ||||||
|  |  | ||||||
|  | Btw all the output can be seen at: | ||||||
|  |  | ||||||
|  |   github.com/gogo/protobuf/test/example/* | ||||||
|  |  | ||||||
|  | The following message: | ||||||
|  |  | ||||||
|  |   option (gogoproto.goproto_stringer_all) = false; | ||||||
|  |   option (gogoproto.stringer_all) =  true; | ||||||
|  |  | ||||||
|  |   message A { | ||||||
|  | 	optional string Description = 1 [(gogoproto.nullable) = false]; | ||||||
|  | 	optional int64 Number = 2 [(gogoproto.nullable) = false]; | ||||||
|  | 	optional bytes Id = 3 [(gogoproto.customtype) = "github.com/gogo/protobuf/test/custom.Uuid", (gogoproto.nullable) = false]; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  | given to the stringer stringer, will generate the following code: | ||||||
|  |  | ||||||
|  |   func (this *A) String() string { | ||||||
|  | 	if this == nil { | ||||||
|  | 		return "nil" | ||||||
|  | 	} | ||||||
|  | 	s := strings.Join([]string{`&A{`, | ||||||
|  | 		`Description:` + fmt.Sprintf("%v", this.Description) + `,`, | ||||||
|  | 		`Number:` + fmt.Sprintf("%v", this.Number) + `,`, | ||||||
|  | 		`Id:` + fmt.Sprintf("%v", this.Id) + `,`, | ||||||
|  | 		`XXX_unrecognized:` + fmt.Sprintf("%v", this.XXX_unrecognized) + `,`, | ||||||
|  | 		`}`, | ||||||
|  | 	}, "") | ||||||
|  | 	return s | ||||||
|  |   } | ||||||
|  |  | ||||||
|  | and the following test code: | ||||||
|  |  | ||||||
|  | 	func TestAStringer(t *testing4.T) { | ||||||
|  | 		popr := math_rand4.New(math_rand4.NewSource(time4.Now().UnixNano())) | ||||||
|  | 		p := NewPopulatedA(popr, false) | ||||||
|  | 		s1 := p.String() | ||||||
|  | 		s2 := fmt1.Sprintf("%v", p) | ||||||
|  | 		if s1 != s2 { | ||||||
|  | 			t.Fatalf("String want %v got %v", s1, s2) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | Typically fmt.Printf("%v") will stop to print when it reaches a pointer and | ||||||
|  | not print their values, while the generated String method will always print all values, recursively. | ||||||
|  |  | ||||||
|  | */ | ||||||
|  | package stringer | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"github.com/gogo/protobuf/gogoproto" | ||||||
|  | 	"github.com/gogo/protobuf/protoc-gen-gogo/generator" | ||||||
|  | 	"strings" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type stringer struct { | ||||||
|  | 	*generator.Generator | ||||||
|  | 	generator.PluginImports | ||||||
|  | 	atleastOne bool | ||||||
|  | 	localName  string | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func NewStringer() *stringer { | ||||||
|  | 	return &stringer{} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *stringer) Name() string { | ||||||
|  | 	return "stringer" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *stringer) Init(g *generator.Generator) { | ||||||
|  | 	p.Generator = g | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *stringer) Generate(file *generator.FileDescriptor) { | ||||||
|  | 	proto3 := gogoproto.IsProto3(file.FileDescriptorProto) | ||||||
|  | 	p.PluginImports = generator.NewPluginImports(p.Generator) | ||||||
|  | 	p.atleastOne = false | ||||||
|  |  | ||||||
|  | 	p.localName = generator.FileName(file) | ||||||
|  |  | ||||||
|  | 	fmtPkg := p.NewImport("fmt") | ||||||
|  | 	stringsPkg := p.NewImport("strings") | ||||||
|  | 	reflectPkg := p.NewImport("reflect") | ||||||
|  | 	sortKeysPkg := p.NewImport("github.com/gogo/protobuf/sortkeys") | ||||||
|  | 	for _, message := range file.Messages() { | ||||||
|  | 		if !gogoproto.IsStringer(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		if gogoproto.EnabledGoStringer(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 			panic("old string method needs to be disabled, please use gogoproto.goproto_stringer or gogoproto.goproto_stringer_all and set it to false") | ||||||
|  | 		} | ||||||
|  | 		if message.DescriptorProto.GetOptions().GetMapEntry() { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		p.atleastOne = true | ||||||
|  | 		ccTypeName := generator.CamelCaseSlice(message.TypeName()) | ||||||
|  | 		p.P(`func (this *`, ccTypeName, `) String() string {`) | ||||||
|  | 		p.In() | ||||||
|  | 		p.P(`if this == nil {`) | ||||||
|  | 		p.In() | ||||||
|  | 		p.P(`return "nil"`) | ||||||
|  | 		p.Out() | ||||||
|  | 		p.P(`}`) | ||||||
|  | 		for _, field := range message.Field { | ||||||
|  | 			if !generator.IsMap(file.FileDescriptorProto, field) { | ||||||
|  | 				continue | ||||||
|  | 			} | ||||||
|  | 			fieldname := p.GetFieldName(message, field) | ||||||
|  |  | ||||||
|  | 			m := p.GoMapType(nil, field) | ||||||
|  | 			mapgoTyp, keyField, keyAliasField := m.GoType, m.KeyField, m.KeyAliasField | ||||||
|  | 			keysName := `keysFor` + fieldname | ||||||
|  | 			keygoTyp, _ := p.GoType(nil, keyField) | ||||||
|  | 			keygoTyp = strings.Replace(keygoTyp, "*", "", 1) | ||||||
|  | 			keygoAliasTyp, _ := p.GoType(nil, keyAliasField) | ||||||
|  | 			keygoAliasTyp = strings.Replace(keygoAliasTyp, "*", "", 1) | ||||||
|  | 			keyCapTyp := generator.CamelCase(keygoTyp) | ||||||
|  | 			p.P(keysName, ` := make([]`, keygoTyp, `, 0, len(this.`, fieldname, `))`) | ||||||
|  | 			p.P(`for k, _ := range this.`, fieldname, ` {`) | ||||||
|  | 			p.In() | ||||||
|  | 			if keygoAliasTyp == keygoTyp { | ||||||
|  | 				p.P(keysName, ` = append(`, keysName, `, k)`) | ||||||
|  | 			} else { | ||||||
|  | 				p.P(keysName, ` = append(`, keysName, `, `, keygoTyp, `(k))`) | ||||||
|  | 			} | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.P(sortKeysPkg.Use(), `.`, keyCapTyp, `s(`, keysName, `)`) | ||||||
|  | 			mapName := `mapStringFor` + fieldname | ||||||
|  | 			p.P(mapName, ` := "`, mapgoTyp, `{"`) | ||||||
|  | 			p.P(`for _, k := range `, keysName, ` {`) | ||||||
|  | 			p.In() | ||||||
|  | 			if keygoAliasTyp == keygoTyp { | ||||||
|  | 				p.P(mapName, ` += fmt.Sprintf("%v: %v,", k, this.`, fieldname, `[k])`) | ||||||
|  | 			} else { | ||||||
|  | 				p.P(mapName, ` += fmt.Sprintf("%v: %v,", k, this.`, fieldname, `[`, keygoAliasTyp, `(k)])`) | ||||||
|  | 			} | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.P(mapName, ` += "}"`) | ||||||
|  | 		} | ||||||
|  | 		p.P("s := ", stringsPkg.Use(), ".Join([]string{`&", ccTypeName, "{`,") | ||||||
|  | 		oneofs := make(map[string]struct{}) | ||||||
|  | 		for _, field := range message.Field { | ||||||
|  | 			nullable := gogoproto.IsNullable(field) | ||||||
|  | 			repeated := field.IsRepeated() | ||||||
|  | 			fieldname := p.GetFieldName(message, field) | ||||||
|  | 			oneof := field.OneofIndex != nil | ||||||
|  | 			if oneof { | ||||||
|  | 				if _, ok := oneofs[fieldname]; ok { | ||||||
|  | 					continue | ||||||
|  | 				} else { | ||||||
|  | 					oneofs[fieldname] = struct{}{} | ||||||
|  | 				} | ||||||
|  | 				p.P("`", fieldname, ":`", ` + `, fmtPkg.Use(), `.Sprintf("%v", this.`, fieldname, ") + `,", "`,") | ||||||
|  | 			} else if generator.IsMap(file.FileDescriptorProto, field) { | ||||||
|  | 				mapName := `mapStringFor` + fieldname | ||||||
|  | 				p.P("`", fieldname, ":`", ` + `, mapName, " + `,", "`,") | ||||||
|  | 			} else if field.IsMessage() || p.IsGroup(field) { | ||||||
|  | 				desc := p.ObjectNamed(field.GetTypeName()) | ||||||
|  | 				msgname := p.TypeName(desc) | ||||||
|  | 				msgnames := strings.Split(msgname, ".") | ||||||
|  | 				typeName := msgnames[len(msgnames)-1] | ||||||
|  | 				if nullable { | ||||||
|  | 					p.P("`", fieldname, ":`", ` + `, stringsPkg.Use(), `.Replace(`, fmtPkg.Use(), `.Sprintf("%v", this.`, fieldname, `), "`, typeName, `","`, msgname, `"`, ", 1) + `,", "`,") | ||||||
|  | 				} else if repeated { | ||||||
|  | 					p.P("`", fieldname, ":`", ` + `, stringsPkg.Use(), `.Replace(`, stringsPkg.Use(), `.Replace(`, fmtPkg.Use(), `.Sprintf("%v", this.`, fieldname, `), "`, typeName, `","`, msgname, `"`, ", 1),`&`,``,1) + `,", "`,") | ||||||
|  | 				} else { | ||||||
|  | 					p.P("`", fieldname, ":`", ` + `, stringsPkg.Use(), `.Replace(`, stringsPkg.Use(), `.Replace(this.`, fieldname, `.String(), "`, typeName, `","`, msgname, `"`, ", 1),`&`,``,1) + `,", "`,") | ||||||
|  | 				} | ||||||
|  | 			} else { | ||||||
|  | 				if nullable && !repeated && !proto3 { | ||||||
|  | 					p.P("`", fieldname, ":`", ` + valueToString`, p.localName, `(this.`, fieldname, ") + `,", "`,") | ||||||
|  | 				} else { | ||||||
|  | 					p.P("`", fieldname, ":`", ` + `, fmtPkg.Use(), `.Sprintf("%v", this.`, fieldname, ") + `,", "`,") | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		if message.DescriptorProto.HasExtension() { | ||||||
|  | 			if gogoproto.HasExtensionsMap(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 				p.P("`XXX_extensions:` + proto.StringFromExtensionsMap(this.XXX_extensions) + `,`,") | ||||||
|  | 			} else { | ||||||
|  | 				p.P("`XXX_extensions:` + proto.StringFromExtensionsBytes(this.XXX_extensions) + `,`,") | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		if gogoproto.HasUnrecognized(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 			p.P("`XXX_unrecognized:` + ", fmtPkg.Use(), `.Sprintf("%v", this.XXX_unrecognized) + `, "`,`,") | ||||||
|  | 		} | ||||||
|  | 		p.P("`}`,") | ||||||
|  | 		p.P(`}`, `,""`, ")") | ||||||
|  | 		p.P(`return s`) | ||||||
|  | 		p.Out() | ||||||
|  | 		p.P(`}`) | ||||||
|  |  | ||||||
|  | 		//Generate String methods for oneof fields | ||||||
|  | 		for _, field := range message.Field { | ||||||
|  | 			oneof := field.OneofIndex != nil | ||||||
|  | 			if !oneof { | ||||||
|  | 				continue | ||||||
|  | 			} | ||||||
|  | 			ccTypeName := p.OneOfTypeName(message, field) | ||||||
|  | 			p.P(`func (this *`, ccTypeName, `) String() string {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`if this == nil {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`return "nil"`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.P("s := ", stringsPkg.Use(), ".Join([]string{`&", ccTypeName, "{`,") | ||||||
|  | 			fieldname := p.GetOneOfFieldName(message, field) | ||||||
|  | 			if field.IsMessage() || p.IsGroup(field) { | ||||||
|  | 				desc := p.ObjectNamed(field.GetTypeName()) | ||||||
|  | 				msgname := p.TypeName(desc) | ||||||
|  | 				msgnames := strings.Split(msgname, ".") | ||||||
|  | 				typeName := msgnames[len(msgnames)-1] | ||||||
|  | 				p.P("`", fieldname, ":`", ` + `, stringsPkg.Use(), `.Replace(`, fmtPkg.Use(), `.Sprintf("%v", this.`, fieldname, `), "`, typeName, `","`, msgname, `"`, ", 1) + `,", "`,") | ||||||
|  | 			} else { | ||||||
|  | 				p.P("`", fieldname, ":`", ` + `, fmtPkg.Use(), `.Sprintf("%v", this.`, fieldname, ") + `,", "`,") | ||||||
|  | 			} | ||||||
|  | 			p.P("`}`,") | ||||||
|  | 			p.P(`}`, `,""`, ")") | ||||||
|  | 			p.P(`return s`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if !p.atleastOne { | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	p.P(`func valueToString`, p.localName, `(v interface{}) string {`) | ||||||
|  | 	p.In() | ||||||
|  | 	p.P(`rv := `, reflectPkg.Use(), `.ValueOf(v)`) | ||||||
|  | 	p.P(`if rv.IsNil() {`) | ||||||
|  | 	p.In() | ||||||
|  | 	p.P(`return "nil"`) | ||||||
|  | 	p.Out() | ||||||
|  | 	p.P(`}`) | ||||||
|  | 	p.P(`pv := `, reflectPkg.Use(), `.Indirect(rv).Interface()`) | ||||||
|  | 	p.P(`return `, fmtPkg.Use(), `.Sprintf("*%v", pv)`) | ||||||
|  | 	p.Out() | ||||||
|  | 	p.P(`}`) | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func init() { | ||||||
|  | 	generator.RegisterPlugin(NewStringer()) | ||||||
|  | } | ||||||
							
								
								
									
										81
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/stringer/stringertest.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/stringer/stringertest.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,81 @@ | |||||||
|  | // Copyright (c) 2013, Vastech SA (PTY) LTD. All rights reserved. | ||||||
|  | // http://github.com/gogo/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. | ||||||
|  | // | ||||||
|  | // 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 stringer | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"github.com/gogo/protobuf/gogoproto" | ||||||
|  | 	"github.com/gogo/protobuf/plugin/testgen" | ||||||
|  | 	"github.com/gogo/protobuf/protoc-gen-gogo/generator" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type test struct { | ||||||
|  | 	*generator.Generator | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func NewTest(g *generator.Generator) testgen.TestPlugin { | ||||||
|  | 	return &test{g} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *test) Generate(imports generator.PluginImports, file *generator.FileDescriptor) bool { | ||||||
|  | 	used := false | ||||||
|  | 	randPkg := imports.NewImport("math/rand") | ||||||
|  | 	timePkg := imports.NewImport("time") | ||||||
|  | 	testingPkg := imports.NewImport("testing") | ||||||
|  | 	fmtPkg := imports.NewImport("fmt") | ||||||
|  | 	for _, message := range file.Messages() { | ||||||
|  | 		ccTypeName := generator.CamelCaseSlice(message.TypeName()) | ||||||
|  | 		if !gogoproto.IsStringer(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		if message.DescriptorProto.GetOptions().GetMapEntry() { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		if gogoproto.HasTestGen(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 			used = true | ||||||
|  | 			p.P(`func Test`, ccTypeName, `Stringer(t *`, testingPkg.Use(), `.T) {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`popr := `, randPkg.Use(), `.New(`, randPkg.Use(), `.NewSource(`, timePkg.Use(), `.Now().UnixNano()))`) | ||||||
|  | 			p.P(`p := NewPopulated`, ccTypeName, `(popr, false)`) | ||||||
|  | 			p.P(`s1 := p.String()`) | ||||||
|  | 			p.P(`s2 := `, fmtPkg.Use(), `.Sprintf("%v", p)`) | ||||||
|  | 			p.P(`if s1 != s2 {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`t.Fatalf("String want %v got %v", s1, s2)`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 	} | ||||||
|  | 	return used | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func init() { | ||||||
|  | 	testgen.RegisterTestPlugin(NewTest) | ||||||
|  | } | ||||||
							
								
								
									
										602
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/testgen/testgen.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										602
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/testgen/testgen.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,602 @@ | |||||||
|  | // Copyright (c) 2013, Vastech SA (PTY) LTD. All rights reserved. | ||||||
|  | // http://github.com/gogo/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. | ||||||
|  | // | ||||||
|  | // 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. | ||||||
|  |  | ||||||
|  | /* | ||||||
|  | The testgen plugin generates Test and Benchmark functions for each message. | ||||||
|  |  | ||||||
|  | Tests are enabled using the following extensions: | ||||||
|  |  | ||||||
|  |   - testgen | ||||||
|  |   - testgen_all | ||||||
|  |  | ||||||
|  | Benchmarks are enabled using the following extensions: | ||||||
|  |  | ||||||
|  |   - benchgen | ||||||
|  |   - benchgen_all | ||||||
|  |  | ||||||
|  | Let us look at: | ||||||
|  |  | ||||||
|  |   github.com/gogo/protobuf/test/example/example.proto | ||||||
|  |  | ||||||
|  | Btw all the output can be seen at: | ||||||
|  |  | ||||||
|  |   github.com/gogo/protobuf/test/example/* | ||||||
|  |  | ||||||
|  | The following message: | ||||||
|  |  | ||||||
|  |   option (gogoproto.testgen_all) = true; | ||||||
|  |   option (gogoproto.benchgen_all) = true; | ||||||
|  |  | ||||||
|  |   message A { | ||||||
|  | 	optional string Description = 1 [(gogoproto.nullable) = false]; | ||||||
|  | 	optional int64 Number = 2 [(gogoproto.nullable) = false]; | ||||||
|  | 	optional bytes Id = 3 [(gogoproto.customtype) = "github.com/gogo/protobuf/test/custom.Uuid", (gogoproto.nullable) = false]; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  | given to the testgen plugin, will generate the following test code: | ||||||
|  |  | ||||||
|  | 	func TestAProto(t *testing.T) { | ||||||
|  | 		popr := math_rand.New(math_rand.NewSource(time.Now().UnixNano())) | ||||||
|  | 		p := NewPopulatedA(popr, false) | ||||||
|  | 		data, err := github_com_gogo_protobuf_proto.Marshal(p) | ||||||
|  | 		if err != nil { | ||||||
|  | 			panic(err) | ||||||
|  | 		} | ||||||
|  | 		msg := &A{} | ||||||
|  | 		if err := github_com_gogo_protobuf_proto.Unmarshal(data, msg); err != nil { | ||||||
|  | 			panic(err) | ||||||
|  | 		} | ||||||
|  | 		for i := range data { | ||||||
|  | 			data[i] = byte(popr.Intn(256)) | ||||||
|  | 		} | ||||||
|  | 		if err := p.VerboseEqual(msg); err != nil { | ||||||
|  | 			t.Fatalf("%#v !VerboseProto %#v, since %v", msg, p, err) | ||||||
|  | 		} | ||||||
|  | 		if !p.Equal(msg) { | ||||||
|  | 			t.Fatalf("%#v !Proto %#v", msg, p) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	func BenchmarkAProtoMarshal(b *testing.B) { | ||||||
|  | 		popr := math_rand.New(math_rand.NewSource(616)) | ||||||
|  | 		total := 0 | ||||||
|  | 		pops := make([]*A, 10000) | ||||||
|  | 		for i := 0; i < 10000; i++ { | ||||||
|  | 			pops[i] = NewPopulatedA(popr, false) | ||||||
|  | 		} | ||||||
|  | 		b.ResetTimer() | ||||||
|  | 		for i := 0; i < b.N; i++ { | ||||||
|  | 			data, err := github_com_gogo_protobuf_proto.Marshal(pops[i%10000]) | ||||||
|  | 			if err != nil { | ||||||
|  | 				panic(err) | ||||||
|  | 			} | ||||||
|  | 			total += len(data) | ||||||
|  | 		} | ||||||
|  | 		b.SetBytes(int64(total / b.N)) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	func BenchmarkAProtoUnmarshal(b *testing.B) { | ||||||
|  | 		popr := math_rand.New(math_rand.NewSource(616)) | ||||||
|  | 		total := 0 | ||||||
|  | 		datas := make([][]byte, 10000) | ||||||
|  | 		for i := 0; i < 10000; i++ { | ||||||
|  | 			data, err := github_com_gogo_protobuf_proto.Marshal(NewPopulatedA(popr, false)) | ||||||
|  | 			if err != nil { | ||||||
|  | 				panic(err) | ||||||
|  | 			} | ||||||
|  | 			datas[i] = data | ||||||
|  | 		} | ||||||
|  | 		msg := &A{} | ||||||
|  | 		b.ResetTimer() | ||||||
|  | 		for i := 0; i < b.N; i++ { | ||||||
|  | 			total += len(datas[i%10000]) | ||||||
|  | 			if err := github_com_gogo_protobuf_proto.Unmarshal(datas[i%10000], msg); err != nil { | ||||||
|  | 				panic(err) | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		b.SetBytes(int64(total / b.N)) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  |  | ||||||
|  | 	func TestAJSON(t *testing1.T) { | ||||||
|  | 		popr := math_rand1.New(math_rand1.NewSource(time1.Now().UnixNano())) | ||||||
|  | 		p := NewPopulatedA(popr, true) | ||||||
|  | 		jsondata, err := encoding_json.Marshal(p) | ||||||
|  | 		if err != nil { | ||||||
|  | 			panic(err) | ||||||
|  | 		} | ||||||
|  | 		msg := &A{} | ||||||
|  | 		err = encoding_json.Unmarshal(jsondata, msg) | ||||||
|  | 		if err != nil { | ||||||
|  | 			panic(err) | ||||||
|  | 		} | ||||||
|  | 		if err := p.VerboseEqual(msg); err != nil { | ||||||
|  | 			t.Fatalf("%#v !VerboseProto %#v, since %v", msg, p, err) | ||||||
|  | 		} | ||||||
|  | 		if !p.Equal(msg) { | ||||||
|  | 			t.Fatalf("%#v !Json Equal %#v", msg, p) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	func TestAProtoText(t *testing2.T) { | ||||||
|  | 		popr := math_rand2.New(math_rand2.NewSource(time2.Now().UnixNano())) | ||||||
|  | 		p := NewPopulatedA(popr, true) | ||||||
|  | 		data := github_com_gogo_protobuf_proto1.MarshalTextString(p) | ||||||
|  | 		msg := &A{} | ||||||
|  | 		if err := github_com_gogo_protobuf_proto1.UnmarshalText(data, msg); err != nil { | ||||||
|  | 			panic(err) | ||||||
|  | 		} | ||||||
|  | 		if err := p.VerboseEqual(msg); err != nil { | ||||||
|  | 			t.Fatalf("%#v !VerboseProto %#v, since %v", msg, p, err) | ||||||
|  | 		} | ||||||
|  | 		if !p.Equal(msg) { | ||||||
|  | 			t.Fatalf("%#v !Proto %#v", msg, p) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	func TestAProtoCompactText(t *testing2.T) { | ||||||
|  | 		popr := math_rand2.New(math_rand2.NewSource(time2.Now().UnixNano())) | ||||||
|  | 		p := NewPopulatedA(popr, true) | ||||||
|  | 		data := github_com_gogo_protobuf_proto1.CompactTextString(p) | ||||||
|  | 		msg := &A{} | ||||||
|  | 		if err := github_com_gogo_protobuf_proto1.UnmarshalText(data, msg); err != nil { | ||||||
|  | 			panic(err) | ||||||
|  | 		} | ||||||
|  | 		if err := p.VerboseEqual(msg); err != nil { | ||||||
|  | 			t.Fatalf("%#v !VerboseProto %#v, since %v", msg, p, err) | ||||||
|  | 		} | ||||||
|  | 		if !p.Equal(msg) { | ||||||
|  | 			t.Fatalf("%#v !Proto %#v", msg, p) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | Other registered tests are also generated. | ||||||
|  | Tests are registered to this test plugin by calling the following function. | ||||||
|  |  | ||||||
|  |   func RegisterTestPlugin(newFunc NewTestPlugin) | ||||||
|  |  | ||||||
|  | where NewTestPlugin is: | ||||||
|  |  | ||||||
|  |   type NewTestPlugin func(g *generator.Generator) TestPlugin | ||||||
|  |  | ||||||
|  | and TestPlugin is an interface: | ||||||
|  |  | ||||||
|  |   type TestPlugin interface { | ||||||
|  | 	Generate(imports generator.PluginImports, file *generator.FileDescriptor) (used bool) | ||||||
|  |   } | ||||||
|  |  | ||||||
|  | Plugins that use this interface include: | ||||||
|  |  | ||||||
|  |   - populate | ||||||
|  |   - gostring | ||||||
|  |   - equal | ||||||
|  |   - union | ||||||
|  |   - and more | ||||||
|  |  | ||||||
|  | Please look at these plugins as examples of how to create your own. | ||||||
|  | A good idea is to let each plugin generate its own tests. | ||||||
|  |  | ||||||
|  | */ | ||||||
|  | package testgen | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"github.com/gogo/protobuf/gogoproto" | ||||||
|  | 	"github.com/gogo/protobuf/protoc-gen-gogo/generator" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type TestPlugin interface { | ||||||
|  | 	Generate(imports generator.PluginImports, file *generator.FileDescriptor) (used bool) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type NewTestPlugin func(g *generator.Generator) TestPlugin | ||||||
|  |  | ||||||
|  | var testplugins = make([]NewTestPlugin, 0) | ||||||
|  |  | ||||||
|  | func RegisterTestPlugin(newFunc NewTestPlugin) { | ||||||
|  | 	testplugins = append(testplugins, newFunc) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type plugin struct { | ||||||
|  | 	*generator.Generator | ||||||
|  | 	generator.PluginImports | ||||||
|  | 	tests []TestPlugin | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func NewPlugin() *plugin { | ||||||
|  | 	return &plugin{} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *plugin) Name() string { | ||||||
|  | 	return "testgen" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *plugin) Init(g *generator.Generator) { | ||||||
|  | 	p.Generator = g | ||||||
|  | 	p.tests = make([]TestPlugin, 0, len(testplugins)) | ||||||
|  | 	for i := range testplugins { | ||||||
|  | 		p.tests = append(p.tests, testplugins[i](g)) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *plugin) Generate(file *generator.FileDescriptor) { | ||||||
|  | 	p.PluginImports = generator.NewPluginImports(p.Generator) | ||||||
|  | 	atLeastOne := false | ||||||
|  | 	for i := range p.tests { | ||||||
|  | 		used := p.tests[i].Generate(p.PluginImports, file) | ||||||
|  | 		if used { | ||||||
|  | 			atLeastOne = true | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	if atLeastOne { | ||||||
|  | 		p.P(`//These tests are generated by github.com/gogo/protobuf/plugin/testgen`) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type testProto struct { | ||||||
|  | 	*generator.Generator | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func newProto(g *generator.Generator) TestPlugin { | ||||||
|  | 	return &testProto{g} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *testProto) Generate(imports generator.PluginImports, file *generator.FileDescriptor) bool { | ||||||
|  | 	used := false | ||||||
|  | 	testingPkg := imports.NewImport("testing") | ||||||
|  | 	randPkg := imports.NewImport("math/rand") | ||||||
|  | 	timePkg := imports.NewImport("time") | ||||||
|  | 	protoPkg := imports.NewImport("github.com/gogo/protobuf/proto") | ||||||
|  | 	if !gogoproto.ImportsGoGoProto(file.FileDescriptorProto) { | ||||||
|  | 		protoPkg = imports.NewImport("github.com/golang/protobuf/proto") | ||||||
|  | 	} | ||||||
|  | 	for _, message := range file.Messages() { | ||||||
|  | 		ccTypeName := generator.CamelCaseSlice(message.TypeName()) | ||||||
|  | 		if message.DescriptorProto.GetOptions().GetMapEntry() { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		if gogoproto.HasTestGen(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 			used = true | ||||||
|  |  | ||||||
|  | 			p.P(`func Test`, ccTypeName, `Proto(t *`, testingPkg.Use(), `.T) {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`seed := `, timePkg.Use(), `.Now().UnixNano()`) | ||||||
|  | 			p.P(`popr := `, randPkg.Use(), `.New(`, randPkg.Use(), `.NewSource(seed))`) | ||||||
|  | 			p.P(`p := NewPopulated`, ccTypeName, `(popr, false)`) | ||||||
|  | 			p.P(`data, err := `, protoPkg.Use(), `.Marshal(p)`) | ||||||
|  | 			p.P(`if err != nil {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`t.Fatalf("seed = %d, err = %v", seed, err)`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.P(`msg := &`, ccTypeName, `{}`) | ||||||
|  | 			p.P(`if err := `, protoPkg.Use(), `.Unmarshal(data, msg); err != nil {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`t.Fatalf("seed = %d, err = %v", seed, err)`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.P(`littlefuzz := make([]byte, len(data))`) | ||||||
|  | 			p.P(`copy(littlefuzz, data)`) | ||||||
|  | 			p.P(`for i := range data {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`data[i] = byte(popr.Intn(256))`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			if gogoproto.HasVerboseEqual(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 				p.P(`if err := p.VerboseEqual(msg); err != nil {`) | ||||||
|  | 				p.In() | ||||||
|  | 				p.P(`t.Fatalf("seed = %d, %#v !VerboseProto %#v, since %v", seed, msg, p, err)`) | ||||||
|  | 				p.Out() | ||||||
|  | 				p.P(`}`) | ||||||
|  | 			} | ||||||
|  | 			p.P(`if !p.Equal(msg) {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`t.Fatalf("seed = %d, %#v !Proto %#v", seed, msg, p)`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.P(`if len(littlefuzz) > 0 {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`fuzzamount := 100`) | ||||||
|  | 			p.P(`for i := 0; i < fuzzamount; i++ {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`littlefuzz[popr.Intn(len(littlefuzz))] = byte(popr.Intn(256))`) | ||||||
|  | 			p.P(`littlefuzz = append(littlefuzz, byte(popr.Intn(256)))`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.P(`// shouldn't panic`) | ||||||
|  | 			p.P(`_ = `, protoPkg.Use(), `.Unmarshal(littlefuzz, msg)`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.P() | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		if gogoproto.HasTestGen(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 			if gogoproto.IsMarshaler(file.FileDescriptorProto, message.DescriptorProto) || gogoproto.IsUnsafeMarshaler(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 				p.P(`func Test`, ccTypeName, `MarshalTo(t *`, testingPkg.Use(), `.T) {`) | ||||||
|  | 				p.In() | ||||||
|  | 				p.P(`seed := `, timePkg.Use(), `.Now().UnixNano()`) | ||||||
|  | 				p.P(`popr := `, randPkg.Use(), `.New(`, randPkg.Use(), `.NewSource(seed))`) | ||||||
|  | 				p.P(`p := NewPopulated`, ccTypeName, `(popr, false)`) | ||||||
|  | 				p.P(`size := p.Size()`) | ||||||
|  | 				p.P(`data := make([]byte, size)`) | ||||||
|  | 				p.P(`for i := range data {`) | ||||||
|  | 				p.In() | ||||||
|  | 				p.P(`data[i] = byte(popr.Intn(256))`) | ||||||
|  | 				p.Out() | ||||||
|  | 				p.P(`}`) | ||||||
|  | 				p.P(`_, err := p.MarshalTo(data)`) | ||||||
|  | 				p.P(`if err != nil {`) | ||||||
|  | 				p.In() | ||||||
|  | 				p.P(`t.Fatalf("seed = %d, err = %v", seed, err)`) | ||||||
|  | 				p.Out() | ||||||
|  | 				p.P(`}`) | ||||||
|  | 				p.P(`msg := &`, ccTypeName, `{}`) | ||||||
|  | 				p.P(`if err := `, protoPkg.Use(), `.Unmarshal(data, msg); err != nil {`) | ||||||
|  | 				p.In() | ||||||
|  | 				p.P(`t.Fatalf("seed = %d, err = %v", seed, err)`) | ||||||
|  | 				p.Out() | ||||||
|  | 				p.P(`}`) | ||||||
|  | 				p.P(`for i := range data {`) | ||||||
|  | 				p.In() | ||||||
|  | 				p.P(`data[i] = byte(popr.Intn(256))`) | ||||||
|  | 				p.Out() | ||||||
|  | 				p.P(`}`) | ||||||
|  | 				if gogoproto.HasVerboseEqual(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 					p.P(`if err := p.VerboseEqual(msg); err != nil {`) | ||||||
|  | 					p.In() | ||||||
|  | 					p.P(`t.Fatalf("seed = %d, %#v !VerboseProto %#v, since %v", seed, msg, p, err)`) | ||||||
|  | 					p.Out() | ||||||
|  | 					p.P(`}`) | ||||||
|  | 				} | ||||||
|  | 				p.P(`if !p.Equal(msg) {`) | ||||||
|  | 				p.In() | ||||||
|  | 				p.P(`t.Fatalf("seed = %d, %#v !Proto %#v", seed, msg, p)`) | ||||||
|  | 				p.Out() | ||||||
|  | 				p.P(`}`) | ||||||
|  | 				p.Out() | ||||||
|  | 				p.P(`}`) | ||||||
|  | 				p.P() | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		if gogoproto.HasBenchGen(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 			used = true | ||||||
|  | 			p.P(`func Benchmark`, ccTypeName, `ProtoMarshal(b *`, testingPkg.Use(), `.B) {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`popr := `, randPkg.Use(), `.New(`, randPkg.Use(), `.NewSource(616))`) | ||||||
|  | 			p.P(`total := 0`) | ||||||
|  | 			p.P(`pops := make([]*`, ccTypeName, `, 10000)`) | ||||||
|  | 			p.P(`for i := 0; i < 10000; i++ {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`pops[i] = NewPopulated`, ccTypeName, `(popr, false)`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.P(`b.ResetTimer()`) | ||||||
|  | 			p.P(`for i := 0; i < b.N; i++ {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`data, err := `, protoPkg.Use(), `.Marshal(pops[i%10000])`) | ||||||
|  | 			p.P(`if err != nil {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`panic(err)`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.P(`total += len(data)`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.P(`b.SetBytes(int64(total / b.N))`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.P() | ||||||
|  |  | ||||||
|  | 			p.P(`func Benchmark`, ccTypeName, `ProtoUnmarshal(b *`, testingPkg.Use(), `.B) {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`popr := `, randPkg.Use(), `.New(`, randPkg.Use(), `.NewSource(616))`) | ||||||
|  | 			p.P(`total := 0`) | ||||||
|  | 			p.P(`datas := make([][]byte, 10000)`) | ||||||
|  | 			p.P(`for i := 0; i < 10000; i++ {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`data, err := `, protoPkg.Use(), `.Marshal(NewPopulated`, ccTypeName, `(popr, false))`) | ||||||
|  | 			p.P(`if err != nil {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`panic(err)`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.P(`datas[i] = data`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.P(`msg := &`, ccTypeName, `{}`) | ||||||
|  | 			p.P(`b.ResetTimer()`) | ||||||
|  | 			p.P(`for i := 0; i < b.N; i++ {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`total += len(datas[i%10000])`) | ||||||
|  | 			p.P(`if err := `, protoPkg.Use(), `.Unmarshal(datas[i%10000], msg); err != nil {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`panic(err)`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.P(`b.SetBytes(int64(total / b.N))`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.P() | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return used | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type testJson struct { | ||||||
|  | 	*generator.Generator | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func newJson(g *generator.Generator) TestPlugin { | ||||||
|  | 	return &testJson{g} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *testJson) Generate(imports generator.PluginImports, file *generator.FileDescriptor) bool { | ||||||
|  | 	used := false | ||||||
|  | 	testingPkg := imports.NewImport("testing") | ||||||
|  | 	randPkg := imports.NewImport("math/rand") | ||||||
|  | 	timePkg := imports.NewImport("time") | ||||||
|  | 	jsonPkg := imports.NewImport("github.com/gogo/protobuf/jsonpb") | ||||||
|  | 	for _, message := range file.Messages() { | ||||||
|  | 		ccTypeName := generator.CamelCaseSlice(message.TypeName()) | ||||||
|  | 		if message.DescriptorProto.GetOptions().GetMapEntry() { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		if gogoproto.HasTestGen(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 			used = true | ||||||
|  | 			p.P(`func Test`, ccTypeName, `JSON(t *`, testingPkg.Use(), `.T) {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`seed := `, timePkg.Use(), `.Now().UnixNano()`) | ||||||
|  | 			p.P(`popr := `, randPkg.Use(), `.New(`, randPkg.Use(), `.NewSource(seed))`) | ||||||
|  | 			p.P(`p := NewPopulated`, ccTypeName, `(popr, true)`) | ||||||
|  | 			p.P(`marshaler := `, jsonPkg.Use(), `.Marshaler{}`) | ||||||
|  | 			p.P(`jsondata, err := marshaler.MarshalToString(p)`) | ||||||
|  | 			p.P(`if err != nil {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`t.Fatalf("seed = %d, err = %v", seed, err)`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.P(`msg := &`, ccTypeName, `{}`) | ||||||
|  | 			p.P(`err = `, jsonPkg.Use(), `.UnmarshalString(jsondata, msg)`) | ||||||
|  | 			p.P(`if err != nil {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`t.Fatalf("seed = %d, err = %v", seed, err)`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			if gogoproto.HasVerboseEqual(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 				p.P(`if err := p.VerboseEqual(msg); err != nil {`) | ||||||
|  | 				p.In() | ||||||
|  | 				p.P(`t.Fatalf("seed = %d, %#v !VerboseProto %#v, since %v", seed, msg, p, err)`) | ||||||
|  | 				p.Out() | ||||||
|  | 				p.P(`}`) | ||||||
|  | 			} | ||||||
|  | 			p.P(`if !p.Equal(msg) {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`t.Fatalf("seed = %d, %#v !Json Equal %#v", seed, msg, p)`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return used | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type testText struct { | ||||||
|  | 	*generator.Generator | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func newText(g *generator.Generator) TestPlugin { | ||||||
|  | 	return &testText{g} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *testText) Generate(imports generator.PluginImports, file *generator.FileDescriptor) bool { | ||||||
|  | 	used := false | ||||||
|  | 	testingPkg := imports.NewImport("testing") | ||||||
|  | 	randPkg := imports.NewImport("math/rand") | ||||||
|  | 	timePkg := imports.NewImport("time") | ||||||
|  | 	protoPkg := imports.NewImport("github.com/gogo/protobuf/proto") | ||||||
|  | 	if !gogoproto.ImportsGoGoProto(file.FileDescriptorProto) { | ||||||
|  | 		protoPkg = imports.NewImport("github.com/golang/protobuf/proto") | ||||||
|  | 	} | ||||||
|  | 	//fmtPkg := imports.NewImport("fmt") | ||||||
|  | 	for _, message := range file.Messages() { | ||||||
|  | 		ccTypeName := generator.CamelCaseSlice(message.TypeName()) | ||||||
|  | 		if message.DescriptorProto.GetOptions().GetMapEntry() { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		if gogoproto.HasTestGen(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 			used = true | ||||||
|  |  | ||||||
|  | 			p.P(`func Test`, ccTypeName, `ProtoText(t *`, testingPkg.Use(), `.T) {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`seed := `, timePkg.Use(), `.Now().UnixNano()`) | ||||||
|  | 			p.P(`popr := `, randPkg.Use(), `.New(`, randPkg.Use(), `.NewSource(seed))`) | ||||||
|  | 			p.P(`p := NewPopulated`, ccTypeName, `(popr, true)`) | ||||||
|  | 			p.P(`data := `, protoPkg.Use(), `.MarshalTextString(p)`) | ||||||
|  | 			p.P(`msg := &`, ccTypeName, `{}`) | ||||||
|  | 			p.P(`if err := `, protoPkg.Use(), `.UnmarshalText(data, msg); err != nil {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`t.Fatalf("seed = %d, err = %v", seed, err)`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			if gogoproto.HasVerboseEqual(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 				p.P(`if err := p.VerboseEqual(msg); err != nil {`) | ||||||
|  | 				p.In() | ||||||
|  | 				p.P(`t.Fatalf("seed = %d, %#v !VerboseProto %#v, since %v", seed, msg, p, err)`) | ||||||
|  | 				p.Out() | ||||||
|  | 				p.P(`}`) | ||||||
|  | 			} | ||||||
|  | 			p.P(`if !p.Equal(msg) {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`t.Fatalf("seed = %d, %#v !Proto %#v", seed, msg, p)`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.P() | ||||||
|  |  | ||||||
|  | 			p.P(`func Test`, ccTypeName, `ProtoCompactText(t *`, testingPkg.Use(), `.T) {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`seed := `, timePkg.Use(), `.Now().UnixNano()`) | ||||||
|  | 			p.P(`popr := `, randPkg.Use(), `.New(`, randPkg.Use(), `.NewSource(seed))`) | ||||||
|  | 			p.P(`p := NewPopulated`, ccTypeName, `(popr, true)`) | ||||||
|  | 			p.P(`data := `, protoPkg.Use(), `.CompactTextString(p)`) | ||||||
|  | 			p.P(`msg := &`, ccTypeName, `{}`) | ||||||
|  | 			p.P(`if err := `, protoPkg.Use(), `.UnmarshalText(data, msg); err != nil {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`t.Fatalf("seed = %d, err = %v", seed, err)`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			if gogoproto.HasVerboseEqual(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 				p.P(`if err := p.VerboseEqual(msg); err != nil {`) | ||||||
|  | 				p.In() | ||||||
|  | 				p.P(`t.Fatalf("seed = %d, %#v !VerboseProto %#v, since %v", seed, msg, p, err)`) | ||||||
|  | 				p.Out() | ||||||
|  | 				p.P(`}`) | ||||||
|  | 			} | ||||||
|  | 			p.P(`if !p.Equal(msg) {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`t.Fatalf("seed = %d, %#v !Proto %#v", seed, msg, p)`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 			p.P() | ||||||
|  |  | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return used | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func init() { | ||||||
|  | 	RegisterTestPlugin(newProto) | ||||||
|  | 	RegisterTestPlugin(newJson) | ||||||
|  | 	RegisterTestPlugin(newText) | ||||||
|  | } | ||||||
							
								
								
									
										207
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/union/union.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										207
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/union/union.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,207 @@ | |||||||
|  | // Copyright (c) 2013, Vastech SA (PTY) LTD. All rights reserved. | ||||||
|  | // http://github.com/gogo/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. | ||||||
|  | // | ||||||
|  | // 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. | ||||||
|  |  | ||||||
|  | /* | ||||||
|  | The onlyone plugin generates code for the onlyone extension. | ||||||
|  | All fields must be nullable and only one of the fields may be set, like a union. | ||||||
|  | Two methods are generated | ||||||
|  |  | ||||||
|  |   GetValue() interface{} | ||||||
|  |  | ||||||
|  | and | ||||||
|  |  | ||||||
|  |   SetValue(v interface{}) (set bool) | ||||||
|  |  | ||||||
|  | These provide easier interaction with a onlyone. | ||||||
|  |  | ||||||
|  | The onlyone extension is not called union as this causes compile errors in the C++ generated code. | ||||||
|  | There can only be one ;) | ||||||
|  |  | ||||||
|  | It is enabled by the following extensions: | ||||||
|  |  | ||||||
|  |   - onlyone | ||||||
|  |   - onlyone_all | ||||||
|  |  | ||||||
|  | The onlyone plugin also generates a test given it is enabled using one of the following extensions: | ||||||
|  |  | ||||||
|  |   - testgen | ||||||
|  |   - testgen_all | ||||||
|  |  | ||||||
|  | Lets look at: | ||||||
|  |  | ||||||
|  |   github.com/gogo/protobuf/test/example/example.proto | ||||||
|  |  | ||||||
|  | Btw all the output can be seen at: | ||||||
|  |  | ||||||
|  |   github.com/gogo/protobuf/test/example/* | ||||||
|  |  | ||||||
|  | The following message: | ||||||
|  |  | ||||||
|  |   message U { | ||||||
|  | 	  option (gogoproto.onlyone) = true; | ||||||
|  | 	  optional A A = 1; | ||||||
|  | 	  optional B B = 2; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  | given to the onlyone plugin, will generate code which looks a lot like this: | ||||||
|  |  | ||||||
|  | 	func (this *U) GetValue() interface{} { | ||||||
|  | 		if this.A != nil { | ||||||
|  | 			return this.A | ||||||
|  | 		} | ||||||
|  | 		if this.B != nil { | ||||||
|  | 			return this.B | ||||||
|  | 		} | ||||||
|  | 		return nil | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	func (this *U) SetValue(value interface{}) bool { | ||||||
|  | 		switch vt := value.(type) { | ||||||
|  | 		case *A: | ||||||
|  | 			this.A = vt | ||||||
|  | 		case *B: | ||||||
|  | 			this.B = vt | ||||||
|  | 		default: | ||||||
|  | 			return false | ||||||
|  | 		} | ||||||
|  | 		return true | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | and the following test code: | ||||||
|  |  | ||||||
|  |   func TestUUnion(t *testing.T) { | ||||||
|  | 	popr := math_rand.New(math_rand.NewSource(time.Now().UnixNano())) | ||||||
|  | 	p := NewPopulatedU(popr) | ||||||
|  | 	v := p.GetValue() | ||||||
|  | 	msg := &U{} | ||||||
|  | 	if !msg.SetValue(v) { | ||||||
|  | 		t.Fatalf("Union: Could not set Value") | ||||||
|  | 	} | ||||||
|  | 	if !p.Equal(msg) { | ||||||
|  | 		t.Fatalf("%#v !Union Equal %#v", msg, p) | ||||||
|  | 	} | ||||||
|  |   } | ||||||
|  |  | ||||||
|  | */ | ||||||
|  | package union | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"github.com/gogo/protobuf/gogoproto" | ||||||
|  | 	"github.com/gogo/protobuf/protoc-gen-gogo/generator" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type union struct { | ||||||
|  | 	*generator.Generator | ||||||
|  | 	generator.PluginImports | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func NewUnion() *union { | ||||||
|  | 	return &union{} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *union) Name() string { | ||||||
|  | 	return "union" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *union) Init(g *generator.Generator) { | ||||||
|  | 	p.Generator = g | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *union) Generate(file *generator.FileDescriptor) { | ||||||
|  | 	p.PluginImports = generator.NewPluginImports(p.Generator) | ||||||
|  |  | ||||||
|  | 	for _, message := range file.Messages() { | ||||||
|  | 		if !gogoproto.IsUnion(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		if message.DescriptorProto.HasExtension() { | ||||||
|  | 			panic("onlyone does not currently support extensions") | ||||||
|  | 		} | ||||||
|  | 		if message.DescriptorProto.GetOptions().GetMapEntry() { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		ccTypeName := generator.CamelCaseSlice(message.TypeName()) | ||||||
|  | 		p.P(`func (this *`, ccTypeName, `) GetValue() interface{} {`) | ||||||
|  | 		p.In() | ||||||
|  | 		for _, field := range message.Field { | ||||||
|  | 			fieldname := p.GetFieldName(message, field) | ||||||
|  | 			if fieldname == "Value" { | ||||||
|  | 				panic("cannot have a onlyone message " + ccTypeName + " with a field named Value") | ||||||
|  | 			} | ||||||
|  | 			p.P(`if this.`, fieldname, ` != nil {`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`return this.`, fieldname) | ||||||
|  | 			p.Out() | ||||||
|  | 			p.P(`}`) | ||||||
|  | 		} | ||||||
|  | 		p.P(`return nil`) | ||||||
|  | 		p.Out() | ||||||
|  | 		p.P(`}`) | ||||||
|  | 		p.P(``) | ||||||
|  | 		p.P(`func (this *`, ccTypeName, `) SetValue(value interface{}) bool {`) | ||||||
|  | 		p.In() | ||||||
|  | 		p.P(`switch vt := value.(type) {`) | ||||||
|  | 		p.In() | ||||||
|  | 		for _, field := range message.Field { | ||||||
|  | 			fieldname := p.GetFieldName(message, field) | ||||||
|  | 			goTyp, _ := p.GoType(message, field) | ||||||
|  | 			p.P(`case `, goTyp, `:`) | ||||||
|  | 			p.In() | ||||||
|  | 			p.P(`this.`, fieldname, ` = vt`) | ||||||
|  | 			p.Out() | ||||||
|  | 		} | ||||||
|  | 		p.P(`default:`) | ||||||
|  | 		p.In() | ||||||
|  | 		for _, field := range message.Field { | ||||||
|  | 			fieldname := p.GetFieldName(message, field) | ||||||
|  | 			if field.IsMessage() { | ||||||
|  | 				goTyp, _ := p.GoType(message, field) | ||||||
|  | 				obj := p.ObjectNamed(field.GetTypeName()).(*generator.Descriptor) | ||||||
|  |  | ||||||
|  | 				if gogoproto.IsUnion(obj.File(), obj.DescriptorProto) { | ||||||
|  | 					p.P(`this.`, fieldname, ` = new(`, generator.GoTypeToName(goTyp), `)`) | ||||||
|  | 					p.P(`if set := this.`, fieldname, `.SetValue(value); set {`) | ||||||
|  | 					p.In() | ||||||
|  | 					p.P(`return true`) | ||||||
|  | 					p.Out() | ||||||
|  | 					p.P(`}`) | ||||||
|  | 					p.P(`this.`, fieldname, ` = nil`) | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		p.P(`return false`) | ||||||
|  | 		p.Out() | ||||||
|  | 		p.P(`}`) | ||||||
|  | 		p.P(`return true`) | ||||||
|  | 		p.Out() | ||||||
|  | 		p.P(`}`) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func init() { | ||||||
|  | 	generator.RegisterPlugin(NewUnion()) | ||||||
|  | } | ||||||
							
								
								
									
										84
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/union/uniontest.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/union/uniontest.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,84 @@ | |||||||
|  | // Copyright (c) 2013, Vastech SA (PTY) LTD. All rights reserved. | ||||||
|  | // http://github.com/gogo/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. | ||||||
|  | // | ||||||
|  | // 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 union | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"github.com/gogo/protobuf/gogoproto" | ||||||
|  | 	"github.com/gogo/protobuf/plugin/testgen" | ||||||
|  | 	"github.com/gogo/protobuf/protoc-gen-gogo/generator" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type test struct { | ||||||
|  | 	*generator.Generator | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func NewTest(g *generator.Generator) testgen.TestPlugin { | ||||||
|  | 	return &test{g} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p *test) Generate(imports generator.PluginImports, file *generator.FileDescriptor) bool { | ||||||
|  | 	used := false | ||||||
|  | 	randPkg := imports.NewImport("math/rand") | ||||||
|  | 	timePkg := imports.NewImport("time") | ||||||
|  | 	testingPkg := imports.NewImport("testing") | ||||||
|  | 	for _, message := range file.Messages() { | ||||||
|  | 		if !gogoproto.IsUnion(file.FileDescriptorProto, message.DescriptorProto) || | ||||||
|  | 			!gogoproto.HasTestGen(file.FileDescriptorProto, message.DescriptorProto) { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		if message.DescriptorProto.GetOptions().GetMapEntry() { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		used = true | ||||||
|  | 		ccTypeName := generator.CamelCaseSlice(message.TypeName()) | ||||||
|  |  | ||||||
|  | 		p.P(`func Test`, ccTypeName, `OnlyOne(t *`, testingPkg.Use(), `.T) {`) | ||||||
|  | 		p.In() | ||||||
|  | 		p.P(`popr := `, randPkg.Use(), `.New(`, randPkg.Use(), `.NewSource(`, timePkg.Use(), `.Now().UnixNano()))`) | ||||||
|  | 		p.P(`p := NewPopulated`, ccTypeName, `(popr, true)`) | ||||||
|  | 		p.P(`v := p.GetValue()`) | ||||||
|  | 		p.P(`msg := &`, ccTypeName, `{}`) | ||||||
|  | 		p.P(`if !msg.SetValue(v) {`) | ||||||
|  | 		p.In() | ||||||
|  | 		p.P(`t.Fatalf("OnlyOne: Could not set Value")`) | ||||||
|  | 		p.Out() | ||||||
|  | 		p.P(`}`) | ||||||
|  | 		p.P(`if !p.Equal(msg) {`) | ||||||
|  | 		p.In() | ||||||
|  | 		p.P(`t.Fatalf("%#v !OnlyOne Equal %#v", msg, p)`) | ||||||
|  | 		p.Out() | ||||||
|  | 		p.P(`}`) | ||||||
|  | 		p.Out() | ||||||
|  | 		p.P(`}`) | ||||||
|  |  | ||||||
|  | 	} | ||||||
|  | 	return used | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func init() { | ||||||
|  | 	testgen.RegisterTestPlugin(NewTest) | ||||||
|  | } | ||||||
							
								
								
									
										1323
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/unmarshal/unmarshal.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1323
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/plugin/unmarshal/unmarshal.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										2
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/proto/clone.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/proto/clone.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -30,7 +30,7 @@ | |||||||
| // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||||
|  |  | ||||||
| // Protocol buffer deep copy and merge. | // Protocol buffer deep copy and merge. | ||||||
| // TODO: MessageSet and RawMessage. | // TODO: RawMessage. | ||||||
|  |  | ||||||
| package proto | package proto | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										6
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/proto/decode.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/proto/decode.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -602,9 +602,13 @@ func (o *Buffer) dec_slice_packed_bool(p *Properties, base structPointer) error | |||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 	nb := int(nn) // number of bytes of encoded bools | 	nb := int(nn) // number of bytes of encoded bools | ||||||
|  | 	fin := o.index + nb | ||||||
|  | 	if fin < o.index { | ||||||
|  | 		return errOverflow | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	y := *v | 	y := *v | ||||||
| 	for i := 0; i < nb; i++ { | 	for o.index < fin { | ||||||
| 		u, err := p.valDec(o) | 		u, err := p.valDec(o) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return err | 			return err | ||||||
|   | |||||||
							
								
								
									
										5
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/proto/encode.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/proto/encode.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1115,9 +1115,8 @@ func (o *Buffer) enc_new_map(p *Properties, base structPointer) error { | |||||||
| 		return nil | 		return nil | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	keys := v.MapKeys() | 	// Don't sort map keys. It is not required by the spec, and C++ doesn't do it. | ||||||
| 	sort.Sort(mapKeys(keys)) | 	for _, key := range v.MapKeys() { | ||||||
| 	for _, key := range keys { |  | ||||||
| 		val := v.MapIndex(key) | 		val := v.MapIndex(key) | ||||||
|  |  | ||||||
| 		// The only illegal map entry values are nil message pointers. | 		// The only illegal map entry values are nil message pointers. | ||||||
|   | |||||||
							
								
								
									
										1
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/proto/equal.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/proto/equal.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -30,7 +30,6 @@ | |||||||
| // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||||
|  |  | ||||||
| // Protocol buffer comparison. | // Protocol buffer comparison. | ||||||
| // TODO: MessageSet. |  | ||||||
|  |  | ||||||
| package proto | package proto | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/proto/lib.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/proto/lib.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -216,7 +216,7 @@ The resulting file, test.pb.go, is: | |||||||
|  |  | ||||||
| To create and play with a Test object: | To create and play with a Test object: | ||||||
|  |  | ||||||
| package main | 	package main | ||||||
|  |  | ||||||
| 	import ( | 	import ( | ||||||
| 		"log" | 		"log" | ||||||
|   | |||||||
							
								
								
									
										41
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/proto/message_set.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										41
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/proto/message_set.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -44,11 +44,11 @@ import ( | |||||||
| 	"sort" | 	"sort" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| // 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. | ||||||
| // A message type ID is required for storing a protocol buffer in a message set. | // A message type ID is required for storing a protocol buffer in a message set. | ||||||
| var ErrNoMessageTypeId = errors.New("proto does not have a message type ID") | var errNoMessageTypeID = errors.New("proto does not have a message type ID") | ||||||
|  |  | ||||||
| // The first two types (_MessageSet_Item and MessageSet) | // The first two types (_MessageSet_Item and messageSet) | ||||||
| // model what the protocol compiler produces for the following protocol message: | // model what the protocol compiler produces for the following protocol message: | ||||||
| //   message MessageSet { | //   message MessageSet { | ||||||
| //     repeated group Item = 1 { | //     repeated group Item = 1 { | ||||||
| @@ -58,27 +58,20 @@ var ErrNoMessageTypeId = errors.New("proto does not have a message type ID") | |||||||
| //   } | //   } | ||||||
| // That is the MessageSet wire format. We can't use a proto to generate these | // That is the MessageSet wire format. We can't use a proto to generate these | ||||||
| // because that would introduce a circular dependency between it and this package. | // because that would introduce a circular dependency between it and this package. | ||||||
| // |  | ||||||
| // When a proto1 proto has a field that looks like: |  | ||||||
| //   optional message<MessageSet> info = 3; |  | ||||||
| // the protocol compiler produces a field in the generated struct that looks like: |  | ||||||
| //   Info *_proto_.MessageSet  `protobuf:"bytes,3,opt,name=info"` |  | ||||||
| // The package is automatically inserted so there is no need for that proto file to |  | ||||||
| // import this package. |  | ||||||
|  |  | ||||||
| type _MessageSet_Item struct { | type _MessageSet_Item struct { | ||||||
| 	TypeId  *int32 `protobuf:"varint,2,req,name=type_id"` | 	TypeId  *int32 `protobuf:"varint,2,req,name=type_id"` | ||||||
| 	Message []byte `protobuf:"bytes,3,req,name=message"` | 	Message []byte `protobuf:"bytes,3,req,name=message"` | ||||||
| } | } | ||||||
|  |  | ||||||
| type MessageSet struct { | type messageSet struct { | ||||||
| 	Item             []*_MessageSet_Item `protobuf:"group,1,rep"` | 	Item             []*_MessageSet_Item `protobuf:"group,1,rep"` | ||||||
| 	XXX_unrecognized []byte | 	XXX_unrecognized []byte | ||||||
| 	// TODO: caching? | 	// TODO: caching? | ||||||
| } | } | ||||||
|  |  | ||||||
| // Make sure MessageSet is a Message. | // Make sure messageSet is a Message. | ||||||
| var _ Message = (*MessageSet)(nil) | var _ Message = (*messageSet)(nil) | ||||||
|  |  | ||||||
| // messageTypeIder is an interface satisfied by a protocol buffer type | // messageTypeIder is an interface satisfied by a protocol buffer type | ||||||
| // that may be stored in a MessageSet. | // that may be stored in a MessageSet. | ||||||
| @@ -86,7 +79,7 @@ type messageTypeIder interface { | |||||||
| 	MessageTypeId() int32 | 	MessageTypeId() int32 | ||||||
| } | } | ||||||
|  |  | ||||||
| func (ms *MessageSet) find(pb Message) *_MessageSet_Item { | func (ms *messageSet) find(pb Message) *_MessageSet_Item { | ||||||
| 	mti, ok := pb.(messageTypeIder) | 	mti, ok := pb.(messageTypeIder) | ||||||
| 	if !ok { | 	if !ok { | ||||||
| 		return nil | 		return nil | ||||||
| @@ -100,24 +93,24 @@ func (ms *MessageSet) find(pb Message) *_MessageSet_Item { | |||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (ms *MessageSet) Has(pb Message) bool { | func (ms *messageSet) Has(pb Message) bool { | ||||||
| 	if ms.find(pb) != nil { | 	if ms.find(pb) != nil { | ||||||
| 		return true | 		return true | ||||||
| 	} | 	} | ||||||
| 	return false | 	return false | ||||||
| } | } | ||||||
|  |  | ||||||
| func (ms *MessageSet) Unmarshal(pb Message) error { | func (ms *messageSet) Unmarshal(pb Message) error { | ||||||
| 	if item := ms.find(pb); item != nil { | 	if item := ms.find(pb); item != nil { | ||||||
| 		return Unmarshal(item.Message, pb) | 		return Unmarshal(item.Message, pb) | ||||||
| 	} | 	} | ||||||
| 	if _, ok := pb.(messageTypeIder); !ok { | 	if _, ok := pb.(messageTypeIder); !ok { | ||||||
| 		return ErrNoMessageTypeId | 		return errNoMessageTypeID | ||||||
| 	} | 	} | ||||||
| 	return nil // TODO: return error instead? | 	return nil // TODO: return error instead? | ||||||
| } | } | ||||||
|  |  | ||||||
| func (ms *MessageSet) Marshal(pb Message) error { | func (ms *messageSet) Marshal(pb Message) error { | ||||||
| 	msg, err := Marshal(pb) | 	msg, err := Marshal(pb) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return err | ||||||
| @@ -130,7 +123,7 @@ func (ms *MessageSet) Marshal(pb Message) error { | |||||||
|  |  | ||||||
| 	mti, ok := pb.(messageTypeIder) | 	mti, ok := pb.(messageTypeIder) | ||||||
| 	if !ok { | 	if !ok { | ||||||
| 		return ErrNoMessageTypeId | 		return errNoMessageTypeID | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	mtid := mti.MessageTypeId() | 	mtid := mti.MessageTypeId() | ||||||
| @@ -141,9 +134,9 @@ func (ms *MessageSet) Marshal(pb Message) error { | |||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (ms *MessageSet) Reset()         { *ms = MessageSet{} } | func (ms *messageSet) Reset()         { *ms = messageSet{} } | ||||||
| func (ms *MessageSet) String() string { return CompactTextString(ms) } | func (ms *messageSet) String() string { return CompactTextString(ms) } | ||||||
| func (*MessageSet) ProtoMessage()     {} | func (*messageSet) ProtoMessage()     {} | ||||||
|  |  | ||||||
| // Support for the message_set_wire_format message option. | // Support for the message_set_wire_format message option. | ||||||
|  |  | ||||||
| @@ -169,7 +162,7 @@ func MarshalMessageSet(m map[int32]Extension) ([]byte, error) { | |||||||
| 	} | 	} | ||||||
| 	sort.Ints(ids) | 	sort.Ints(ids) | ||||||
|  |  | ||||||
| 	ms := &MessageSet{Item: make([]*_MessageSet_Item, 0, len(m))} | 	ms := &messageSet{Item: make([]*_MessageSet_Item, 0, len(m))} | ||||||
| 	for _, id := range ids { | 	for _, id := range ids { | ||||||
| 		e := m[int32(id)] | 		e := m[int32(id)] | ||||||
| 		// Remove the wire type and field number varint, as well as the length varint. | 		// Remove the wire type and field number varint, as well as the length varint. | ||||||
| @@ -186,7 +179,7 @@ func MarshalMessageSet(m map[int32]Extension) ([]byte, error) { | |||||||
| // UnmarshalMessageSet decodes the extension map encoded in buf 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 Unmarshal methods on protocol buffer messages with the message_set_wire_format option. | // It is called by generated Unmarshal methods on protocol buffer messages with the message_set_wire_format option. | ||||||
| func UnmarshalMessageSet(buf []byte, m map[int32]Extension) error { | func UnmarshalMessageSet(buf []byte, m map[int32]Extension) error { | ||||||
| 	ms := new(MessageSet) | 	ms := new(messageSet) | ||||||
| 	if err := Unmarshal(buf, ms); err != nil { | 	if err := Unmarshal(buf, ms); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
|   | |||||||
							
								
								
									
										39
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/proto/properties.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										39
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/proto/properties.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -42,6 +42,7 @@ package proto | |||||||
|  |  | ||||||
| import ( | import ( | ||||||
| 	"fmt" | 	"fmt" | ||||||
|  | 	"log" | ||||||
| 	"os" | 	"os" | ||||||
| 	"reflect" | 	"reflect" | ||||||
| 	"sort" | 	"sort" | ||||||
| @@ -740,6 +741,7 @@ func getPropertiesLocked(t reflect.Type) *StructProperties { | |||||||
| 	prop.Prop = make([]*Properties, t.NumField()) | 	prop.Prop = make([]*Properties, t.NumField()) | ||||||
| 	prop.order = make([]int, t.NumField()) | 	prop.order = make([]int, t.NumField()) | ||||||
|  |  | ||||||
|  | 	isOneofMessage := false | ||||||
| 	for i := 0; i < t.NumField(); i++ { | 	for i := 0; i < t.NumField(); i++ { | ||||||
| 		f := t.Field(i) | 		f := t.Field(i) | ||||||
| 		p := new(Properties) | 		p := new(Properties) | ||||||
| @@ -761,6 +763,9 @@ func getPropertiesLocked(t reflect.Type) *StructProperties { | |||||||
| 			prop.unrecField = toField(&f) | 			prop.unrecField = toField(&f) | ||||||
| 		} | 		} | ||||||
| 		oneof := f.Tag.Get("protobuf_oneof") != "" // special case | 		oneof := f.Tag.Get("protobuf_oneof") != "" // special case | ||||||
|  | 		if oneof { | ||||||
|  | 			isOneofMessage = true | ||||||
|  | 		} | ||||||
| 		prop.Prop[i] = p | 		prop.Prop[i] = p | ||||||
| 		prop.order[i] = i | 		prop.order[i] = i | ||||||
| 		if debug { | 		if debug { | ||||||
| @@ -781,7 +786,7 @@ func getPropertiesLocked(t reflect.Type) *StructProperties { | |||||||
| 	type oneofMessage interface { | 	type oneofMessage interface { | ||||||
| 		XXX_OneofFuncs() (func(Message, *Buffer) error, func(Message, int, int, *Buffer) (bool, error), []interface{}) | 		XXX_OneofFuncs() (func(Message, *Buffer) error, func(Message, int, int, *Buffer) (bool, error), []interface{}) | ||||||
| 	} | 	} | ||||||
| 	if om, ok := reflect.Zero(reflect.PtrTo(t)).Interface().(oneofMessage); ok { | 	if om, ok := reflect.Zero(reflect.PtrTo(t)).Interface().(oneofMessage); isOneofMessage && ok { | ||||||
| 		var oots []interface{} | 		var oots []interface{} | ||||||
| 		prop.oneofMarshaler, prop.oneofUnmarshaler, oots = om.XXX_OneofFuncs() | 		prop.oneofMarshaler, prop.oneofUnmarshaler, oots = om.XXX_OneofFuncs() | ||||||
| 		prop.stype = t | 		prop.stype = t | ||||||
| @@ -876,3 +881,35 @@ func RegisterEnum(typeName string, unusedNameMap map[int32]string, valueMap map[ | |||||||
| 	} | 	} | ||||||
| 	enumStringMaps[typeName] = unusedNameMap | 	enumStringMaps[typeName] = unusedNameMap | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // EnumValueMap returns the mapping from names to integers of the | ||||||
|  | // enum type enumType, or a nil if not found. | ||||||
|  | func EnumValueMap(enumType string) map[string]int32 { | ||||||
|  | 	return enumValueMaps[enumType] | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // A registry of all linked message types. | ||||||
|  | // The string is a fully-qualified proto name ("pkg.Message"). | ||||||
|  | var ( | ||||||
|  | 	protoTypes    = make(map[string]reflect.Type) | ||||||
|  | 	revProtoTypes = make(map[reflect.Type]string) | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | // RegisterType is called from generated code and maps from the fully qualified | ||||||
|  | // proto name to the type (pointer to struct) of the protocol buffer. | ||||||
|  | func RegisterType(x Message, name string) { | ||||||
|  | 	if _, ok := protoTypes[name]; ok { | ||||||
|  | 		// TODO: Some day, make this a panic. | ||||||
|  | 		log.Printf("proto: duplicate proto type registered: %s", name) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 	t := reflect.TypeOf(x) | ||||||
|  | 	protoTypes[name] = t | ||||||
|  | 	revProtoTypes[t] = name | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // MessageName returns the fully-qualified proto name for the given message type. | ||||||
|  | func MessageName(x Message) string { return revProtoTypes[reflect.TypeOf(x)] } | ||||||
|  |  | ||||||
|  | // MessageType returns the message type (pointer to struct) for a named message. | ||||||
|  | func MessageType(name string) reflect.Type { return protoTypes[name] } | ||||||
|   | |||||||
							
								
								
									
										3
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/proto/proto3_proto/proto3.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/proto/proto3_proto/proto3.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -122,5 +122,8 @@ func (m *MessageWithMap) GetByteMapping() map[bool][]byte { | |||||||
| } | } | ||||||
|  |  | ||||||
| func init() { | func init() { | ||||||
|  | 	proto.RegisterType((*Message)(nil), "proto3_proto.Message") | ||||||
|  | 	proto.RegisterType((*Nested)(nil), "proto3_proto.Nested") | ||||||
|  | 	proto.RegisterType((*MessageWithMap)(nil), "proto3_proto.MessageWithMap") | ||||||
| 	proto.RegisterEnum("proto3_proto.Message_Humour", Message_Humour_name, Message_Humour_value) | 	proto.RegisterEnum("proto3_proto.Message_Humour", Message_Humour_name, Message_Humour_value) | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										56
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/proto/text.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										56
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/proto/text.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -175,20 +175,12 @@ func writeName(w *textWriter, props *Properties) error { | |||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| var ( |  | ||||||
| 	messageSetType = reflect.TypeOf((*MessageSet)(nil)).Elem() |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| // raw is the interface satisfied by RawMessage. | // raw is the interface satisfied by RawMessage. | ||||||
| type raw interface { | type raw interface { | ||||||
| 	Bytes() []byte | 	Bytes() []byte | ||||||
| } | } | ||||||
|  |  | ||||||
| func writeStruct(w *textWriter, sv reflect.Value) error { | func writeStruct(w *textWriter, sv reflect.Value) error { | ||||||
| 	if sv.Type() == messageSetType { |  | ||||||
| 		return writeMessageSet(w, sv.Addr().Interface().(*MessageSet)) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	st := sv.Type() | 	st := sv.Type() | ||||||
| 	sprops := GetProperties(st) | 	sprops := GetProperties(st) | ||||||
| 	for i := 0; i < sv.NumField(); i++ { | 	for i := 0; i < sv.NumField(); i++ { | ||||||
| @@ -387,7 +379,13 @@ func writeStruct(w *textWriter, sv reflect.Value) error { | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	// Extensions (the XXX_extensions field). | 	// Extensions (the XXX_extensions field). | ||||||
| 	pv := sv.Addr() | 	pv := sv | ||||||
|  | 	if pv.CanAddr() { | ||||||
|  | 		pv = sv.Addr() | ||||||
|  | 	} else { | ||||||
|  | 		pv = reflect.New(sv.Type()) | ||||||
|  | 		pv.Elem().Set(sv) | ||||||
|  | 	} | ||||||
| 	if pv.Type().Implements(extendableProtoType) { | 	if pv.Type().Implements(extendableProtoType) { | ||||||
| 		if err := writeExtensions(w, pv); err != nil { | 		if err := writeExtensions(w, pv); err != nil { | ||||||
| 			return err | 			return err | ||||||
| @@ -550,45 +548,7 @@ func writeString(w *textWriter, s string) error { | |||||||
| 	return w.WriteByte('"') | 	return w.WriteByte('"') | ||||||
| } | } | ||||||
|  |  | ||||||
| func writeMessageSet(w *textWriter, ms *MessageSet) error { | func writeUnknownStruct(w *textWriter, data []byte) (err error) { | ||||||
| 	for _, item := range ms.Item { |  | ||||||
| 		id := *item.TypeId |  | ||||||
| 		if msd, ok := messageSetMap[id]; ok { |  | ||||||
| 			// Known message set type. |  | ||||||
| 			if _, err := fmt.Fprintf(w, "[%s]: <\n", msd.name); err != nil { |  | ||||||
| 				return err |  | ||||||
| 			} |  | ||||||
| 			w.indent() |  | ||||||
|  |  | ||||||
| 			pb := reflect.New(msd.t.Elem()) |  | ||||||
| 			if err := Unmarshal(item.Message, pb.Interface().(Message)); err != nil { |  | ||||||
| 				if _, ferr := fmt.Fprintf(w, "/* bad message: %v */\n", err); ferr != nil { |  | ||||||
| 					return ferr |  | ||||||
| 				} |  | ||||||
| 			} else { |  | ||||||
| 				if err := writeStruct(w, pb.Elem()); err != nil { |  | ||||||
| 					return err |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 		} else { |  | ||||||
| 			// Unknown type. |  | ||||||
| 			if _, err := fmt.Fprintf(w, "[%d]: <\n", id); err != nil { |  | ||||||
| 				return err |  | ||||||
| 			} |  | ||||||
| 			w.indent() |  | ||||||
| 			if err := writeUnknownStruct(w, item.Message); err != nil { |  | ||||||
| 				return err |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		w.unindent() |  | ||||||
| 		if _, err := w.Write(gtNewline); err != nil { |  | ||||||
| 			return err |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func writeUnknownStruct(w *textWriter, data []byte) error { |  | ||||||
| 	if !w.compact { | 	if !w.compact { | ||||||
| 		if _, err := fmt.Fprintf(w, "/* %d unknown bytes */\n", len(data)); err != nil { | 		if _, err := fmt.Fprintf(w, "/* %d unknown bytes */\n", len(data)); err != nil { | ||||||
| 			return err | 			return err | ||||||
|   | |||||||
							
								
								
									
										34
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/proto/text_parser.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										34
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/proto/text_parser.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -715,18 +715,32 @@ func (p *textParser) readAny(v reflect.Value, props *Properties) error { | |||||||
| 			fv.Set(reflect.ValueOf(bytes)) | 			fv.Set(reflect.ValueOf(bytes)) | ||||||
| 			return nil | 			return nil | ||||||
| 		} | 		} | ||||||
| 		// Repeated field. May already exist. | 		// Repeated field. | ||||||
| 		flen := fv.Len() | 		if tok.value == "[" { | ||||||
| 		if flen == fv.Cap() { | 			// Repeated field with list notation, like [1,2,3]. | ||||||
| 			nav := reflect.MakeSlice(at, flen, 2*flen+1) | 			for { | ||||||
| 			reflect.Copy(nav, fv) | 				fv.Set(reflect.Append(fv, reflect.New(at.Elem()).Elem())) | ||||||
| 			fv.Set(nav) | 				err := p.readAny(fv.Index(fv.Len()-1), props) | ||||||
|  | 				if err != nil { | ||||||
|  | 					return err | ||||||
|  | 				} | ||||||
|  | 				tok := p.next() | ||||||
|  | 				if tok.err != nil { | ||||||
|  | 					return tok.err | ||||||
|  | 				} | ||||||
|  | 				if tok.value == "]" { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 				if tok.value != "," { | ||||||
|  | 					return p.errorf("Expected ']' or ',' found %q", tok.value) | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			return nil | ||||||
| 		} | 		} | ||||||
| 		fv.SetLen(flen + 1) | 		// One value of the repeated field. | ||||||
|  |  | ||||||
| 		// Read one. |  | ||||||
| 		p.back() | 		p.back() | ||||||
| 		return p.readAny(fv.Index(flen), props) | 		fv.Set(reflect.Append(fv, reflect.New(at.Elem()).Elem())) | ||||||
|  | 		return p.readAny(fv.Index(fv.Len()-1), props) | ||||||
| 	case reflect.Bool: | 	case reflect.Bool: | ||||||
| 		// Either "true", "false", 1 or 0. | 		// Either "true", "false", 1 or 0. | ||||||
| 		switch tok.value { | 		switch tok.value { | ||||||
|   | |||||||
							
								
								
									
										33
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/Makefile
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/Makefile
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,33 @@ | |||||||
|  | # Go support for Protocol Buffers - Google's data interchange format | ||||||
|  | # | ||||||
|  | # Copyright 2010 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. | ||||||
|  |  | ||||||
|  | regenerate: | ||||||
|  | 	protoc --gogo_out=. -I=../../protobuf/google/protobuf ../../protobuf/google/protobuf/descriptor.proto | ||||||
							
								
								
									
										1825
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1825
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										635
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/gostring.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										635
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/gostring.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,635 @@ | |||||||
|  | package descriptor | ||||||
|  |  | ||||||
|  | import fmt "fmt" | ||||||
|  |  | ||||||
|  | import strings "strings" | ||||||
|  | import github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto" | ||||||
|  | import sort "sort" | ||||||
|  | import strconv "strconv" | ||||||
|  | import reflect "reflect" | ||||||
|  |  | ||||||
|  | func (this *FileDescriptorSet) GoString() string { | ||||||
|  | 	if this == nil { | ||||||
|  | 		return "nil" | ||||||
|  | 	} | ||||||
|  | 	s := make([]string, 0, 5) | ||||||
|  | 	s = append(s, "&descriptor.FileDescriptorSet{") | ||||||
|  | 	if this.File != nil { | ||||||
|  | 		s = append(s, "File: "+fmt.Sprintf("%#v", this.File)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.XXX_unrecognized != nil { | ||||||
|  | 		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") | ||||||
|  | 	} | ||||||
|  | 	s = append(s, "}") | ||||||
|  | 	return strings.Join(s, "") | ||||||
|  | } | ||||||
|  | func (this *FileDescriptorProto) GoString() string { | ||||||
|  | 	if this == nil { | ||||||
|  | 		return "nil" | ||||||
|  | 	} | ||||||
|  | 	s := make([]string, 0, 16) | ||||||
|  | 	s = append(s, "&descriptor.FileDescriptorProto{") | ||||||
|  | 	if this.Name != nil { | ||||||
|  | 		s = append(s, "Name: "+valueToGoStringDescriptor(this.Name, "string")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.Package != nil { | ||||||
|  | 		s = append(s, "Package: "+valueToGoStringDescriptor(this.Package, "string")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.Dependency != nil { | ||||||
|  | 		s = append(s, "Dependency: "+fmt.Sprintf("%#v", this.Dependency)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.PublicDependency != nil { | ||||||
|  | 		s = append(s, "PublicDependency: "+fmt.Sprintf("%#v", this.PublicDependency)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.WeakDependency != nil { | ||||||
|  | 		s = append(s, "WeakDependency: "+fmt.Sprintf("%#v", this.WeakDependency)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.MessageType != nil { | ||||||
|  | 		s = append(s, "MessageType: "+fmt.Sprintf("%#v", this.MessageType)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.EnumType != nil { | ||||||
|  | 		s = append(s, "EnumType: "+fmt.Sprintf("%#v", this.EnumType)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.Service != nil { | ||||||
|  | 		s = append(s, "Service: "+fmt.Sprintf("%#v", this.Service)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.Extension != nil { | ||||||
|  | 		s = append(s, "Extension: "+fmt.Sprintf("%#v", this.Extension)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.Options != nil { | ||||||
|  | 		s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.SourceCodeInfo != nil { | ||||||
|  | 		s = append(s, "SourceCodeInfo: "+fmt.Sprintf("%#v", this.SourceCodeInfo)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.Syntax != nil { | ||||||
|  | 		s = append(s, "Syntax: "+valueToGoStringDescriptor(this.Syntax, "string")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.XXX_unrecognized != nil { | ||||||
|  | 		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") | ||||||
|  | 	} | ||||||
|  | 	s = append(s, "}") | ||||||
|  | 	return strings.Join(s, "") | ||||||
|  | } | ||||||
|  | func (this *DescriptorProto) GoString() string { | ||||||
|  | 	if this == nil { | ||||||
|  | 		return "nil" | ||||||
|  | 	} | ||||||
|  | 	s := make([]string, 0, 14) | ||||||
|  | 	s = append(s, "&descriptor.DescriptorProto{") | ||||||
|  | 	if this.Name != nil { | ||||||
|  | 		s = append(s, "Name: "+valueToGoStringDescriptor(this.Name, "string")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.Field != nil { | ||||||
|  | 		s = append(s, "Field: "+fmt.Sprintf("%#v", this.Field)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.Extension != nil { | ||||||
|  | 		s = append(s, "Extension: "+fmt.Sprintf("%#v", this.Extension)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.NestedType != nil { | ||||||
|  | 		s = append(s, "NestedType: "+fmt.Sprintf("%#v", this.NestedType)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.EnumType != nil { | ||||||
|  | 		s = append(s, "EnumType: "+fmt.Sprintf("%#v", this.EnumType)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.ExtensionRange != nil { | ||||||
|  | 		s = append(s, "ExtensionRange: "+fmt.Sprintf("%#v", this.ExtensionRange)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.OneofDecl != nil { | ||||||
|  | 		s = append(s, "OneofDecl: "+fmt.Sprintf("%#v", this.OneofDecl)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.Options != nil { | ||||||
|  | 		s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.ReservedRange != nil { | ||||||
|  | 		s = append(s, "ReservedRange: "+fmt.Sprintf("%#v", this.ReservedRange)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.ReservedName != nil { | ||||||
|  | 		s = append(s, "ReservedName: "+fmt.Sprintf("%#v", this.ReservedName)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.XXX_unrecognized != nil { | ||||||
|  | 		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") | ||||||
|  | 	} | ||||||
|  | 	s = append(s, "}") | ||||||
|  | 	return strings.Join(s, "") | ||||||
|  | } | ||||||
|  | func (this *DescriptorProto_ExtensionRange) GoString() string { | ||||||
|  | 	if this == nil { | ||||||
|  | 		return "nil" | ||||||
|  | 	} | ||||||
|  | 	s := make([]string, 0, 6) | ||||||
|  | 	s = append(s, "&descriptor.DescriptorProto_ExtensionRange{") | ||||||
|  | 	if this.Start != nil { | ||||||
|  | 		s = append(s, "Start: "+valueToGoStringDescriptor(this.Start, "int32")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.End != nil { | ||||||
|  | 		s = append(s, "End: "+valueToGoStringDescriptor(this.End, "int32")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.XXX_unrecognized != nil { | ||||||
|  | 		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") | ||||||
|  | 	} | ||||||
|  | 	s = append(s, "}") | ||||||
|  | 	return strings.Join(s, "") | ||||||
|  | } | ||||||
|  | func (this *DescriptorProto_ReservedRange) GoString() string { | ||||||
|  | 	if this == nil { | ||||||
|  | 		return "nil" | ||||||
|  | 	} | ||||||
|  | 	s := make([]string, 0, 6) | ||||||
|  | 	s = append(s, "&descriptor.DescriptorProto_ReservedRange{") | ||||||
|  | 	if this.Start != nil { | ||||||
|  | 		s = append(s, "Start: "+valueToGoStringDescriptor(this.Start, "int32")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.End != nil { | ||||||
|  | 		s = append(s, "End: "+valueToGoStringDescriptor(this.End, "int32")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.XXX_unrecognized != nil { | ||||||
|  | 		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") | ||||||
|  | 	} | ||||||
|  | 	s = append(s, "}") | ||||||
|  | 	return strings.Join(s, "") | ||||||
|  | } | ||||||
|  | func (this *FieldDescriptorProto) GoString() string { | ||||||
|  | 	if this == nil { | ||||||
|  | 		return "nil" | ||||||
|  | 	} | ||||||
|  | 	s := make([]string, 0, 14) | ||||||
|  | 	s = append(s, "&descriptor.FieldDescriptorProto{") | ||||||
|  | 	if this.Name != nil { | ||||||
|  | 		s = append(s, "Name: "+valueToGoStringDescriptor(this.Name, "string")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.Number != nil { | ||||||
|  | 		s = append(s, "Number: "+valueToGoStringDescriptor(this.Number, "int32")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.Label != nil { | ||||||
|  | 		s = append(s, "Label: "+valueToGoStringDescriptor(this.Label, "descriptor.FieldDescriptorProto_Label")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.Type != nil { | ||||||
|  | 		s = append(s, "Type: "+valueToGoStringDescriptor(this.Type, "descriptor.FieldDescriptorProto_Type")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.TypeName != nil { | ||||||
|  | 		s = append(s, "TypeName: "+valueToGoStringDescriptor(this.TypeName, "string")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.Extendee != nil { | ||||||
|  | 		s = append(s, "Extendee: "+valueToGoStringDescriptor(this.Extendee, "string")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.DefaultValue != nil { | ||||||
|  | 		s = append(s, "DefaultValue: "+valueToGoStringDescriptor(this.DefaultValue, "string")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.OneofIndex != nil { | ||||||
|  | 		s = append(s, "OneofIndex: "+valueToGoStringDescriptor(this.OneofIndex, "int32")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.JsonName != nil { | ||||||
|  | 		s = append(s, "JsonName: "+valueToGoStringDescriptor(this.JsonName, "string")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.Options != nil { | ||||||
|  | 		s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.XXX_unrecognized != nil { | ||||||
|  | 		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") | ||||||
|  | 	} | ||||||
|  | 	s = append(s, "}") | ||||||
|  | 	return strings.Join(s, "") | ||||||
|  | } | ||||||
|  | func (this *OneofDescriptorProto) GoString() string { | ||||||
|  | 	if this == nil { | ||||||
|  | 		return "nil" | ||||||
|  | 	} | ||||||
|  | 	s := make([]string, 0, 5) | ||||||
|  | 	s = append(s, "&descriptor.OneofDescriptorProto{") | ||||||
|  | 	if this.Name != nil { | ||||||
|  | 		s = append(s, "Name: "+valueToGoStringDescriptor(this.Name, "string")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.XXX_unrecognized != nil { | ||||||
|  | 		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") | ||||||
|  | 	} | ||||||
|  | 	s = append(s, "}") | ||||||
|  | 	return strings.Join(s, "") | ||||||
|  | } | ||||||
|  | func (this *EnumDescriptorProto) GoString() string { | ||||||
|  | 	if this == nil { | ||||||
|  | 		return "nil" | ||||||
|  | 	} | ||||||
|  | 	s := make([]string, 0, 7) | ||||||
|  | 	s = append(s, "&descriptor.EnumDescriptorProto{") | ||||||
|  | 	if this.Name != nil { | ||||||
|  | 		s = append(s, "Name: "+valueToGoStringDescriptor(this.Name, "string")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.Value != nil { | ||||||
|  | 		s = append(s, "Value: "+fmt.Sprintf("%#v", this.Value)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.Options != nil { | ||||||
|  | 		s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.XXX_unrecognized != nil { | ||||||
|  | 		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") | ||||||
|  | 	} | ||||||
|  | 	s = append(s, "}") | ||||||
|  | 	return strings.Join(s, "") | ||||||
|  | } | ||||||
|  | func (this *EnumValueDescriptorProto) GoString() string { | ||||||
|  | 	if this == nil { | ||||||
|  | 		return "nil" | ||||||
|  | 	} | ||||||
|  | 	s := make([]string, 0, 7) | ||||||
|  | 	s = append(s, "&descriptor.EnumValueDescriptorProto{") | ||||||
|  | 	if this.Name != nil { | ||||||
|  | 		s = append(s, "Name: "+valueToGoStringDescriptor(this.Name, "string")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.Number != nil { | ||||||
|  | 		s = append(s, "Number: "+valueToGoStringDescriptor(this.Number, "int32")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.Options != nil { | ||||||
|  | 		s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.XXX_unrecognized != nil { | ||||||
|  | 		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") | ||||||
|  | 	} | ||||||
|  | 	s = append(s, "}") | ||||||
|  | 	return strings.Join(s, "") | ||||||
|  | } | ||||||
|  | func (this *ServiceDescriptorProto) GoString() string { | ||||||
|  | 	if this == nil { | ||||||
|  | 		return "nil" | ||||||
|  | 	} | ||||||
|  | 	s := make([]string, 0, 7) | ||||||
|  | 	s = append(s, "&descriptor.ServiceDescriptorProto{") | ||||||
|  | 	if this.Name != nil { | ||||||
|  | 		s = append(s, "Name: "+valueToGoStringDescriptor(this.Name, "string")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.Method != nil { | ||||||
|  | 		s = append(s, "Method: "+fmt.Sprintf("%#v", this.Method)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.Options != nil { | ||||||
|  | 		s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.XXX_unrecognized != nil { | ||||||
|  | 		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") | ||||||
|  | 	} | ||||||
|  | 	s = append(s, "}") | ||||||
|  | 	return strings.Join(s, "") | ||||||
|  | } | ||||||
|  | func (this *MethodDescriptorProto) GoString() string { | ||||||
|  | 	if this == nil { | ||||||
|  | 		return "nil" | ||||||
|  | 	} | ||||||
|  | 	s := make([]string, 0, 10) | ||||||
|  | 	s = append(s, "&descriptor.MethodDescriptorProto{") | ||||||
|  | 	if this.Name != nil { | ||||||
|  | 		s = append(s, "Name: "+valueToGoStringDescriptor(this.Name, "string")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.InputType != nil { | ||||||
|  | 		s = append(s, "InputType: "+valueToGoStringDescriptor(this.InputType, "string")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.OutputType != nil { | ||||||
|  | 		s = append(s, "OutputType: "+valueToGoStringDescriptor(this.OutputType, "string")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.Options != nil { | ||||||
|  | 		s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.ClientStreaming != nil { | ||||||
|  | 		s = append(s, "ClientStreaming: "+valueToGoStringDescriptor(this.ClientStreaming, "bool")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.ServerStreaming != nil { | ||||||
|  | 		s = append(s, "ServerStreaming: "+valueToGoStringDescriptor(this.ServerStreaming, "bool")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.XXX_unrecognized != nil { | ||||||
|  | 		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") | ||||||
|  | 	} | ||||||
|  | 	s = append(s, "}") | ||||||
|  | 	return strings.Join(s, "") | ||||||
|  | } | ||||||
|  | func (this *FileOptions) GoString() string { | ||||||
|  | 	if this == nil { | ||||||
|  | 		return "nil" | ||||||
|  | 	} | ||||||
|  | 	s := make([]string, 0, 20) | ||||||
|  | 	s = append(s, "&descriptor.FileOptions{") | ||||||
|  | 	if this.JavaPackage != nil { | ||||||
|  | 		s = append(s, "JavaPackage: "+valueToGoStringDescriptor(this.JavaPackage, "string")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.JavaOuterClassname != nil { | ||||||
|  | 		s = append(s, "JavaOuterClassname: "+valueToGoStringDescriptor(this.JavaOuterClassname, "string")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.JavaMultipleFiles != nil { | ||||||
|  | 		s = append(s, "JavaMultipleFiles: "+valueToGoStringDescriptor(this.JavaMultipleFiles, "bool")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.JavaGenerateEqualsAndHash != nil { | ||||||
|  | 		s = append(s, "JavaGenerateEqualsAndHash: "+valueToGoStringDescriptor(this.JavaGenerateEqualsAndHash, "bool")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.JavaStringCheckUtf8 != nil { | ||||||
|  | 		s = append(s, "JavaStringCheckUtf8: "+valueToGoStringDescriptor(this.JavaStringCheckUtf8, "bool")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.OptimizeFor != nil { | ||||||
|  | 		s = append(s, "OptimizeFor: "+valueToGoStringDescriptor(this.OptimizeFor, "descriptor.FileOptions_OptimizeMode")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.GoPackage != nil { | ||||||
|  | 		s = append(s, "GoPackage: "+valueToGoStringDescriptor(this.GoPackage, "string")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.CcGenericServices != nil { | ||||||
|  | 		s = append(s, "CcGenericServices: "+valueToGoStringDescriptor(this.CcGenericServices, "bool")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.JavaGenericServices != nil { | ||||||
|  | 		s = append(s, "JavaGenericServices: "+valueToGoStringDescriptor(this.JavaGenericServices, "bool")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.PyGenericServices != nil { | ||||||
|  | 		s = append(s, "PyGenericServices: "+valueToGoStringDescriptor(this.PyGenericServices, "bool")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.Deprecated != nil { | ||||||
|  | 		s = append(s, "Deprecated: "+valueToGoStringDescriptor(this.Deprecated, "bool")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.CcEnableArenas != nil { | ||||||
|  | 		s = append(s, "CcEnableArenas: "+valueToGoStringDescriptor(this.CcEnableArenas, "bool")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.ObjcClassPrefix != nil { | ||||||
|  | 		s = append(s, "ObjcClassPrefix: "+valueToGoStringDescriptor(this.ObjcClassPrefix, "string")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.CsharpNamespace != nil { | ||||||
|  | 		s = append(s, "CsharpNamespace: "+valueToGoStringDescriptor(this.CsharpNamespace, "string")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.JavananoUseDeprecatedPackage != nil { | ||||||
|  | 		s = append(s, "JavananoUseDeprecatedPackage: "+valueToGoStringDescriptor(this.JavananoUseDeprecatedPackage, "bool")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.UninterpretedOption != nil { | ||||||
|  | 		s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.XXX_extensions != nil { | ||||||
|  | 		s = append(s, "XXX_extensions: "+extensionToGoStringDescriptor(this.XXX_extensions)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.XXX_unrecognized != nil { | ||||||
|  | 		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") | ||||||
|  | 	} | ||||||
|  | 	s = append(s, "}") | ||||||
|  | 	return strings.Join(s, "") | ||||||
|  | } | ||||||
|  | func (this *MessageOptions) GoString() string { | ||||||
|  | 	if this == nil { | ||||||
|  | 		return "nil" | ||||||
|  | 	} | ||||||
|  | 	s := make([]string, 0, 9) | ||||||
|  | 	s = append(s, "&descriptor.MessageOptions{") | ||||||
|  | 	if this.MessageSetWireFormat != nil { | ||||||
|  | 		s = append(s, "MessageSetWireFormat: "+valueToGoStringDescriptor(this.MessageSetWireFormat, "bool")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.NoStandardDescriptorAccessor != nil { | ||||||
|  | 		s = append(s, "NoStandardDescriptorAccessor: "+valueToGoStringDescriptor(this.NoStandardDescriptorAccessor, "bool")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.Deprecated != nil { | ||||||
|  | 		s = append(s, "Deprecated: "+valueToGoStringDescriptor(this.Deprecated, "bool")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.MapEntry != nil { | ||||||
|  | 		s = append(s, "MapEntry: "+valueToGoStringDescriptor(this.MapEntry, "bool")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.UninterpretedOption != nil { | ||||||
|  | 		s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.XXX_extensions != nil { | ||||||
|  | 		s = append(s, "XXX_extensions: "+extensionToGoStringDescriptor(this.XXX_extensions)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.XXX_unrecognized != nil { | ||||||
|  | 		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") | ||||||
|  | 	} | ||||||
|  | 	s = append(s, "}") | ||||||
|  | 	return strings.Join(s, "") | ||||||
|  | } | ||||||
|  | func (this *FieldOptions) GoString() string { | ||||||
|  | 	if this == nil { | ||||||
|  | 		return "nil" | ||||||
|  | 	} | ||||||
|  | 	s := make([]string, 0, 11) | ||||||
|  | 	s = append(s, "&descriptor.FieldOptions{") | ||||||
|  | 	if this.Ctype != nil { | ||||||
|  | 		s = append(s, "Ctype: "+valueToGoStringDescriptor(this.Ctype, "descriptor.FieldOptions_CType")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.Packed != nil { | ||||||
|  | 		s = append(s, "Packed: "+valueToGoStringDescriptor(this.Packed, "bool")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.Jstype != nil { | ||||||
|  | 		s = append(s, "Jstype: "+valueToGoStringDescriptor(this.Jstype, "descriptor.FieldOptions_JSType")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.Lazy != nil { | ||||||
|  | 		s = append(s, "Lazy: "+valueToGoStringDescriptor(this.Lazy, "bool")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.Deprecated != nil { | ||||||
|  | 		s = append(s, "Deprecated: "+valueToGoStringDescriptor(this.Deprecated, "bool")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.Weak != nil { | ||||||
|  | 		s = append(s, "Weak: "+valueToGoStringDescriptor(this.Weak, "bool")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.UninterpretedOption != nil { | ||||||
|  | 		s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.XXX_extensions != nil { | ||||||
|  | 		s = append(s, "XXX_extensions: "+extensionToGoStringDescriptor(this.XXX_extensions)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.XXX_unrecognized != nil { | ||||||
|  | 		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") | ||||||
|  | 	} | ||||||
|  | 	s = append(s, "}") | ||||||
|  | 	return strings.Join(s, "") | ||||||
|  | } | ||||||
|  | func (this *EnumOptions) GoString() string { | ||||||
|  | 	if this == nil { | ||||||
|  | 		return "nil" | ||||||
|  | 	} | ||||||
|  | 	s := make([]string, 0, 7) | ||||||
|  | 	s = append(s, "&descriptor.EnumOptions{") | ||||||
|  | 	if this.AllowAlias != nil { | ||||||
|  | 		s = append(s, "AllowAlias: "+valueToGoStringDescriptor(this.AllowAlias, "bool")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.Deprecated != nil { | ||||||
|  | 		s = append(s, "Deprecated: "+valueToGoStringDescriptor(this.Deprecated, "bool")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.UninterpretedOption != nil { | ||||||
|  | 		s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.XXX_extensions != nil { | ||||||
|  | 		s = append(s, "XXX_extensions: "+extensionToGoStringDescriptor(this.XXX_extensions)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.XXX_unrecognized != nil { | ||||||
|  | 		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") | ||||||
|  | 	} | ||||||
|  | 	s = append(s, "}") | ||||||
|  | 	return strings.Join(s, "") | ||||||
|  | } | ||||||
|  | func (this *EnumValueOptions) GoString() string { | ||||||
|  | 	if this == nil { | ||||||
|  | 		return "nil" | ||||||
|  | 	} | ||||||
|  | 	s := make([]string, 0, 6) | ||||||
|  | 	s = append(s, "&descriptor.EnumValueOptions{") | ||||||
|  | 	if this.Deprecated != nil { | ||||||
|  | 		s = append(s, "Deprecated: "+valueToGoStringDescriptor(this.Deprecated, "bool")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.UninterpretedOption != nil { | ||||||
|  | 		s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.XXX_extensions != nil { | ||||||
|  | 		s = append(s, "XXX_extensions: "+extensionToGoStringDescriptor(this.XXX_extensions)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.XXX_unrecognized != nil { | ||||||
|  | 		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") | ||||||
|  | 	} | ||||||
|  | 	s = append(s, "}") | ||||||
|  | 	return strings.Join(s, "") | ||||||
|  | } | ||||||
|  | func (this *ServiceOptions) GoString() string { | ||||||
|  | 	if this == nil { | ||||||
|  | 		return "nil" | ||||||
|  | 	} | ||||||
|  | 	s := make([]string, 0, 6) | ||||||
|  | 	s = append(s, "&descriptor.ServiceOptions{") | ||||||
|  | 	if this.Deprecated != nil { | ||||||
|  | 		s = append(s, "Deprecated: "+valueToGoStringDescriptor(this.Deprecated, "bool")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.UninterpretedOption != nil { | ||||||
|  | 		s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.XXX_extensions != nil { | ||||||
|  | 		s = append(s, "XXX_extensions: "+extensionToGoStringDescriptor(this.XXX_extensions)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.XXX_unrecognized != nil { | ||||||
|  | 		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") | ||||||
|  | 	} | ||||||
|  | 	s = append(s, "}") | ||||||
|  | 	return strings.Join(s, "") | ||||||
|  | } | ||||||
|  | func (this *MethodOptions) GoString() string { | ||||||
|  | 	if this == nil { | ||||||
|  | 		return "nil" | ||||||
|  | 	} | ||||||
|  | 	s := make([]string, 0, 6) | ||||||
|  | 	s = append(s, "&descriptor.MethodOptions{") | ||||||
|  | 	if this.Deprecated != nil { | ||||||
|  | 		s = append(s, "Deprecated: "+valueToGoStringDescriptor(this.Deprecated, "bool")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.UninterpretedOption != nil { | ||||||
|  | 		s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.XXX_extensions != nil { | ||||||
|  | 		s = append(s, "XXX_extensions: "+extensionToGoStringDescriptor(this.XXX_extensions)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.XXX_unrecognized != nil { | ||||||
|  | 		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") | ||||||
|  | 	} | ||||||
|  | 	s = append(s, "}") | ||||||
|  | 	return strings.Join(s, "") | ||||||
|  | } | ||||||
|  | func (this *UninterpretedOption) GoString() string { | ||||||
|  | 	if this == nil { | ||||||
|  | 		return "nil" | ||||||
|  | 	} | ||||||
|  | 	s := make([]string, 0, 11) | ||||||
|  | 	s = append(s, "&descriptor.UninterpretedOption{") | ||||||
|  | 	if this.Name != nil { | ||||||
|  | 		s = append(s, "Name: "+fmt.Sprintf("%#v", this.Name)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.IdentifierValue != nil { | ||||||
|  | 		s = append(s, "IdentifierValue: "+valueToGoStringDescriptor(this.IdentifierValue, "string")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.PositiveIntValue != nil { | ||||||
|  | 		s = append(s, "PositiveIntValue: "+valueToGoStringDescriptor(this.PositiveIntValue, "uint64")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.NegativeIntValue != nil { | ||||||
|  | 		s = append(s, "NegativeIntValue: "+valueToGoStringDescriptor(this.NegativeIntValue, "int64")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.DoubleValue != nil { | ||||||
|  | 		s = append(s, "DoubleValue: "+valueToGoStringDescriptor(this.DoubleValue, "float64")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.StringValue != nil { | ||||||
|  | 		s = append(s, "StringValue: "+valueToGoStringDescriptor(this.StringValue, "byte")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.AggregateValue != nil { | ||||||
|  | 		s = append(s, "AggregateValue: "+valueToGoStringDescriptor(this.AggregateValue, "string")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.XXX_unrecognized != nil { | ||||||
|  | 		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") | ||||||
|  | 	} | ||||||
|  | 	s = append(s, "}") | ||||||
|  | 	return strings.Join(s, "") | ||||||
|  | } | ||||||
|  | func (this *UninterpretedOption_NamePart) GoString() string { | ||||||
|  | 	if this == nil { | ||||||
|  | 		return "nil" | ||||||
|  | 	} | ||||||
|  | 	s := make([]string, 0, 6) | ||||||
|  | 	s = append(s, "&descriptor.UninterpretedOption_NamePart{") | ||||||
|  | 	if this.NamePart != nil { | ||||||
|  | 		s = append(s, "NamePart: "+valueToGoStringDescriptor(this.NamePart, "string")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.IsExtension != nil { | ||||||
|  | 		s = append(s, "IsExtension: "+valueToGoStringDescriptor(this.IsExtension, "bool")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.XXX_unrecognized != nil { | ||||||
|  | 		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") | ||||||
|  | 	} | ||||||
|  | 	s = append(s, "}") | ||||||
|  | 	return strings.Join(s, "") | ||||||
|  | } | ||||||
|  | func (this *SourceCodeInfo) GoString() string { | ||||||
|  | 	if this == nil { | ||||||
|  | 		return "nil" | ||||||
|  | 	} | ||||||
|  | 	s := make([]string, 0, 5) | ||||||
|  | 	s = append(s, "&descriptor.SourceCodeInfo{") | ||||||
|  | 	if this.Location != nil { | ||||||
|  | 		s = append(s, "Location: "+fmt.Sprintf("%#v", this.Location)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.XXX_unrecognized != nil { | ||||||
|  | 		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") | ||||||
|  | 	} | ||||||
|  | 	s = append(s, "}") | ||||||
|  | 	return strings.Join(s, "") | ||||||
|  | } | ||||||
|  | func (this *SourceCodeInfo_Location) GoString() string { | ||||||
|  | 	if this == nil { | ||||||
|  | 		return "nil" | ||||||
|  | 	} | ||||||
|  | 	s := make([]string, 0, 9) | ||||||
|  | 	s = append(s, "&descriptor.SourceCodeInfo_Location{") | ||||||
|  | 	if this.Path != nil { | ||||||
|  | 		s = append(s, "Path: "+fmt.Sprintf("%#v", this.Path)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.Span != nil { | ||||||
|  | 		s = append(s, "Span: "+fmt.Sprintf("%#v", this.Span)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.LeadingComments != nil { | ||||||
|  | 		s = append(s, "LeadingComments: "+valueToGoStringDescriptor(this.LeadingComments, "string")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.TrailingComments != nil { | ||||||
|  | 		s = append(s, "TrailingComments: "+valueToGoStringDescriptor(this.TrailingComments, "string")+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.LeadingDetachedComments != nil { | ||||||
|  | 		s = append(s, "LeadingDetachedComments: "+fmt.Sprintf("%#v", this.LeadingDetachedComments)+",\n") | ||||||
|  | 	} | ||||||
|  | 	if this.XXX_unrecognized != nil { | ||||||
|  | 		s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") | ||||||
|  | 	} | ||||||
|  | 	s = append(s, "}") | ||||||
|  | 	return strings.Join(s, "") | ||||||
|  | } | ||||||
|  | func valueToGoStringDescriptor(v interface{}, typ string) string { | ||||||
|  | 	rv := reflect.ValueOf(v) | ||||||
|  | 	if rv.IsNil() { | ||||||
|  | 		return "nil" | ||||||
|  | 	} | ||||||
|  | 	pv := reflect.Indirect(rv).Interface() | ||||||
|  | 	return fmt.Sprintf("func(v %v) *%v { return &v } ( %#v )", typ, typ, pv) | ||||||
|  | } | ||||||
|  | func extensionToGoStringDescriptor(e map[int32]github_com_gogo_protobuf_proto.Extension) string { | ||||||
|  | 	if e == nil { | ||||||
|  | 		return "nil" | ||||||
|  | 	} | ||||||
|  | 	s := "map[int32]proto.Extension{" | ||||||
|  | 	keys := make([]int, 0, len(e)) | ||||||
|  | 	for k := range e { | ||||||
|  | 		keys = append(keys, int(k)) | ||||||
|  | 	} | ||||||
|  | 	sort.Ints(keys) | ||||||
|  | 	ss := []string{} | ||||||
|  | 	for _, k := range keys { | ||||||
|  | 		ss = append(ss, strconv.Itoa(k)+": "+e[int32(k)].GoString()) | ||||||
|  | 	} | ||||||
|  | 	s += strings.Join(ss, ",") + "}" | ||||||
|  | 	return s | ||||||
|  | } | ||||||
							
								
								
									
										342
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/helper.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										342
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/helper.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,342 @@ | |||||||
|  | // Copyright (c) 2013, Vastech SA (PTY) LTD. All rights reserved. | ||||||
|  | // http://github.com/gogo/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. | ||||||
|  | // | ||||||
|  | // 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 descriptor | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"strings" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func (msg *DescriptorProto) GetMapFields() (*FieldDescriptorProto, *FieldDescriptorProto) { | ||||||
|  | 	if !msg.GetOptions().GetMapEntry() { | ||||||
|  | 		return nil, nil | ||||||
|  | 	} | ||||||
|  | 	return msg.GetField()[0], msg.GetField()[1] | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func dotToUnderscore(r rune) rune { | ||||||
|  | 	if r == '.' { | ||||||
|  | 		return '_' | ||||||
|  | 	} | ||||||
|  | 	return r | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (field *FieldDescriptorProto) WireType() (wire int) { | ||||||
|  | 	switch *field.Type { | ||||||
|  | 	case FieldDescriptorProto_TYPE_DOUBLE: | ||||||
|  | 		return 1 | ||||||
|  | 	case FieldDescriptorProto_TYPE_FLOAT: | ||||||
|  | 		return 5 | ||||||
|  | 	case FieldDescriptorProto_TYPE_INT64: | ||||||
|  | 		return 0 | ||||||
|  | 	case FieldDescriptorProto_TYPE_UINT64: | ||||||
|  | 		return 0 | ||||||
|  | 	case FieldDescriptorProto_TYPE_INT32: | ||||||
|  | 		return 0 | ||||||
|  | 	case FieldDescriptorProto_TYPE_UINT32: | ||||||
|  | 		return 0 | ||||||
|  | 	case FieldDescriptorProto_TYPE_FIXED64: | ||||||
|  | 		return 1 | ||||||
|  | 	case FieldDescriptorProto_TYPE_FIXED32: | ||||||
|  | 		return 5 | ||||||
|  | 	case FieldDescriptorProto_TYPE_BOOL: | ||||||
|  | 		return 0 | ||||||
|  | 	case FieldDescriptorProto_TYPE_STRING: | ||||||
|  | 		return 2 | ||||||
|  | 	case FieldDescriptorProto_TYPE_GROUP: | ||||||
|  | 		return 2 | ||||||
|  | 	case FieldDescriptorProto_TYPE_MESSAGE: | ||||||
|  | 		return 2 | ||||||
|  | 	case FieldDescriptorProto_TYPE_BYTES: | ||||||
|  | 		return 2 | ||||||
|  | 	case FieldDescriptorProto_TYPE_ENUM: | ||||||
|  | 		return 0 | ||||||
|  | 	case FieldDescriptorProto_TYPE_SFIXED32: | ||||||
|  | 		return 5 | ||||||
|  | 	case FieldDescriptorProto_TYPE_SFIXED64: | ||||||
|  | 		return 1 | ||||||
|  | 	case FieldDescriptorProto_TYPE_SINT32: | ||||||
|  | 		return 0 | ||||||
|  | 	case FieldDescriptorProto_TYPE_SINT64: | ||||||
|  | 		return 0 | ||||||
|  | 	} | ||||||
|  | 	panic("unreachable") | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (field *FieldDescriptorProto) GetKeyUint64() (x uint64) { | ||||||
|  | 	packed := field.IsPacked() | ||||||
|  | 	wireType := field.WireType() | ||||||
|  | 	fieldNumber := field.GetNumber() | ||||||
|  | 	if packed { | ||||||
|  | 		wireType = 2 | ||||||
|  | 	} | ||||||
|  | 	x = uint64(uint32(fieldNumber)<<3 | uint32(wireType)) | ||||||
|  | 	return x | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (field *FieldDescriptorProto) GetKey() []byte { | ||||||
|  | 	x := field.GetKeyUint64() | ||||||
|  | 	i := 0 | ||||||
|  | 	keybuf := make([]byte, 0) | ||||||
|  | 	for i = 0; x > 127; i++ { | ||||||
|  | 		keybuf = append(keybuf, 0x80|uint8(x&0x7F)) | ||||||
|  | 		x >>= 7 | ||||||
|  | 	} | ||||||
|  | 	keybuf = append(keybuf, uint8(x)) | ||||||
|  | 	return keybuf | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (desc *FileDescriptorSet) GetField(packageName, messageName, fieldName string) *FieldDescriptorProto { | ||||||
|  | 	msg := desc.GetMessage(packageName, messageName) | ||||||
|  | 	if msg == nil { | ||||||
|  | 		return nil | ||||||
|  | 	} | ||||||
|  | 	for _, field := range msg.GetField() { | ||||||
|  | 		if field.GetName() == fieldName { | ||||||
|  | 			return field | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (file *FileDescriptorProto) GetMessage(typeName string) *DescriptorProto { | ||||||
|  | 	for _, msg := range file.GetMessageType() { | ||||||
|  | 		if msg.GetName() == typeName { | ||||||
|  | 			return msg | ||||||
|  | 		} | ||||||
|  | 		for _, nes := range msg.GetNestedType() { | ||||||
|  | 			if nes.GetName() == typeName { | ||||||
|  | 				return nes | ||||||
|  | 			} | ||||||
|  | 			if msg.GetName()+"."+nes.GetName() == typeName { | ||||||
|  | 				return nes | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (desc *FileDescriptorSet) GetMessage(packageName string, typeName string) *DescriptorProto { | ||||||
|  | 	for _, file := range desc.GetFile() { | ||||||
|  | 		if strings.Map(dotToUnderscore, file.GetPackage()) != strings.Map(dotToUnderscore, packageName) { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		for _, msg := range file.GetMessageType() { | ||||||
|  | 			if msg.GetName() == typeName { | ||||||
|  | 				return msg | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		for _, msg := range file.GetMessageType() { | ||||||
|  | 			for _, nes := range msg.GetNestedType() { | ||||||
|  | 				if nes.GetName() == typeName { | ||||||
|  | 					return nes | ||||||
|  | 				} | ||||||
|  | 				if msg.GetName()+"."+nes.GetName() == typeName { | ||||||
|  | 					return nes | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (desc *FileDescriptorSet) IsProto3(packageName string, typeName string) bool { | ||||||
|  | 	for _, file := range desc.GetFile() { | ||||||
|  | 		if strings.Map(dotToUnderscore, file.GetPackage()) != strings.Map(dotToUnderscore, packageName) { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		for _, msg := range file.GetMessageType() { | ||||||
|  | 			if msg.GetName() == typeName { | ||||||
|  | 				return file.GetSyntax() == "proto3" | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		for _, msg := range file.GetMessageType() { | ||||||
|  | 			for _, nes := range msg.GetNestedType() { | ||||||
|  | 				if nes.GetName() == typeName { | ||||||
|  | 					return file.GetSyntax() == "proto3" | ||||||
|  | 				} | ||||||
|  | 				if msg.GetName()+"."+nes.GetName() == typeName { | ||||||
|  | 					return file.GetSyntax() == "proto3" | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return false | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (msg *DescriptorProto) IsExtendable() bool { | ||||||
|  | 	return len(msg.GetExtensionRange()) > 0 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (desc *FileDescriptorSet) FindExtension(packageName string, typeName string, fieldName string) (extPackageName string, field *FieldDescriptorProto) { | ||||||
|  | 	parent := desc.GetMessage(packageName, typeName) | ||||||
|  | 	if parent == nil { | ||||||
|  | 		return "", nil | ||||||
|  | 	} | ||||||
|  | 	if !parent.IsExtendable() { | ||||||
|  | 		return "", nil | ||||||
|  | 	} | ||||||
|  | 	extendee := "." + packageName + "." + typeName | ||||||
|  | 	for _, file := range desc.GetFile() { | ||||||
|  | 		for _, ext := range file.GetExtension() { | ||||||
|  | 			if strings.Map(dotToUnderscore, file.GetPackage()) == strings.Map(dotToUnderscore, packageName) { | ||||||
|  | 				if !(ext.GetExtendee() == typeName || ext.GetExtendee() == extendee) { | ||||||
|  | 					continue | ||||||
|  | 				} | ||||||
|  | 			} else { | ||||||
|  | 				if ext.GetExtendee() != extendee { | ||||||
|  | 					continue | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			if ext.GetName() == fieldName { | ||||||
|  | 				return file.GetPackage(), ext | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return "", nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (desc *FileDescriptorSet) FindExtensionByFieldNumber(packageName string, typeName string, fieldNum int32) (extPackageName string, field *FieldDescriptorProto) { | ||||||
|  | 	parent := desc.GetMessage(packageName, typeName) | ||||||
|  | 	if parent == nil { | ||||||
|  | 		return "", nil | ||||||
|  | 	} | ||||||
|  | 	if !parent.IsExtendable() { | ||||||
|  | 		return "", nil | ||||||
|  | 	} | ||||||
|  | 	extendee := "." + packageName + "." + typeName | ||||||
|  | 	for _, file := range desc.GetFile() { | ||||||
|  | 		for _, ext := range file.GetExtension() { | ||||||
|  | 			if strings.Map(dotToUnderscore, file.GetPackage()) == strings.Map(dotToUnderscore, packageName) { | ||||||
|  | 				if !(ext.GetExtendee() == typeName || ext.GetExtendee() == extendee) { | ||||||
|  | 					continue | ||||||
|  | 				} | ||||||
|  | 			} else { | ||||||
|  | 				if ext.GetExtendee() != extendee { | ||||||
|  | 					continue | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			if ext.GetNumber() == fieldNum { | ||||||
|  | 				return file.GetPackage(), ext | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return "", nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (desc *FileDescriptorSet) FindMessage(packageName string, typeName string, fieldName string) (msgPackageName string, msgName string) { | ||||||
|  | 	parent := desc.GetMessage(packageName, typeName) | ||||||
|  | 	if parent == nil { | ||||||
|  | 		return "", "" | ||||||
|  | 	} | ||||||
|  | 	field := parent.GetFieldDescriptor(fieldName) | ||||||
|  | 	if field == nil { | ||||||
|  | 		var extPackageName string | ||||||
|  | 		extPackageName, field = desc.FindExtension(packageName, typeName, fieldName) | ||||||
|  | 		if field == nil { | ||||||
|  | 			return "", "" | ||||||
|  | 		} | ||||||
|  | 		packageName = extPackageName | ||||||
|  | 	} | ||||||
|  | 	typeNames := strings.Split(field.GetTypeName(), ".") | ||||||
|  | 	if len(typeNames) == 1 { | ||||||
|  | 		msg := desc.GetMessage(packageName, typeName) | ||||||
|  | 		if msg == nil { | ||||||
|  | 			return "", "" | ||||||
|  | 		} | ||||||
|  | 		return packageName, msg.GetName() | ||||||
|  | 	} | ||||||
|  | 	if len(typeNames) > 2 { | ||||||
|  | 		for i := 1; i < len(typeNames)-1; i++ { | ||||||
|  | 			packageName = strings.Join(typeNames[1:len(typeNames)-i], ".") | ||||||
|  | 			typeName = strings.Join(typeNames[len(typeNames)-i:], ".") | ||||||
|  | 			msg := desc.GetMessage(packageName, typeName) | ||||||
|  | 			if msg != nil { | ||||||
|  | 				typeNames := strings.Split(msg.GetName(), ".") | ||||||
|  | 				if len(typeNames) == 1 { | ||||||
|  | 					return packageName, msg.GetName() | ||||||
|  | 				} | ||||||
|  | 				return strings.Join(typeNames[1:len(typeNames)-1], "."), typeNames[len(typeNames)-1] | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return "", "" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (msg *DescriptorProto) GetFieldDescriptor(fieldName string) *FieldDescriptorProto { | ||||||
|  | 	for _, field := range msg.GetField() { | ||||||
|  | 		if field.GetName() == fieldName { | ||||||
|  | 			return field | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (desc *FileDescriptorSet) GetEnum(packageName string, typeName string) *EnumDescriptorProto { | ||||||
|  | 	for _, file := range desc.GetFile() { | ||||||
|  | 		if strings.Map(dotToUnderscore, file.GetPackage()) != strings.Map(dotToUnderscore, packageName) { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		for _, enum := range file.GetEnumType() { | ||||||
|  | 			if enum.GetName() == typeName { | ||||||
|  | 				return enum | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (f *FieldDescriptorProto) IsEnum() bool { | ||||||
|  | 	return *f.Type == FieldDescriptorProto_TYPE_ENUM | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (f *FieldDescriptorProto) IsMessage() bool { | ||||||
|  | 	return *f.Type == FieldDescriptorProto_TYPE_MESSAGE | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (f *FieldDescriptorProto) IsBytes() bool { | ||||||
|  | 	return *f.Type == FieldDescriptorProto_TYPE_BYTES | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (f *FieldDescriptorProto) IsRepeated() bool { | ||||||
|  | 	return f.Label != nil && *f.Label == FieldDescriptorProto_LABEL_REPEATED | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (f *FieldDescriptorProto) IsString() bool { | ||||||
|  | 	return *f.Type == FieldDescriptorProto_TYPE_STRING | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (f *FieldDescriptorProto) IsRequired() bool { | ||||||
|  | 	return f.Label != nil && *f.Label == FieldDescriptorProto_LABEL_REQUIRED | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (f *FieldDescriptorProto) IsPacked() bool { | ||||||
|  | 	return f.Options != nil && f.GetOptions().GetPacked() | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *DescriptorProto) HasExtension() bool { | ||||||
|  | 	return len(m.ExtensionRange) > 0 | ||||||
|  | } | ||||||
							
								
								
									
										2901
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/protoc-gen-gogo/generator/generator.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2901
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/protoc-gen-gogo/generator/generator.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										454
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/protoc-gen-gogo/generator/helper.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										454
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/protoc-gen-gogo/generator/helper.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,454 @@ | |||||||
|  | // Copyright (c) 2013, Vastech SA (PTY) LTD. All rights reserved. | ||||||
|  | // http://github.com/gogo/protobuf/gogoproto | ||||||
|  | // | ||||||
|  | // 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. | ||||||
|  | // | ||||||
|  | // 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 generator | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"bytes" | ||||||
|  | 	"go/parser" | ||||||
|  | 	"go/printer" | ||||||
|  | 	"go/token" | ||||||
|  | 	"strings" | ||||||
|  |  | ||||||
|  | 	"path" | ||||||
|  |  | ||||||
|  | 	"github.com/gogo/protobuf/gogoproto" | ||||||
|  | 	"github.com/gogo/protobuf/proto" | ||||||
|  | 	descriptor "github.com/gogo/protobuf/protoc-gen-gogo/descriptor" | ||||||
|  | 	plugin "github.com/gogo/protobuf/protoc-gen-gogo/plugin" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func (d *FileDescriptor) Messages() []*Descriptor { | ||||||
|  | 	return d.desc | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (d *FileDescriptor) Enums() []*EnumDescriptor { | ||||||
|  | 	return d.enum | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (d *Descriptor) IsGroup() bool { | ||||||
|  | 	return d.group | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (g *Generator) IsGroup(field *descriptor.FieldDescriptorProto) bool { | ||||||
|  | 	if d, ok := g.typeNameToObject[field.GetTypeName()].(*Descriptor); ok { | ||||||
|  | 		return d.IsGroup() | ||||||
|  | 	} | ||||||
|  | 	return false | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (g *Generator) TypeNameByObject(typeName string) Object { | ||||||
|  | 	o, ok := g.typeNameToObject[typeName] | ||||||
|  | 	if !ok { | ||||||
|  | 		g.Fail("can't find object with type", typeName) | ||||||
|  | 	} | ||||||
|  | 	return o | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (g *Generator) OneOfTypeName(message *Descriptor, field *descriptor.FieldDescriptorProto) string { | ||||||
|  | 	typeName := message.TypeName() | ||||||
|  | 	ccTypeName := CamelCaseSlice(typeName) | ||||||
|  | 	fieldName := g.GetOneOfFieldName(message, field) | ||||||
|  | 	tname := ccTypeName + "_" + fieldName | ||||||
|  | 	// It is possible for this to collide with a message or enum | ||||||
|  | 	// nested in this message. Check for collisions. | ||||||
|  | 	ok := true | ||||||
|  | 	for _, desc := range message.nested { | ||||||
|  | 		if strings.Join(desc.TypeName(), "_") == tname { | ||||||
|  | 			ok = false | ||||||
|  | 			break | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	for _, enum := range message.enums { | ||||||
|  | 		if strings.Join(enum.TypeName(), "_") == tname { | ||||||
|  | 			ok = false | ||||||
|  | 			break | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	if !ok { | ||||||
|  | 		tname += "_" | ||||||
|  | 	} | ||||||
|  | 	return tname | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type PluginImports interface { | ||||||
|  | 	NewImport(pkg string) Single | ||||||
|  | 	GenerateImports(file *FileDescriptor) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type pluginImports struct { | ||||||
|  | 	generator *Generator | ||||||
|  | 	singles   []Single | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func NewPluginImports(generator *Generator) *pluginImports { | ||||||
|  | 	return &pluginImports{generator, make([]Single, 0)} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (this *pluginImports) NewImport(pkg string) Single { | ||||||
|  | 	imp := newImportedPackage(this.generator.ImportPrefix, pkg) | ||||||
|  | 	this.singles = append(this.singles, imp) | ||||||
|  | 	return imp | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (this *pluginImports) GenerateImports(file *FileDescriptor) { | ||||||
|  | 	for _, s := range this.singles { | ||||||
|  | 		if s.IsUsed() { | ||||||
|  | 			this.generator.PrintImport(s.Name(), s.Location()) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type Single interface { | ||||||
|  | 	Use() string | ||||||
|  | 	IsUsed() bool | ||||||
|  | 	Name() string | ||||||
|  | 	Location() string | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type importedPackage struct { | ||||||
|  | 	used         bool | ||||||
|  | 	pkg          string | ||||||
|  | 	name         string | ||||||
|  | 	importPrefix string | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func newImportedPackage(importPrefix, pkg string) *importedPackage { | ||||||
|  | 	return &importedPackage{ | ||||||
|  | 		pkg:          pkg, | ||||||
|  | 		importPrefix: importPrefix, | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (this *importedPackage) Use() string { | ||||||
|  | 	if !this.used { | ||||||
|  | 		this.name = RegisterUniquePackageName(this.pkg, nil) | ||||||
|  | 		this.used = true | ||||||
|  | 	} | ||||||
|  | 	return this.name | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (this *importedPackage) IsUsed() bool { | ||||||
|  | 	return this.used | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (this *importedPackage) Name() string { | ||||||
|  | 	return this.name | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (this *importedPackage) Location() string { | ||||||
|  | 	return this.importPrefix + this.pkg | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (g *Generator) GetFieldName(message *Descriptor, field *descriptor.FieldDescriptorProto) string { | ||||||
|  | 	goTyp, _ := g.GoType(message, field) | ||||||
|  | 	fieldname := CamelCase(*field.Name) | ||||||
|  | 	if gogoproto.IsCustomName(field) { | ||||||
|  | 		fieldname = gogoproto.GetCustomName(field) | ||||||
|  | 	} | ||||||
|  | 	if gogoproto.IsEmbed(field) { | ||||||
|  | 		fieldname = EmbedFieldName(goTyp) | ||||||
|  | 	} | ||||||
|  | 	if field.OneofIndex != nil { | ||||||
|  | 		fieldname = message.OneofDecl[int(*field.OneofIndex)].GetName() | ||||||
|  | 		fieldname = CamelCase(fieldname) | ||||||
|  | 	} | ||||||
|  | 	for _, f := range methodNames { | ||||||
|  | 		if f == fieldname { | ||||||
|  | 			return fieldname + "_" | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return fieldname | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (g *Generator) GetOneOfFieldName(message *Descriptor, field *descriptor.FieldDescriptorProto) string { | ||||||
|  | 	goTyp, _ := g.GoType(message, field) | ||||||
|  | 	fieldname := CamelCase(*field.Name) | ||||||
|  | 	if gogoproto.IsCustomName(field) { | ||||||
|  | 		fieldname = gogoproto.GetCustomName(field) | ||||||
|  | 	} | ||||||
|  | 	if gogoproto.IsEmbed(field) { | ||||||
|  | 		fieldname = EmbedFieldName(goTyp) | ||||||
|  | 	} | ||||||
|  | 	for _, f := range methodNames { | ||||||
|  | 		if f == fieldname { | ||||||
|  | 			return fieldname + "_" | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return fieldname | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func GetMap(file *descriptor.FileDescriptorProto, field *descriptor.FieldDescriptorProto) *descriptor.DescriptorProto { | ||||||
|  | 	if !field.IsMessage() { | ||||||
|  | 		return nil | ||||||
|  | 	} | ||||||
|  | 	typeName := strings.TrimPrefix(field.GetTypeName(), "."+file.GetPackage()+".") | ||||||
|  | 	if strings.Contains(typeName, "Map") && !strings.HasSuffix(typeName, "Entry") { | ||||||
|  | 		typeName += "." + CamelCase(field.GetName()) + "Entry" | ||||||
|  | 	} | ||||||
|  | 	return file.GetMessage(typeName) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func IsMap(file *descriptor.FileDescriptorProto, field *descriptor.FieldDescriptorProto) bool { | ||||||
|  | 	msg := GetMap(file, field) | ||||||
|  | 	if msg == nil { | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | 	return msg.GetOptions().GetMapEntry() | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (g *Generator) IsMap(field *descriptor.FieldDescriptorProto) bool { | ||||||
|  | 	if !field.IsMessage() { | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | 	byName := g.ObjectNamed(field.GetTypeName()) | ||||||
|  | 	desc, ok := byName.(*Descriptor) | ||||||
|  | 	if byName == nil || !ok || !desc.GetOptions().GetMapEntry() { | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | 	return true | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (g *Generator) GetMapKeyField(field, keyField *descriptor.FieldDescriptorProto) *descriptor.FieldDescriptorProto { | ||||||
|  | 	if !gogoproto.IsCastKey(field) { | ||||||
|  | 		return keyField | ||||||
|  | 	} | ||||||
|  | 	keyField = proto.Clone(keyField).(*descriptor.FieldDescriptorProto) | ||||||
|  | 	if keyField.Options == nil { | ||||||
|  | 		keyField.Options = &descriptor.FieldOptions{} | ||||||
|  | 	} | ||||||
|  | 	keyType := gogoproto.GetCastKey(field) | ||||||
|  | 	if err := proto.SetExtension(keyField.Options, gogoproto.E_Casttype, &keyType); err != nil { | ||||||
|  | 		g.Fail(err.Error()) | ||||||
|  | 	} | ||||||
|  | 	return keyField | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (g *Generator) GetMapValueField(field, valField *descriptor.FieldDescriptorProto) *descriptor.FieldDescriptorProto { | ||||||
|  | 	if !gogoproto.IsCastValue(field) && gogoproto.IsNullable(field) { | ||||||
|  | 		return valField | ||||||
|  | 	} | ||||||
|  | 	valField = proto.Clone(valField).(*descriptor.FieldDescriptorProto) | ||||||
|  | 	if valField.Options == nil { | ||||||
|  | 		valField.Options = &descriptor.FieldOptions{} | ||||||
|  | 	} | ||||||
|  | 	if valType := gogoproto.GetCastValue(field); len(valType) > 0 { | ||||||
|  | 		if err := proto.SetExtension(valField.Options, gogoproto.E_Casttype, &valType); err != nil { | ||||||
|  | 			g.Fail(err.Error()) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	nullable := gogoproto.IsNullable(field) | ||||||
|  | 	if err := proto.SetExtension(valField.Options, gogoproto.E_Nullable, &nullable); err != nil { | ||||||
|  | 		g.Fail(err.Error()) | ||||||
|  | 	} | ||||||
|  | 	return valField | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // GoMapValueTypes returns the map value Go type and the alias map value Go type (for casting), taking into | ||||||
|  | // account whether the map is nullable or the value is a message. | ||||||
|  | func GoMapValueTypes(mapField, valueField *descriptor.FieldDescriptorProto, goValueType, goValueAliasType string) (nullable bool, outGoType string, outGoAliasType string) { | ||||||
|  | 	nullable = gogoproto.IsNullable(mapField) && valueField.IsMessage() | ||||||
|  | 	if nullable { | ||||||
|  | 		// ensure the non-aliased Go value type is a pointer for consistency | ||||||
|  | 		if strings.HasPrefix(goValueType, "*") { | ||||||
|  | 			outGoType = goValueType | ||||||
|  | 		} else { | ||||||
|  | 			outGoType = "*" + goValueType | ||||||
|  | 		} | ||||||
|  | 		outGoAliasType = goValueAliasType | ||||||
|  | 	} else { | ||||||
|  | 		outGoType = strings.Replace(goValueType, "*", "", 1) | ||||||
|  | 		outGoAliasType = strings.Replace(goValueAliasType, "*", "", 1) | ||||||
|  | 	} | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func GoTypeToName(goTyp string) string { | ||||||
|  | 	return strings.Replace(strings.Replace(goTyp, "*", "", -1), "[]", "", -1) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func EmbedFieldName(goTyp string) string { | ||||||
|  | 	goTyp = GoTypeToName(goTyp) | ||||||
|  | 	goTyps := strings.Split(goTyp, ".") | ||||||
|  | 	if len(goTyps) == 1 { | ||||||
|  | 		return goTyp | ||||||
|  | 	} | ||||||
|  | 	if len(goTyps) == 2 { | ||||||
|  | 		return goTyps[1] | ||||||
|  | 	} | ||||||
|  | 	panic("unreachable") | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (g *Generator) GeneratePlugin(p Plugin) { | ||||||
|  | 	p.Init(g) | ||||||
|  | 	// Generate the output. The generator runs for every file, even the files | ||||||
|  | 	// that we don't generate output for, so that we can collate the full list | ||||||
|  | 	// of exported symbols to support public imports. | ||||||
|  | 	genFileMap := make(map[*FileDescriptor]bool, len(g.genFiles)) | ||||||
|  | 	for _, file := range g.genFiles { | ||||||
|  | 		genFileMap[file] = true | ||||||
|  | 	} | ||||||
|  | 	i := 0 | ||||||
|  | 	for _, file := range g.allFiles { | ||||||
|  | 		g.Reset() | ||||||
|  | 		g.writeOutput = genFileMap[file] | ||||||
|  | 		g.generatePlugin(file, p) | ||||||
|  | 		if !g.writeOutput { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		g.Response.File[i] = new(plugin.CodeGeneratorResponse_File) | ||||||
|  | 		g.Response.File[i].Name = proto.String(goFileName(*file.Name)) | ||||||
|  | 		g.Response.File[i].Content = proto.String(g.String()) | ||||||
|  | 		i++ | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (g *Generator) SetFile(file *descriptor.FileDescriptorProto) { | ||||||
|  | 	g.file = g.FileOf(file) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (g *Generator) generatePlugin(file *FileDescriptor, p Plugin) { | ||||||
|  | 	g.writtenImports = make(map[string]bool) | ||||||
|  | 	g.file = g.FileOf(file.FileDescriptorProto) | ||||||
|  | 	g.usedPackages = make(map[string]bool) | ||||||
|  |  | ||||||
|  | 	// Run the plugins before the imports so we know which imports are necessary. | ||||||
|  | 	p.Generate(file) | ||||||
|  |  | ||||||
|  | 	// Generate header and imports last, though they appear first in the output. | ||||||
|  | 	rem := g.Buffer | ||||||
|  | 	g.Buffer = new(bytes.Buffer) | ||||||
|  | 	g.generateHeader() | ||||||
|  | 	p.GenerateImports(g.file) | ||||||
|  | 	g.generateImports() | ||||||
|  | 	if !g.writeOutput { | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 	g.Write(rem.Bytes()) | ||||||
|  |  | ||||||
|  | 	// Reformat generated code. | ||||||
|  | 	contents := string(g.Buffer.Bytes()) | ||||||
|  | 	fset := token.NewFileSet() | ||||||
|  | 	ast, err := parser.ParseFile(fset, "", g, parser.ParseComments) | ||||||
|  | 	if err != nil { | ||||||
|  | 		g.Fail("bad Go source code was generated:", contents, err.Error()) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 	g.Reset() | ||||||
|  | 	err = (&printer.Config{Mode: printer.TabIndent | printer.UseSpaces, Tabwidth: 8}).Fprint(g, fset, ast) | ||||||
|  | 	if err != nil { | ||||||
|  | 		g.Fail("generated Go source code could not be reformatted:", err.Error()) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func GetCustomType(field *descriptor.FieldDescriptorProto) (packageName string, typ string, err error) { | ||||||
|  | 	return getCustomType(field) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func getCustomType(field *descriptor.FieldDescriptorProto) (packageName string, typ string, err error) { | ||||||
|  | 	if field.Options != nil { | ||||||
|  | 		var v interface{} | ||||||
|  | 		v, err = proto.GetExtension(field.Options, gogoproto.E_Customtype) | ||||||
|  | 		if err == nil && v.(*string) != nil { | ||||||
|  | 			ctype := *(v.(*string)) | ||||||
|  | 			packageName, typ = splitCPackageType(ctype) | ||||||
|  | 			return packageName, typ, nil | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return "", "", err | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func splitCPackageType(ctype string) (packageName string, typ string) { | ||||||
|  | 	ss := strings.Split(ctype, ".") | ||||||
|  | 	if len(ss) == 1 { | ||||||
|  | 		return "", ctype | ||||||
|  | 	} | ||||||
|  | 	packageName = strings.Join(ss[0:len(ss)-1], ".") | ||||||
|  | 	typeName := ss[len(ss)-1] | ||||||
|  | 	importStr := strings.Map(badToUnderscore, packageName) | ||||||
|  | 	typ = importStr + "." + typeName | ||||||
|  | 	return packageName, typ | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func getCastType(field *descriptor.FieldDescriptorProto) (packageName string, typ string, err error) { | ||||||
|  | 	if field.Options != nil { | ||||||
|  | 		var v interface{} | ||||||
|  | 		v, err = proto.GetExtension(field.Options, gogoproto.E_Casttype) | ||||||
|  | 		if err == nil && v.(*string) != nil { | ||||||
|  | 			ctype := *(v.(*string)) | ||||||
|  | 			packageName, typ = splitCPackageType(ctype) | ||||||
|  | 			return packageName, typ, nil | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return "", "", err | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func getCastKey(field *descriptor.FieldDescriptorProto) (packageName string, typ string, err error) { | ||||||
|  | 	if field.Options != nil { | ||||||
|  | 		var v interface{} | ||||||
|  | 		v, err = proto.GetExtension(field.Options, gogoproto.E_Castkey) | ||||||
|  | 		if err == nil && v.(*string) != nil { | ||||||
|  | 			ctype := *(v.(*string)) | ||||||
|  | 			packageName, typ = splitCPackageType(ctype) | ||||||
|  | 			return packageName, typ, nil | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return "", "", err | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func getCastValue(field *descriptor.FieldDescriptorProto) (packageName string, typ string, err error) { | ||||||
|  | 	if field.Options != nil { | ||||||
|  | 		var v interface{} | ||||||
|  | 		v, err = proto.GetExtension(field.Options, gogoproto.E_Castvalue) | ||||||
|  | 		if err == nil && v.(*string) != nil { | ||||||
|  | 			ctype := *(v.(*string)) | ||||||
|  | 			packageName, typ = splitCPackageType(ctype) | ||||||
|  | 			return packageName, typ, nil | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return "", "", err | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func FileName(file *FileDescriptor) string { | ||||||
|  | 	fname := path.Base(file.FileDescriptorProto.GetName()) | ||||||
|  | 	fname = strings.Replace(fname, ".proto", "", -1) | ||||||
|  | 	fname = strings.Replace(fname, "-", "_", -1) | ||||||
|  | 	return CamelCase(fname) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (g *Generator) AllFiles() *descriptor.FileDescriptorSet { | ||||||
|  | 	set := &descriptor.FileDescriptorSet{} | ||||||
|  | 	set.File = make([]*descriptor.FileDescriptorProto, len(g.allFiles)) | ||||||
|  | 	for i := range g.allFiles { | ||||||
|  | 		set.File[i] = g.allFiles[i].FileDescriptorProto | ||||||
|  | 	} | ||||||
|  | 	return set | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (d *Descriptor) Path() string { | ||||||
|  | 	return d.path | ||||||
|  | } | ||||||
							
								
								
									
										37
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/protoc-gen-gogo/plugin/Makefile
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/protoc-gen-gogo/plugin/Makefile
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | |||||||
|  | # Go support for Protocol Buffers - Google's data interchange format | ||||||
|  | # | ||||||
|  | # Copyright 2010 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. | ||||||
|  |  | ||||||
|  | # Not stored here, but plugin.proto is in https://github.com/google/protobuf/ | ||||||
|  | # at src/google/protobuf/compiler/plugin.proto | ||||||
|  | # Also we need to fix an import. | ||||||
|  | regenerate: | ||||||
|  | 	protoc --gogo_out=Mgoogle/protobuf/descriptor.proto=github.com/gogo/protobuf/protoc-gen-gogo/descriptor:. -I=../../protobuf/google/protobuf/compiler/:../../protobuf/ ../../protobuf/google/protobuf/compiler/plugin.proto | ||||||
|  |  | ||||||
							
								
								
									
										194
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/protoc-gen-gogo/plugin/plugin.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										194
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/protoc-gen-gogo/plugin/plugin.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,194 @@ | |||||||
|  | // Code generated by protoc-gen-gogo. | ||||||
|  | // source: plugin.proto | ||||||
|  | // DO NOT EDIT! | ||||||
|  |  | ||||||
|  | /* | ||||||
|  | Package plugin_go is a generated protocol buffer package. | ||||||
|  |  | ||||||
|  | It is generated from these files: | ||||||
|  | 	plugin.proto | ||||||
|  |  | ||||||
|  | It has these top-level messages: | ||||||
|  | 	CodeGeneratorRequest | ||||||
|  | 	CodeGeneratorResponse | ||||||
|  | */ | ||||||
|  | package plugin_go | ||||||
|  |  | ||||||
|  | import proto "github.com/gogo/protobuf/proto" | ||||||
|  | import fmt "fmt" | ||||||
|  | import math "math" | ||||||
|  | import google_protobuf "github.com/gogo/protobuf/protoc-gen-gogo/descriptor" | ||||||
|  |  | ||||||
|  | // Reference imports to suppress errors if they are not otherwise used. | ||||||
|  | var _ = proto.Marshal | ||||||
|  | var _ = fmt.Errorf | ||||||
|  | var _ = math.Inf | ||||||
|  |  | ||||||
|  | // An encoded CodeGeneratorRequest is written to the plugin's stdin. | ||||||
|  | type CodeGeneratorRequest struct { | ||||||
|  | 	// The .proto files that were explicitly listed on the command-line.  The | ||||||
|  | 	// code generator should generate code only for these files.  Each file's | ||||||
|  | 	// descriptor will be included in proto_file, below. | ||||||
|  | 	FileToGenerate []string `protobuf:"bytes,1,rep,name=file_to_generate" json:"file_to_generate,omitempty"` | ||||||
|  | 	// The generator parameter passed on the command-line. | ||||||
|  | 	Parameter *string `protobuf:"bytes,2,opt,name=parameter" json:"parameter,omitempty"` | ||||||
|  | 	// FileDescriptorProtos for all files in files_to_generate and everything | ||||||
|  | 	// they import.  The files will appear in topological order, so each file | ||||||
|  | 	// appears before any file that imports it. | ||||||
|  | 	// | ||||||
|  | 	// protoc guarantees that all proto_files will be written after | ||||||
|  | 	// the fields above, even though this is not technically guaranteed by the | ||||||
|  | 	// protobuf wire format.  This theoretically could allow a plugin to stream | ||||||
|  | 	// in the FileDescriptorProtos and handle them one by one rather than read | ||||||
|  | 	// the entire set into memory at once.  However, as of this writing, this | ||||||
|  | 	// is not similarly optimized on protoc's end -- it will store all fields in | ||||||
|  | 	// memory at once before sending them to the plugin. | ||||||
|  | 	ProtoFile        []*google_protobuf.FileDescriptorProto `protobuf:"bytes,15,rep,name=proto_file" json:"proto_file,omitempty"` | ||||||
|  | 	XXX_unrecognized []byte                                 `json:"-"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *CodeGeneratorRequest) Reset()         { *m = CodeGeneratorRequest{} } | ||||||
|  | func (m *CodeGeneratorRequest) String() string { return proto.CompactTextString(m) } | ||||||
|  | func (*CodeGeneratorRequest) ProtoMessage()    {} | ||||||
|  |  | ||||||
|  | func (m *CodeGeneratorRequest) GetFileToGenerate() []string { | ||||||
|  | 	if m != nil { | ||||||
|  | 		return m.FileToGenerate | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *CodeGeneratorRequest) GetParameter() string { | ||||||
|  | 	if m != nil && m.Parameter != nil { | ||||||
|  | 		return *m.Parameter | ||||||
|  | 	} | ||||||
|  | 	return "" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *CodeGeneratorRequest) GetProtoFile() []*google_protobuf.FileDescriptorProto { | ||||||
|  | 	if m != nil { | ||||||
|  | 		return m.ProtoFile | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // The plugin writes an encoded CodeGeneratorResponse to stdout. | ||||||
|  | type CodeGeneratorResponse struct { | ||||||
|  | 	// Error message.  If non-empty, code generation failed.  The plugin process | ||||||
|  | 	// should exit with status code zero even if it reports an error in this way. | ||||||
|  | 	// | ||||||
|  | 	// This should be used to indicate errors in .proto files which prevent the | ||||||
|  | 	// code generator from generating correct code.  Errors which indicate a | ||||||
|  | 	// problem in protoc itself -- such as the input CodeGeneratorRequest being | ||||||
|  | 	// unparseable -- should be reported by writing a message to stderr and | ||||||
|  | 	// exiting with a non-zero status code. | ||||||
|  | 	Error            *string                       `protobuf:"bytes,1,opt,name=error" json:"error,omitempty"` | ||||||
|  | 	File             []*CodeGeneratorResponse_File `protobuf:"bytes,15,rep,name=file" json:"file,omitempty"` | ||||||
|  | 	XXX_unrecognized []byte                        `json:"-"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *CodeGeneratorResponse) Reset()         { *m = CodeGeneratorResponse{} } | ||||||
|  | func (m *CodeGeneratorResponse) String() string { return proto.CompactTextString(m) } | ||||||
|  | func (*CodeGeneratorResponse) ProtoMessage()    {} | ||||||
|  |  | ||||||
|  | func (m *CodeGeneratorResponse) GetError() string { | ||||||
|  | 	if m != nil && m.Error != nil { | ||||||
|  | 		return *m.Error | ||||||
|  | 	} | ||||||
|  | 	return "" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *CodeGeneratorResponse) GetFile() []*CodeGeneratorResponse_File { | ||||||
|  | 	if m != nil { | ||||||
|  | 		return m.File | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Represents a single generated file. | ||||||
|  | type CodeGeneratorResponse_File struct { | ||||||
|  | 	// The file name, relative to the output directory.  The name must not | ||||||
|  | 	// contain "." or ".." components and must be relative, not be absolute (so, | ||||||
|  | 	// the file cannot lie outside the output directory).  "/" must be used as | ||||||
|  | 	// the path separator, not "\". | ||||||
|  | 	// | ||||||
|  | 	// If the name is omitted, the content will be appended to the previous | ||||||
|  | 	// file.  This allows the generator to break large files into small chunks, | ||||||
|  | 	// and allows the generated text to be streamed back to protoc so that large | ||||||
|  | 	// files need not reside completely in memory at one time.  Note that as of | ||||||
|  | 	// this writing protoc does not optimize for this -- it will read the entire | ||||||
|  | 	// CodeGeneratorResponse before writing files to disk. | ||||||
|  | 	Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` | ||||||
|  | 	// If non-empty, indicates that the named file should already exist, and the | ||||||
|  | 	// content here is to be inserted into that file at a defined insertion | ||||||
|  | 	// point.  This feature allows a code generator to extend the output | ||||||
|  | 	// produced by another code generator.  The original generator may provide | ||||||
|  | 	// insertion points by placing special annotations in the file that look | ||||||
|  | 	// like: | ||||||
|  | 	//   @@protoc_insertion_point(NAME) | ||||||
|  | 	// The annotation can have arbitrary text before and after it on the line, | ||||||
|  | 	// which allows it to be placed in a comment.  NAME should be replaced with | ||||||
|  | 	// an identifier naming the point -- this is what other generators will use | ||||||
|  | 	// as the insertion_point.  Code inserted at this point will be placed | ||||||
|  | 	// immediately above the line containing the insertion point (thus multiple | ||||||
|  | 	// insertions to the same point will come out in the order they were added). | ||||||
|  | 	// The double-@ is intended to make it unlikely that the generated code | ||||||
|  | 	// could contain things that look like insertion points by accident. | ||||||
|  | 	// | ||||||
|  | 	// For example, the C++ code generator places the following line in the | ||||||
|  | 	// .pb.h files that it generates: | ||||||
|  | 	//   // @@protoc_insertion_point(namespace_scope) | ||||||
|  | 	// This line appears within the scope of the file's package namespace, but | ||||||
|  | 	// outside of any particular class.  Another plugin can then specify the | ||||||
|  | 	// insertion_point "namespace_scope" to generate additional classes or | ||||||
|  | 	// other declarations that should be placed in this scope. | ||||||
|  | 	// | ||||||
|  | 	// Note that if the line containing the insertion point begins with | ||||||
|  | 	// whitespace, the same whitespace will be added to every line of the | ||||||
|  | 	// inserted text.  This is useful for languages like Python, where | ||||||
|  | 	// indentation matters.  In these languages, the insertion point comment | ||||||
|  | 	// should be indented the same amount as any inserted code will need to be | ||||||
|  | 	// in order to work correctly in that context. | ||||||
|  | 	// | ||||||
|  | 	// The code generator that generates the initial file and the one which | ||||||
|  | 	// inserts into it must both run as part of a single invocation of protoc. | ||||||
|  | 	// Code generators are executed in the order in which they appear on the | ||||||
|  | 	// command line. | ||||||
|  | 	// | ||||||
|  | 	// If |insertion_point| is present, |name| must also be present. | ||||||
|  | 	InsertionPoint *string `protobuf:"bytes,2,opt,name=insertion_point" json:"insertion_point,omitempty"` | ||||||
|  | 	// The file contents. | ||||||
|  | 	Content          *string `protobuf:"bytes,15,opt,name=content" json:"content,omitempty"` | ||||||
|  | 	XXX_unrecognized []byte  `json:"-"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *CodeGeneratorResponse_File) Reset()         { *m = CodeGeneratorResponse_File{} } | ||||||
|  | func (m *CodeGeneratorResponse_File) String() string { return proto.CompactTextString(m) } | ||||||
|  | func (*CodeGeneratorResponse_File) ProtoMessage()    {} | ||||||
|  |  | ||||||
|  | func (m *CodeGeneratorResponse_File) GetName() string { | ||||||
|  | 	if m != nil && m.Name != nil { | ||||||
|  | 		return *m.Name | ||||||
|  | 	} | ||||||
|  | 	return "" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *CodeGeneratorResponse_File) GetInsertionPoint() string { | ||||||
|  | 	if m != nil && m.InsertionPoint != nil { | ||||||
|  | 		return *m.InsertionPoint | ||||||
|  | 	} | ||||||
|  | 	return "" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *CodeGeneratorResponse_File) GetContent() string { | ||||||
|  | 	if m != nil && m.Content != nil { | ||||||
|  | 		return *m.Content | ||||||
|  | 	} | ||||||
|  | 	return "" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func init() { | ||||||
|  | 	proto.RegisterType((*CodeGeneratorRequest)(nil), "google.protobuf.compiler.CodeGeneratorRequest") | ||||||
|  | 	proto.RegisterType((*CodeGeneratorResponse)(nil), "google.protobuf.compiler.CodeGeneratorResponse") | ||||||
|  | 	proto.RegisterType((*CodeGeneratorResponse_File)(nil), "google.protobuf.compiler.CodeGeneratorResponse.File") | ||||||
|  | } | ||||||
							
								
								
									
										99
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/sortkeys/sortkeys.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/sortkeys/sortkeys.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,99 @@ | |||||||
|  | // Copyright (c) 2013, Vastech SA (PTY) LTD. All rights reserved. | ||||||
|  | // http://github.com/gogo/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. | ||||||
|  | // | ||||||
|  | // 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 sortkeys | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"sort" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func Strings(l []string) { | ||||||
|  | 	sort.Strings(l) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func Float64s(l []float64) { | ||||||
|  | 	sort.Float64s(l) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func Float32s(l []float32) { | ||||||
|  | 	sort.Sort(Float32Slice(l)) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func Int64s(l []int64) { | ||||||
|  | 	sort.Sort(Int64Slice(l)) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func Int32s(l []int32) { | ||||||
|  | 	sort.Sort(Int32Slice(l)) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func Uint64s(l []uint64) { | ||||||
|  | 	sort.Sort(Uint64Slice(l)) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func Uint32s(l []uint32) { | ||||||
|  | 	sort.Sort(Uint32Slice(l)) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func Bools(l []bool) { | ||||||
|  | 	sort.Sort(BoolSlice(l)) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type BoolSlice []bool | ||||||
|  |  | ||||||
|  | func (p BoolSlice) Len() int           { return len(p) } | ||||||
|  | func (p BoolSlice) Less(i, j int) bool { return p[j] } | ||||||
|  | func (p BoolSlice) Swap(i, j int)      { p[i], p[j] = p[j], p[i] } | ||||||
|  |  | ||||||
|  | type Int64Slice []int64 | ||||||
|  |  | ||||||
|  | func (p Int64Slice) Len() int           { return len(p) } | ||||||
|  | func (p Int64Slice) Less(i, j int) bool { return p[i] < p[j] } | ||||||
|  | func (p Int64Slice) Swap(i, j int)      { p[i], p[j] = p[j], p[i] } | ||||||
|  |  | ||||||
|  | type Int32Slice []int32 | ||||||
|  |  | ||||||
|  | func (p Int32Slice) Len() int           { return len(p) } | ||||||
|  | func (p Int32Slice) Less(i, j int) bool { return p[i] < p[j] } | ||||||
|  | func (p Int32Slice) Swap(i, j int)      { p[i], p[j] = p[j], p[i] } | ||||||
|  |  | ||||||
|  | type Uint64Slice []uint64 | ||||||
|  |  | ||||||
|  | func (p Uint64Slice) Len() int           { return len(p) } | ||||||
|  | func (p Uint64Slice) Less(i, j int) bool { return p[i] < p[j] } | ||||||
|  | func (p Uint64Slice) Swap(i, j int)      { p[i], p[j] = p[j], p[i] } | ||||||
|  |  | ||||||
|  | type Uint32Slice []uint32 | ||||||
|  |  | ||||||
|  | func (p Uint32Slice) Len() int           { return len(p) } | ||||||
|  | func (p Uint32Slice) Less(i, j int) bool { return p[i] < p[j] } | ||||||
|  | func (p Uint32Slice) Swap(i, j int)      { p[i], p[j] = p[j], p[i] } | ||||||
|  |  | ||||||
|  | type Float32Slice []float32 | ||||||
|  |  | ||||||
|  | func (p Float32Slice) Len() int           { return len(p) } | ||||||
|  | func (p Float32Slice) Less(i, j int) bool { return p[i] < p[j] } | ||||||
|  | func (p Float32Slice) Swap(i, j int)      { p[i], p[j] = p[j], p[i] } | ||||||
							
								
								
									
										151
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/command/command.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										151
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/command/command.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,151 @@ | |||||||
|  | // Extensions for Protocol Buffers to create more go like structures. | ||||||
|  | // | ||||||
|  | // Copyright (c) 2015, Vastech SA (PTY) LTD. All rights reserved. | ||||||
|  | // http://github.com/gogo/protobuf/gogoproto | ||||||
|  | // | ||||||
|  | // 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. | ||||||
|  | // | ||||||
|  | // 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 command | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"io/ioutil" | ||||||
|  | 	"os" | ||||||
|  |  | ||||||
|  | 	"github.com/gogo/protobuf/proto" | ||||||
|  | 	"github.com/gogo/protobuf/protoc-gen-gogo/generator" | ||||||
|  | 	plugin "github.com/gogo/protobuf/protoc-gen-gogo/plugin" | ||||||
|  |  | ||||||
|  | 	_ "github.com/gogo/protobuf/plugin/grpc" | ||||||
|  |  | ||||||
|  | 	_ "github.com/gogo/protobuf/plugin/defaultcheck" | ||||||
|  | 	_ "github.com/gogo/protobuf/plugin/description" | ||||||
|  | 	_ "github.com/gogo/protobuf/plugin/embedcheck" | ||||||
|  | 	_ "github.com/gogo/protobuf/plugin/enumstringer" | ||||||
|  | 	_ "github.com/gogo/protobuf/plugin/equal" | ||||||
|  | 	_ "github.com/gogo/protobuf/plugin/face" | ||||||
|  | 	_ "github.com/gogo/protobuf/plugin/gostring" | ||||||
|  | 	_ "github.com/gogo/protobuf/plugin/marshalto" | ||||||
|  | 	_ "github.com/gogo/protobuf/plugin/oneofcheck" | ||||||
|  | 	_ "github.com/gogo/protobuf/plugin/populate" | ||||||
|  | 	_ "github.com/gogo/protobuf/plugin/size" | ||||||
|  | 	_ "github.com/gogo/protobuf/plugin/stringer" | ||||||
|  | 	_ "github.com/gogo/protobuf/plugin/union" | ||||||
|  | 	_ "github.com/gogo/protobuf/plugin/unmarshal" | ||||||
|  |  | ||||||
|  | 	"github.com/gogo/protobuf/plugin/testgen" | ||||||
|  |  | ||||||
|  | 	"go/format" | ||||||
|  | 	"strings" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func Read() *plugin.CodeGeneratorRequest { | ||||||
|  | 	g := generator.New() | ||||||
|  | 	data, err := ioutil.ReadAll(os.Stdin) | ||||||
|  | 	if err != nil { | ||||||
|  | 		g.Error(err, "reading input") | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if err := proto.Unmarshal(data, g.Request); err != nil { | ||||||
|  | 		g.Error(err, "parsing input proto") | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if len(g.Request.FileToGenerate) == 0 { | ||||||
|  | 		g.Fail("no files to generate") | ||||||
|  | 	} | ||||||
|  | 	return g.Request | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func Generate(req *plugin.CodeGeneratorRequest) *plugin.CodeGeneratorResponse { | ||||||
|  | 	// Begin by allocating a generator. The request and response structures are stored there | ||||||
|  | 	// so we can do error handling easily - the response structure contains the field to | ||||||
|  | 	// report failure. | ||||||
|  | 	g := generator.New() | ||||||
|  | 	g.Request = req | ||||||
|  |  | ||||||
|  | 	g.CommandLineParameters(g.Request.GetParameter()) | ||||||
|  |  | ||||||
|  | 	// Create a wrapped version of the Descriptors and EnumDescriptors that | ||||||
|  | 	// point to the file that defines them. | ||||||
|  | 	g.WrapTypes() | ||||||
|  |  | ||||||
|  | 	g.SetPackageNames() | ||||||
|  | 	g.BuildTypeNameMap() | ||||||
|  |  | ||||||
|  | 	g.GenerateAllFiles() | ||||||
|  |  | ||||||
|  | 	gtest := generator.New() | ||||||
|  |  | ||||||
|  | 	data, err := proto.Marshal(req) | ||||||
|  | 	if err != nil { | ||||||
|  | 		g.Error(err, "failed to marshal modified proto") | ||||||
|  | 	} | ||||||
|  | 	if err := proto.Unmarshal(data, gtest.Request); err != nil { | ||||||
|  | 		g.Error(err, "parsing modified proto") | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if len(gtest.Request.FileToGenerate) == 0 { | ||||||
|  | 		gtest.Fail("no files to generate") | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	gtest.CommandLineParameters(gtest.Request.GetParameter()) | ||||||
|  |  | ||||||
|  | 	// Create a wrapped version of the Descriptors and EnumDescriptors that | ||||||
|  | 	// point to the file that defines them. | ||||||
|  | 	gtest.WrapTypes() | ||||||
|  |  | ||||||
|  | 	gtest.SetPackageNames() | ||||||
|  | 	gtest.BuildTypeNameMap() | ||||||
|  |  | ||||||
|  | 	gtest.GeneratePlugin(testgen.NewPlugin()) | ||||||
|  |  | ||||||
|  | 	for i := 0; i < len(gtest.Response.File); i++ { | ||||||
|  | 		if strings.Contains(*gtest.Response.File[i].Content, `//These tests are generated by github.com/gogo/protobuf/plugin/testgen`) { | ||||||
|  | 			gtest.Response.File[i].Name = proto.String(strings.Replace(*gtest.Response.File[i].Name, ".pb.go", "pb_test.go", -1)) | ||||||
|  | 			g.Response.File = append(g.Response.File, gtest.Response.File[i]) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	for i := 0; i < len(g.Response.File); i++ { | ||||||
|  | 		formatted, err := format.Source([]byte(g.Response.File[i].GetContent())) | ||||||
|  | 		if err != nil { | ||||||
|  | 			g.Error(err, "go format error") | ||||||
|  | 		} | ||||||
|  | 		fmts := string(formatted) | ||||||
|  | 		g.Response.File[i].Content = &fmts | ||||||
|  | 	} | ||||||
|  | 	return g.Response | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func Write(resp *plugin.CodeGeneratorResponse) { | ||||||
|  | 	g := generator.New() | ||||||
|  | 	// Send back the results. | ||||||
|  | 	data, err := proto.Marshal(resp) | ||||||
|  | 	if err != nil { | ||||||
|  | 		g.Error(err, "failed to marshal output proto") | ||||||
|  | 	} | ||||||
|  | 	_, err = os.Stdout.Write(data) | ||||||
|  | 	if err != nil { | ||||||
|  | 		g.Error(err, "failed to write output proto") | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										78
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/enum.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/enum.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,78 @@ | |||||||
|  | // Extensions for Protocol Buffers to create more go like structures. | ||||||
|  | // | ||||||
|  | // Copyright (c) 2015, Vastech SA (PTY) LTD.  rights reserved. | ||||||
|  | // http://github.com/gogo/protobuf/gogoproto | ||||||
|  | // | ||||||
|  | // 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. | ||||||
|  | // | ||||||
|  | // 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 vanity | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"github.com/gogo/protobuf/gogoproto" | ||||||
|  | 	"github.com/gogo/protobuf/proto" | ||||||
|  | 	descriptor "github.com/gogo/protobuf/protoc-gen-gogo/descriptor" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func EnumHasBoolExtension(enum *descriptor.EnumDescriptorProto, extension *proto.ExtensionDesc) bool { | ||||||
|  | 	if enum.Options == nil { | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | 	value, err := proto.GetExtension(enum.Options, extension) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | 	if value == nil { | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | 	if value.(*bool) == nil { | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | 	return true | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func SetBoolEnumOption(extension *proto.ExtensionDesc, value bool) func(enum *descriptor.EnumDescriptorProto) { | ||||||
|  | 	return func(enum *descriptor.EnumDescriptorProto) { | ||||||
|  | 		if EnumHasBoolExtension(enum, extension) { | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  | 		if enum.Options == nil { | ||||||
|  | 			enum.Options = &descriptor.EnumOptions{} | ||||||
|  | 		} | ||||||
|  | 		if err := proto.SetExtension(enum.Options, extension, &value); err != nil { | ||||||
|  | 			panic(err) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOffGoEnumPrefix(enum *descriptor.EnumDescriptorProto) { | ||||||
|  | 	SetBoolEnumOption(gogoproto.E_GoprotoEnumPrefix, false)(enum) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOffGoEnumStringer(enum *descriptor.EnumDescriptorProto) { | ||||||
|  | 	SetBoolEnumOption(gogoproto.E_GoprotoEnumStringer, false)(enum) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOnEnumStringer(enum *descriptor.EnumDescriptorProto) { | ||||||
|  | 	SetBoolEnumOption(gogoproto.E_EnumStringer, true)(enum) | ||||||
|  | } | ||||||
							
								
								
									
										83
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/field.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/field.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,83 @@ | |||||||
|  | // Extensions for Protocol Buffers to create more go like structures. | ||||||
|  | // | ||||||
|  | // Copyright (c) 2015, Vastech SA (PTY) LTD.  rights reserved. | ||||||
|  | // http://github.com/gogo/protobuf/gogoproto | ||||||
|  | // | ||||||
|  | // 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. | ||||||
|  | // | ||||||
|  | // 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 vanity | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"github.com/gogo/protobuf/gogoproto" | ||||||
|  | 	"github.com/gogo/protobuf/proto" | ||||||
|  | 	descriptor "github.com/gogo/protobuf/protoc-gen-gogo/descriptor" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func FieldHasBoolExtension(field *descriptor.FieldDescriptorProto, extension *proto.ExtensionDesc) bool { | ||||||
|  | 	if field.Options == nil { | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | 	value, err := proto.GetExtension(field.Options, extension) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | 	if value == nil { | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | 	if value.(*bool) == nil { | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | 	return true | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func SetBoolFieldOption(extension *proto.ExtensionDesc, value bool) func(field *descriptor.FieldDescriptorProto) { | ||||||
|  | 	return func(field *descriptor.FieldDescriptorProto) { | ||||||
|  | 		if FieldHasBoolExtension(field, extension) { | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  | 		if field.Options == nil { | ||||||
|  | 			field.Options = &descriptor.FieldOptions{} | ||||||
|  | 		} | ||||||
|  | 		if err := proto.SetExtension(field.Options, extension, &value); err != nil { | ||||||
|  | 			panic(err) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOffNullable(field *descriptor.FieldDescriptorProto) { | ||||||
|  | 	if field.IsRepeated() && !field.IsMessage() { | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 	SetBoolFieldOption(gogoproto.E_Nullable, false)(field) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOffNullableForNativeTypesWithoutDefaultsOnly(field *descriptor.FieldDescriptorProto) { | ||||||
|  | 	if field.IsRepeated() || field.IsMessage() { | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 	if field.DefaultValue != nil { | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 	SetBoolFieldOption(gogoproto.E_Nullable, false)(field) | ||||||
|  | } | ||||||
							
								
								
									
										170
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/file.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										170
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/file.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,170 @@ | |||||||
|  | // Extensions for Protocol Buffers to create more go like structures. | ||||||
|  | // | ||||||
|  | // Copyright (c) 2015, Vastech SA (PTY) LTD. All rights reserved. | ||||||
|  | // http://github.com/gogo/protobuf/gogoproto | ||||||
|  | // | ||||||
|  | // 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. | ||||||
|  | // | ||||||
|  | // 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 vanity | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"github.com/gogo/protobuf/gogoproto" | ||||||
|  | 	"github.com/gogo/protobuf/proto" | ||||||
|  | 	descriptor "github.com/gogo/protobuf/protoc-gen-gogo/descriptor" | ||||||
|  | 	"strings" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func NotInPackageGoogleProtobuf(file *descriptor.FileDescriptorProto) bool { | ||||||
|  | 	return !strings.HasPrefix(file.GetPackage(), "google.protobuf") | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func FilterFiles(files []*descriptor.FileDescriptorProto, f func(file *descriptor.FileDescriptorProto) bool) []*descriptor.FileDescriptorProto { | ||||||
|  | 	filtered := make([]*descriptor.FileDescriptorProto, 0, len(files)) | ||||||
|  | 	for i := range files { | ||||||
|  | 		if !f(files[i]) { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		filtered = append(filtered, files[i]) | ||||||
|  | 	} | ||||||
|  | 	return filtered | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func FileHasBoolExtension(file *descriptor.FileDescriptorProto, extension *proto.ExtensionDesc) bool { | ||||||
|  | 	if file.Options == nil { | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | 	value, err := proto.GetExtension(file.Options, extension) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | 	if value == nil { | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | 	if value.(*bool) == nil { | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | 	return true | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func SetBoolFileOption(extension *proto.ExtensionDesc, value bool) func(file *descriptor.FileDescriptorProto) { | ||||||
|  | 	return func(file *descriptor.FileDescriptorProto) { | ||||||
|  | 		if FileHasBoolExtension(file, extension) { | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  | 		if file.Options == nil { | ||||||
|  | 			file.Options = &descriptor.FileOptions{} | ||||||
|  | 		} | ||||||
|  | 		if err := proto.SetExtension(file.Options, extension, &value); err != nil { | ||||||
|  | 			panic(err) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOffGoGettersAll(file *descriptor.FileDescriptorProto) { | ||||||
|  | 	SetBoolFileOption(gogoproto.E_GoprotoGettersAll, false)(file) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOffGoEnumPrefixAll(file *descriptor.FileDescriptorProto) { | ||||||
|  | 	SetBoolFileOption(gogoproto.E_GoprotoEnumPrefixAll, false)(file) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOffGoStringerAll(file *descriptor.FileDescriptorProto) { | ||||||
|  | 	SetBoolFileOption(gogoproto.E_GoprotoStringerAll, false)(file) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOnVerboseEqualAll(file *descriptor.FileDescriptorProto) { | ||||||
|  | 	SetBoolFileOption(gogoproto.E_VerboseEqualAll, true)(file) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOnFaceAll(file *descriptor.FileDescriptorProto) { | ||||||
|  | 	SetBoolFileOption(gogoproto.E_FaceAll, true)(file) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOnGoStringAll(file *descriptor.FileDescriptorProto) { | ||||||
|  | 	SetBoolFileOption(gogoproto.E_GostringAll, true)(file) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOnPopulateAll(file *descriptor.FileDescriptorProto) { | ||||||
|  | 	SetBoolFileOption(gogoproto.E_PopulateAll, true)(file) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOnStringerAll(file *descriptor.FileDescriptorProto) { | ||||||
|  | 	SetBoolFileOption(gogoproto.E_StringerAll, true)(file) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOnEqualAll(file *descriptor.FileDescriptorProto) { | ||||||
|  | 	SetBoolFileOption(gogoproto.E_EqualAll, true)(file) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOnDescriptionAll(file *descriptor.FileDescriptorProto) { | ||||||
|  | 	SetBoolFileOption(gogoproto.E_DescriptionAll, true)(file) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOnTestGenAll(file *descriptor.FileDescriptorProto) { | ||||||
|  | 	SetBoolFileOption(gogoproto.E_TestgenAll, true)(file) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOnBenchGenAll(file *descriptor.FileDescriptorProto) { | ||||||
|  | 	SetBoolFileOption(gogoproto.E_BenchgenAll, true)(file) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOnMarshalerAll(file *descriptor.FileDescriptorProto) { | ||||||
|  | 	SetBoolFileOption(gogoproto.E_MarshalerAll, true)(file) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOnUnmarshalerAll(file *descriptor.FileDescriptorProto) { | ||||||
|  | 	SetBoolFileOption(gogoproto.E_UnmarshalerAll, true)(file) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOnSizerAll(file *descriptor.FileDescriptorProto) { | ||||||
|  | 	SetBoolFileOption(gogoproto.E_SizerAll, true)(file) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOffGoEnumStringerAll(file *descriptor.FileDescriptorProto) { | ||||||
|  | 	SetBoolFileOption(gogoproto.E_GoprotoEnumStringerAll, false)(file) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOnEnumStringerAll(file *descriptor.FileDescriptorProto) { | ||||||
|  | 	SetBoolFileOption(gogoproto.E_EnumStringerAll, true)(file) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOnUnsafeUnmarshalerAll(file *descriptor.FileDescriptorProto) { | ||||||
|  | 	SetBoolFileOption(gogoproto.E_UnsafeUnmarshalerAll, true)(file) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOnUnsafeMarshalerAll(file *descriptor.FileDescriptorProto) { | ||||||
|  | 	SetBoolFileOption(gogoproto.E_UnsafeMarshalerAll, true)(file) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOffGoExtensionsMapAll(file *descriptor.FileDescriptorProto) { | ||||||
|  | 	SetBoolFileOption(gogoproto.E_GoprotoExtensionsMapAll, false)(file) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOffGoUnrecognizedAll(file *descriptor.FileDescriptorProto) { | ||||||
|  | 	SetBoolFileOption(gogoproto.E_GoprotoUnrecognizedAll, false)(file) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOffGogoImport(file *descriptor.FileDescriptorProto) { | ||||||
|  | 	SetBoolFileOption(gogoproto.E_GogoprotoImport, false)(file) | ||||||
|  | } | ||||||
							
								
								
									
										125
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/foreach.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										125
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/foreach.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,125 @@ | |||||||
|  | // Extensions for Protocol Buffers to create more go like structures. | ||||||
|  | // | ||||||
|  | // Copyright (c) 2015, Vastech SA (PTY) LTD. All rights reserved. | ||||||
|  | // http://github.com/gogo/protobuf/gogoproto | ||||||
|  | // | ||||||
|  | // 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. | ||||||
|  | // | ||||||
|  | // 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 vanity | ||||||
|  |  | ||||||
|  | import descriptor "github.com/gogo/protobuf/protoc-gen-gogo/descriptor" | ||||||
|  |  | ||||||
|  | func ForEachFile(files []*descriptor.FileDescriptorProto, f func(file *descriptor.FileDescriptorProto)) { | ||||||
|  | 	for _, file := range files { | ||||||
|  | 		f(file) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func OnlyProto2(files []*descriptor.FileDescriptorProto) []*descriptor.FileDescriptorProto { | ||||||
|  | 	outs := make([]*descriptor.FileDescriptorProto, 0, len(files)) | ||||||
|  | 	for i, file := range files { | ||||||
|  | 		if file.GetSyntax() == "proto3" { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		outs = append(outs, files[i]) | ||||||
|  | 	} | ||||||
|  | 	return outs | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func OnlyProto3(files []*descriptor.FileDescriptorProto) []*descriptor.FileDescriptorProto { | ||||||
|  | 	outs := make([]*descriptor.FileDescriptorProto, 0, len(files)) | ||||||
|  | 	for i, file := range files { | ||||||
|  | 		if file.GetSyntax() != "proto3" { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		outs = append(outs, files[i]) | ||||||
|  | 	} | ||||||
|  | 	return outs | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func ForEachMessageInFiles(files []*descriptor.FileDescriptorProto, f func(msg *descriptor.DescriptorProto)) { | ||||||
|  | 	for _, file := range files { | ||||||
|  | 		ForEachMessage(file.MessageType, f) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func ForEachMessage(msgs []*descriptor.DescriptorProto, f func(msg *descriptor.DescriptorProto)) { | ||||||
|  | 	for _, msg := range msgs { | ||||||
|  | 		f(msg) | ||||||
|  | 		ForEachMessage(msg.NestedType, f) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func ForEachFieldInFilesExcludingExtensions(files []*descriptor.FileDescriptorProto, f func(field *descriptor.FieldDescriptorProto)) { | ||||||
|  | 	for _, file := range files { | ||||||
|  | 		ForEachFieldExcludingExtensions(file.MessageType, f) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func ForEachFieldInFiles(files []*descriptor.FileDescriptorProto, f func(field *descriptor.FieldDescriptorProto)) { | ||||||
|  | 	for _, file := range files { | ||||||
|  | 		for _, ext := range file.Extension { | ||||||
|  | 			f(ext) | ||||||
|  | 		} | ||||||
|  | 		ForEachField(file.MessageType, f) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func ForEachFieldExcludingExtensions(msgs []*descriptor.DescriptorProto, f func(field *descriptor.FieldDescriptorProto)) { | ||||||
|  | 	for _, msg := range msgs { | ||||||
|  | 		for _, field := range msg.Field { | ||||||
|  | 			f(field) | ||||||
|  | 		} | ||||||
|  | 		ForEachField(msg.NestedType, f) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func ForEachField(msgs []*descriptor.DescriptorProto, f func(field *descriptor.FieldDescriptorProto)) { | ||||||
|  | 	for _, msg := range msgs { | ||||||
|  | 		for _, field := range msg.Field { | ||||||
|  | 			f(field) | ||||||
|  | 		} | ||||||
|  | 		for _, ext := range msg.Extension { | ||||||
|  | 			f(ext) | ||||||
|  | 		} | ||||||
|  | 		ForEachField(msg.NestedType, f) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func ForEachEnumInFiles(files []*descriptor.FileDescriptorProto, f func(enum *descriptor.EnumDescriptorProto)) { | ||||||
|  | 	for _, file := range files { | ||||||
|  | 		for _, enum := range file.EnumType { | ||||||
|  | 			f(enum) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func ForEachEnum(msgs []*descriptor.DescriptorProto, f func(field *descriptor.EnumDescriptorProto)) { | ||||||
|  | 	for _, msg := range msgs { | ||||||
|  | 		for _, field := range msg.EnumType { | ||||||
|  | 			f(field) | ||||||
|  | 		} | ||||||
|  | 		ForEachEnum(msg.NestedType, f) | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										138
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/msg.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										138
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/msg.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,138 @@ | |||||||
|  | // Extensions for Protocol Buffers to create more go like structures. | ||||||
|  | // | ||||||
|  | // Copyright (c) 2015, Vastech SA (PTY) LTD.  rights reserved. | ||||||
|  | // http://github.com/gogo/protobuf/gogoproto | ||||||
|  | // | ||||||
|  | // 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. | ||||||
|  | // | ||||||
|  | // 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 vanity | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"github.com/gogo/protobuf/gogoproto" | ||||||
|  | 	"github.com/gogo/protobuf/proto" | ||||||
|  | 	descriptor "github.com/gogo/protobuf/protoc-gen-gogo/descriptor" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func MessageHasBoolExtension(msg *descriptor.DescriptorProto, extension *proto.ExtensionDesc) bool { | ||||||
|  | 	if msg.Options == nil { | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | 	value, err := proto.GetExtension(msg.Options, extension) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | 	if value == nil { | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | 	if value.(*bool) == nil { | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | 	return true | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func SetBoolMessageOption(extension *proto.ExtensionDesc, value bool) func(msg *descriptor.DescriptorProto) { | ||||||
|  | 	return func(msg *descriptor.DescriptorProto) { | ||||||
|  | 		if MessageHasBoolExtension(msg, extension) { | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  | 		if msg.Options == nil { | ||||||
|  | 			msg.Options = &descriptor.MessageOptions{} | ||||||
|  | 		} | ||||||
|  | 		if err := proto.SetExtension(msg.Options, extension, &value); err != nil { | ||||||
|  | 			panic(err) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOffGoGetters(msg *descriptor.DescriptorProto) { | ||||||
|  | 	SetBoolMessageOption(gogoproto.E_GoprotoGetters, false)(msg) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOffGoStringer(msg *descriptor.DescriptorProto) { | ||||||
|  | 	SetBoolMessageOption(gogoproto.E_GoprotoStringer, false)(msg) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOnVerboseEqual(msg *descriptor.DescriptorProto) { | ||||||
|  | 	SetBoolMessageOption(gogoproto.E_VerboseEqual, true)(msg) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOnFace(msg *descriptor.DescriptorProto) { | ||||||
|  | 	SetBoolMessageOption(gogoproto.E_Face, true)(msg) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOnGoString(msg *descriptor.DescriptorProto) { | ||||||
|  | 	SetBoolMessageOption(gogoproto.E_Face, true)(msg) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOnPopulate(msg *descriptor.DescriptorProto) { | ||||||
|  | 	SetBoolMessageOption(gogoproto.E_Populate, true)(msg) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOnStringer(msg *descriptor.DescriptorProto) { | ||||||
|  | 	SetBoolMessageOption(gogoproto.E_Stringer, true)(msg) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOnEqual(msg *descriptor.DescriptorProto) { | ||||||
|  | 	SetBoolMessageOption(gogoproto.E_Equal, true)(msg) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOnDescription(msg *descriptor.DescriptorProto) { | ||||||
|  | 	SetBoolMessageOption(gogoproto.E_Description, true)(msg) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOnTestGen(msg *descriptor.DescriptorProto) { | ||||||
|  | 	SetBoolMessageOption(gogoproto.E_Testgen, true)(msg) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOnBenchGen(msg *descriptor.DescriptorProto) { | ||||||
|  | 	SetBoolMessageOption(gogoproto.E_Benchgen, true)(msg) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOnMarshaler(msg *descriptor.DescriptorProto) { | ||||||
|  | 	SetBoolMessageOption(gogoproto.E_Marshaler, true)(msg) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOnUnmarshaler(msg *descriptor.DescriptorProto) { | ||||||
|  | 	SetBoolMessageOption(gogoproto.E_Unmarshaler, true)(msg) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOnSizer(msg *descriptor.DescriptorProto) { | ||||||
|  | 	SetBoolMessageOption(gogoproto.E_Sizer, true)(msg) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOnUnsafeUnmarshaler(msg *descriptor.DescriptorProto) { | ||||||
|  | 	SetBoolMessageOption(gogoproto.E_UnsafeUnmarshaler, true)(msg) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOnUnsafeMarshaler(msg *descriptor.DescriptorProto) { | ||||||
|  | 	SetBoolMessageOption(gogoproto.E_UnsafeMarshaler, true)(msg) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOffGoExtensionsMap(msg *descriptor.DescriptorProto) { | ||||||
|  | 	SetBoolMessageOption(gogoproto.E_GoprotoExtensionsMap, false)(msg) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TurnOffGoUnrecognized(msg *descriptor.DescriptorProto) { | ||||||
|  | 	SetBoolMessageOption(gogoproto.E_GoprotoUnrecognized, false)(msg) | ||||||
|  | } | ||||||
							
								
								
									
										18
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/test/Makefile
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/test/Makefile
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | |||||||
|  | regenerate: | ||||||
|  | 	go install github.com/gogo/protobuf/protoc-gen-gogofast | ||||||
|  | 	protoc --gogofast_out=./fast/ vanity.proto | ||||||
|  | 	protoc --proto_path=../../:../../../../../:../../protobuf/:. --gogofast_out=./fast/ gogovanity.proto | ||||||
|  | 	protoc-min-version -version="3.0.0" --proto_path=../../:../../../../../:../../protobuf/:. --gogofast_out=./fast/ proto3.proto | ||||||
|  | 	go install github.com/gogo/protobuf/protoc-gen-gogofaster | ||||||
|  | 	protoc --gogofaster_out=./faster/ vanity.proto | ||||||
|  | 	protoc --proto_path=../../:../../../../../:../../protobuf/:. --gogofaster_out=./faster/ gogovanity.proto | ||||||
|  | 	protoc-min-version -version="3.0.0" --proto_path=../../:../../../../../:../../protobuf/:. --gogofaster_out=./faster/ proto3.proto | ||||||
|  | 	go install github.com/gogo/protobuf/protoc-gen-gogoslick | ||||||
|  | 	protoc --gogoslick_out=./slick/ vanity.proto | ||||||
|  | 	protoc --proto_path=../../:../../../../../:../../protobuf/:. --gogoslick_out=./slick/ gogovanity.proto | ||||||
|  | 	protoc-min-version -version="3.0.0" --proto_path=../../:../../../../../:../../protobuf/:. --gogoslick_out=./slick/ proto3.proto | ||||||
|  |  | ||||||
|  | test: | ||||||
|  | 	go install github.com/gogo/protobuf/protoc-gen-gofast | ||||||
|  | 	protoc --gofast_out=./gofast/ vanity.proto | ||||||
|  | 	go test ./... | ||||||
							
								
								
									
										1
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/test/doc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/test/doc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | |||||||
|  | package test | ||||||
							
								
								
									
										385
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/test/fast/gogovanity.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										385
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/test/fast/gogovanity.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,385 @@ | |||||||
|  | // Code generated by protoc-gen-gogo. | ||||||
|  | // source: gogovanity.proto | ||||||
|  | // DO NOT EDIT! | ||||||
|  |  | ||||||
|  | /* | ||||||
|  | 	Package vanity is a generated protocol buffer package. | ||||||
|  |  | ||||||
|  | 	It is generated from these files: | ||||||
|  | 		gogovanity.proto | ||||||
|  |  | ||||||
|  | 	It has these top-level messages: | ||||||
|  | 		B | ||||||
|  | */ | ||||||
|  | package vanity | ||||||
|  |  | ||||||
|  | import proto "github.com/gogo/protobuf/proto" | ||||||
|  | import fmt "fmt" | ||||||
|  | import math "math" | ||||||
|  | import _ "github.com/gogo/protobuf/gogoproto" | ||||||
|  |  | ||||||
|  | import io "io" | ||||||
|  |  | ||||||
|  | // Reference imports to suppress errors if they are not otherwise used. | ||||||
|  | var _ = proto.Marshal | ||||||
|  | var _ = fmt.Errorf | ||||||
|  | var _ = math.Inf | ||||||
|  |  | ||||||
|  | type B struct { | ||||||
|  | 	String_          *string `protobuf:"bytes,1,opt,name=String" json:"String,omitempty"` | ||||||
|  | 	Int64            *int64  `protobuf:"varint,2,opt,name=Int64" json:"Int64,omitempty"` | ||||||
|  | 	Int32            *int32  `protobuf:"varint,3,opt,name=Int32,def=1234" json:"Int32,omitempty"` | ||||||
|  | 	XXX_unrecognized []byte  `json:"-"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *B) Reset()         { *m = B{} } | ||||||
|  | func (m *B) String() string { return proto.CompactTextString(m) } | ||||||
|  | func (*B) ProtoMessage()    {} | ||||||
|  |  | ||||||
|  | const Default_B_Int32 int32 = 1234 | ||||||
|  |  | ||||||
|  | func (m *B) GetString_() string { | ||||||
|  | 	if m != nil && m.String_ != nil { | ||||||
|  | 		return *m.String_ | ||||||
|  | 	} | ||||||
|  | 	return "" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *B) GetInt64() int64 { | ||||||
|  | 	if m != nil && m.Int64 != nil { | ||||||
|  | 		return *m.Int64 | ||||||
|  | 	} | ||||||
|  | 	return 0 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *B) GetInt32() int32 { | ||||||
|  | 	if m != nil && m.Int32 != nil { | ||||||
|  | 		return *m.Int32 | ||||||
|  | 	} | ||||||
|  | 	return Default_B_Int32 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func init() { | ||||||
|  | 	proto.RegisterType((*B)(nil), "vanity.B") | ||||||
|  | } | ||||||
|  | func (m *B) Marshal() (data []byte, err error) { | ||||||
|  | 	size := m.Size() | ||||||
|  | 	data = make([]byte, size) | ||||||
|  | 	n, err := m.MarshalTo(data) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	return data[:n], nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *B) MarshalTo(data []byte) (int, error) { | ||||||
|  | 	var i int | ||||||
|  | 	_ = i | ||||||
|  | 	var l int | ||||||
|  | 	_ = l | ||||||
|  | 	if m.String_ != nil { | ||||||
|  | 		data[i] = 0xa | ||||||
|  | 		i++ | ||||||
|  | 		i = encodeVarintGogovanity(data, i, uint64(len(*m.String_))) | ||||||
|  | 		i += copy(data[i:], *m.String_) | ||||||
|  | 	} | ||||||
|  | 	if m.Int64 != nil { | ||||||
|  | 		data[i] = 0x10 | ||||||
|  | 		i++ | ||||||
|  | 		i = encodeVarintGogovanity(data, i, uint64(*m.Int64)) | ||||||
|  | 	} | ||||||
|  | 	if m.Int32 != nil { | ||||||
|  | 		data[i] = 0x18 | ||||||
|  | 		i++ | ||||||
|  | 		i = encodeVarintGogovanity(data, i, uint64(*m.Int32)) | ||||||
|  | 	} | ||||||
|  | 	if m.XXX_unrecognized != nil { | ||||||
|  | 		i += copy(data[i:], m.XXX_unrecognized) | ||||||
|  | 	} | ||||||
|  | 	return i, nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func encodeFixed64Gogovanity(data []byte, offset int, v uint64) int { | ||||||
|  | 	data[offset] = uint8(v) | ||||||
|  | 	data[offset+1] = uint8(v >> 8) | ||||||
|  | 	data[offset+2] = uint8(v >> 16) | ||||||
|  | 	data[offset+3] = uint8(v >> 24) | ||||||
|  | 	data[offset+4] = uint8(v >> 32) | ||||||
|  | 	data[offset+5] = uint8(v >> 40) | ||||||
|  | 	data[offset+6] = uint8(v >> 48) | ||||||
|  | 	data[offset+7] = uint8(v >> 56) | ||||||
|  | 	return offset + 8 | ||||||
|  | } | ||||||
|  | func encodeFixed32Gogovanity(data []byte, offset int, v uint32) int { | ||||||
|  | 	data[offset] = uint8(v) | ||||||
|  | 	data[offset+1] = uint8(v >> 8) | ||||||
|  | 	data[offset+2] = uint8(v >> 16) | ||||||
|  | 	data[offset+3] = uint8(v >> 24) | ||||||
|  | 	return offset + 4 | ||||||
|  | } | ||||||
|  | func encodeVarintGogovanity(data []byte, offset int, v uint64) int { | ||||||
|  | 	for v >= 1<<7 { | ||||||
|  | 		data[offset] = uint8(v&0x7f | 0x80) | ||||||
|  | 		v >>= 7 | ||||||
|  | 		offset++ | ||||||
|  | 	} | ||||||
|  | 	data[offset] = uint8(v) | ||||||
|  | 	return offset + 1 | ||||||
|  | } | ||||||
|  | func (m *B) Size() (n int) { | ||||||
|  | 	var l int | ||||||
|  | 	_ = l | ||||||
|  | 	if m.String_ != nil { | ||||||
|  | 		l = len(*m.String_) | ||||||
|  | 		n += 1 + l + sovGogovanity(uint64(l)) | ||||||
|  | 	} | ||||||
|  | 	if m.Int64 != nil { | ||||||
|  | 		n += 1 + sovGogovanity(uint64(*m.Int64)) | ||||||
|  | 	} | ||||||
|  | 	if m.Int32 != nil { | ||||||
|  | 		n += 1 + sovGogovanity(uint64(*m.Int32)) | ||||||
|  | 	} | ||||||
|  | 	if m.XXX_unrecognized != nil { | ||||||
|  | 		n += len(m.XXX_unrecognized) | ||||||
|  | 	} | ||||||
|  | 	return n | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func sovGogovanity(x uint64) (n int) { | ||||||
|  | 	for { | ||||||
|  | 		n++ | ||||||
|  | 		x >>= 7 | ||||||
|  | 		if x == 0 { | ||||||
|  | 			break | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return n | ||||||
|  | } | ||||||
|  | func sozGogovanity(x uint64) (n int) { | ||||||
|  | 	return sovGogovanity(uint64((x << 1) ^ uint64((int64(x) >> 63)))) | ||||||
|  | } | ||||||
|  | func (m *B) Unmarshal(data []byte) error { | ||||||
|  | 	l := len(data) | ||||||
|  | 	iNdEx := 0 | ||||||
|  | 	for iNdEx < l { | ||||||
|  | 		preIndex := iNdEx | ||||||
|  | 		var wire uint64 | ||||||
|  | 		for shift := uint(0); ; shift += 7 { | ||||||
|  | 			if shift >= 64 { | ||||||
|  | 				return ErrIntOverflowGogovanity | ||||||
|  | 			} | ||||||
|  | 			if iNdEx >= l { | ||||||
|  | 				return io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			b := data[iNdEx] | ||||||
|  | 			iNdEx++ | ||||||
|  | 			wire |= (uint64(b) & 0x7F) << shift | ||||||
|  | 			if b < 0x80 { | ||||||
|  | 				break | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		fieldNum := int32(wire >> 3) | ||||||
|  | 		wireType := int(wire & 0x7) | ||||||
|  | 		if wireType == 4 { | ||||||
|  | 			return fmt.Errorf("proto: B: wiretype end group for non-group") | ||||||
|  | 		} | ||||||
|  | 		if fieldNum <= 0 { | ||||||
|  | 			return fmt.Errorf("proto: B: illegal tag %d (wire type %d)", fieldNum, wire) | ||||||
|  | 		} | ||||||
|  | 		switch fieldNum { | ||||||
|  | 		case 1: | ||||||
|  | 			if wireType != 2 { | ||||||
|  | 				return fmt.Errorf("proto: wrong wireType = %d for field String_", wireType) | ||||||
|  | 			} | ||||||
|  | 			var stringLen uint64 | ||||||
|  | 			for shift := uint(0); ; shift += 7 { | ||||||
|  | 				if shift >= 64 { | ||||||
|  | 					return ErrIntOverflowGogovanity | ||||||
|  | 				} | ||||||
|  | 				if iNdEx >= l { | ||||||
|  | 					return io.ErrUnexpectedEOF | ||||||
|  | 				} | ||||||
|  | 				b := data[iNdEx] | ||||||
|  | 				iNdEx++ | ||||||
|  | 				stringLen |= (uint64(b) & 0x7F) << shift | ||||||
|  | 				if b < 0x80 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			intStringLen := int(stringLen) | ||||||
|  | 			if intStringLen < 0 { | ||||||
|  | 				return ErrInvalidLengthGogovanity | ||||||
|  | 			} | ||||||
|  | 			postIndex := iNdEx + intStringLen | ||||||
|  | 			if postIndex > l { | ||||||
|  | 				return io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			s := string(data[iNdEx:postIndex]) | ||||||
|  | 			m.String_ = &s | ||||||
|  | 			iNdEx = postIndex | ||||||
|  | 		case 2: | ||||||
|  | 			if wireType != 0 { | ||||||
|  | 				return fmt.Errorf("proto: wrong wireType = %d for field Int64", wireType) | ||||||
|  | 			} | ||||||
|  | 			var v int64 | ||||||
|  | 			for shift := uint(0); ; shift += 7 { | ||||||
|  | 				if shift >= 64 { | ||||||
|  | 					return ErrIntOverflowGogovanity | ||||||
|  | 				} | ||||||
|  | 				if iNdEx >= l { | ||||||
|  | 					return io.ErrUnexpectedEOF | ||||||
|  | 				} | ||||||
|  | 				b := data[iNdEx] | ||||||
|  | 				iNdEx++ | ||||||
|  | 				v |= (int64(b) & 0x7F) << shift | ||||||
|  | 				if b < 0x80 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			m.Int64 = &v | ||||||
|  | 		case 3: | ||||||
|  | 			if wireType != 0 { | ||||||
|  | 				return fmt.Errorf("proto: wrong wireType = %d for field Int32", wireType) | ||||||
|  | 			} | ||||||
|  | 			var v int32 | ||||||
|  | 			for shift := uint(0); ; shift += 7 { | ||||||
|  | 				if shift >= 64 { | ||||||
|  | 					return ErrIntOverflowGogovanity | ||||||
|  | 				} | ||||||
|  | 				if iNdEx >= l { | ||||||
|  | 					return io.ErrUnexpectedEOF | ||||||
|  | 				} | ||||||
|  | 				b := data[iNdEx] | ||||||
|  | 				iNdEx++ | ||||||
|  | 				v |= (int32(b) & 0x7F) << shift | ||||||
|  | 				if b < 0x80 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			m.Int32 = &v | ||||||
|  | 		default: | ||||||
|  | 			iNdEx = preIndex | ||||||
|  | 			skippy, err := skipGogovanity(data[iNdEx:]) | ||||||
|  | 			if err != nil { | ||||||
|  | 				return err | ||||||
|  | 			} | ||||||
|  | 			if skippy < 0 { | ||||||
|  | 				return ErrInvalidLengthGogovanity | ||||||
|  | 			} | ||||||
|  | 			if (iNdEx + skippy) > l { | ||||||
|  | 				return io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			m.XXX_unrecognized = append(m.XXX_unrecognized, data[iNdEx:iNdEx+skippy]...) | ||||||
|  | 			iNdEx += skippy | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if iNdEx > l { | ||||||
|  | 		return io.ErrUnexpectedEOF | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  | func skipGogovanity(data []byte) (n int, err error) { | ||||||
|  | 	l := len(data) | ||||||
|  | 	iNdEx := 0 | ||||||
|  | 	for iNdEx < l { | ||||||
|  | 		var wire uint64 | ||||||
|  | 		for shift := uint(0); ; shift += 7 { | ||||||
|  | 			if shift >= 64 { | ||||||
|  | 				return 0, ErrIntOverflowGogovanity | ||||||
|  | 			} | ||||||
|  | 			if iNdEx >= l { | ||||||
|  | 				return 0, io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			b := data[iNdEx] | ||||||
|  | 			iNdEx++ | ||||||
|  | 			wire |= (uint64(b) & 0x7F) << shift | ||||||
|  | 			if b < 0x80 { | ||||||
|  | 				break | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		wireType := int(wire & 0x7) | ||||||
|  | 		switch wireType { | ||||||
|  | 		case 0: | ||||||
|  | 			for shift := uint(0); ; shift += 7 { | ||||||
|  | 				if shift >= 64 { | ||||||
|  | 					return 0, ErrIntOverflowGogovanity | ||||||
|  | 				} | ||||||
|  | 				if iNdEx >= l { | ||||||
|  | 					return 0, io.ErrUnexpectedEOF | ||||||
|  | 				} | ||||||
|  | 				iNdEx++ | ||||||
|  | 				if data[iNdEx-1] < 0x80 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 1: | ||||||
|  | 			iNdEx += 8 | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 2: | ||||||
|  | 			var length int | ||||||
|  | 			for shift := uint(0); ; shift += 7 { | ||||||
|  | 				if shift >= 64 { | ||||||
|  | 					return 0, ErrIntOverflowGogovanity | ||||||
|  | 				} | ||||||
|  | 				if iNdEx >= l { | ||||||
|  | 					return 0, io.ErrUnexpectedEOF | ||||||
|  | 				} | ||||||
|  | 				b := data[iNdEx] | ||||||
|  | 				iNdEx++ | ||||||
|  | 				length |= (int(b) & 0x7F) << shift | ||||||
|  | 				if b < 0x80 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			iNdEx += length | ||||||
|  | 			if length < 0 { | ||||||
|  | 				return 0, ErrInvalidLengthGogovanity | ||||||
|  | 			} | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 3: | ||||||
|  | 			for { | ||||||
|  | 				var innerWire uint64 | ||||||
|  | 				var start int = iNdEx | ||||||
|  | 				for shift := uint(0); ; shift += 7 { | ||||||
|  | 					if shift >= 64 { | ||||||
|  | 						return 0, ErrIntOverflowGogovanity | ||||||
|  | 					} | ||||||
|  | 					if iNdEx >= l { | ||||||
|  | 						return 0, io.ErrUnexpectedEOF | ||||||
|  | 					} | ||||||
|  | 					b := data[iNdEx] | ||||||
|  | 					iNdEx++ | ||||||
|  | 					innerWire |= (uint64(b) & 0x7F) << shift | ||||||
|  | 					if b < 0x80 { | ||||||
|  | 						break | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 				innerWireType := int(innerWire & 0x7) | ||||||
|  | 				if innerWireType == 4 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 				next, err := skipGogovanity(data[start:]) | ||||||
|  | 				if err != nil { | ||||||
|  | 					return 0, err | ||||||
|  | 				} | ||||||
|  | 				iNdEx = start + next | ||||||
|  | 			} | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 4: | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 5: | ||||||
|  | 			iNdEx += 4 | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		default: | ||||||
|  | 			return 0, fmt.Errorf("proto: illegal wireType %d", wireType) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	panic("unreachable") | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var ( | ||||||
|  | 	ErrInvalidLengthGogovanity = fmt.Errorf("proto: negative length found during unmarshaling") | ||||||
|  | 	ErrIntOverflowGogovanity   = fmt.Errorf("proto: integer overflow") | ||||||
|  | ) | ||||||
							
								
								
									
										294
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/test/fast/proto3.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										294
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/test/fast/proto3.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,294 @@ | |||||||
|  | // Code generated by protoc-gen-gogo. | ||||||
|  | // source: proto3.proto | ||||||
|  | // DO NOT EDIT! | ||||||
|  |  | ||||||
|  | /* | ||||||
|  | Package vanity is a generated protocol buffer package. | ||||||
|  |  | ||||||
|  | It is generated from these files: | ||||||
|  | 	proto3.proto | ||||||
|  |  | ||||||
|  | It has these top-level messages: | ||||||
|  | 	Aproto3 | ||||||
|  | */ | ||||||
|  | package vanity | ||||||
|  |  | ||||||
|  | import proto "github.com/gogo/protobuf/proto" | ||||||
|  | import fmt "fmt" | ||||||
|  | import math "math" | ||||||
|  |  | ||||||
|  | import io "io" | ||||||
|  |  | ||||||
|  | // Reference imports to suppress errors if they are not otherwise used. | ||||||
|  | var _ = proto.Marshal | ||||||
|  | var _ = fmt.Errorf | ||||||
|  | var _ = math.Inf | ||||||
|  |  | ||||||
|  | type Aproto3 struct { | ||||||
|  | 	B string `protobuf:"bytes,1,opt,name=B,proto3" json:"B,omitempty"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *Aproto3) Reset()         { *m = Aproto3{} } | ||||||
|  | func (m *Aproto3) String() string { return proto.CompactTextString(m) } | ||||||
|  | func (*Aproto3) ProtoMessage()    {} | ||||||
|  |  | ||||||
|  | func init() { | ||||||
|  | 	proto.RegisterType((*Aproto3)(nil), "vanity.Aproto3") | ||||||
|  | } | ||||||
|  | func (m *Aproto3) Marshal() (data []byte, err error) { | ||||||
|  | 	size := m.Size() | ||||||
|  | 	data = make([]byte, size) | ||||||
|  | 	n, err := m.MarshalTo(data) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	return data[:n], nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *Aproto3) MarshalTo(data []byte) (int, error) { | ||||||
|  | 	var i int | ||||||
|  | 	_ = i | ||||||
|  | 	var l int | ||||||
|  | 	_ = l | ||||||
|  | 	if len(m.B) > 0 { | ||||||
|  | 		data[i] = 0xa | ||||||
|  | 		i++ | ||||||
|  | 		i = encodeVarintProto3(data, i, uint64(len(m.B))) | ||||||
|  | 		i += copy(data[i:], m.B) | ||||||
|  | 	} | ||||||
|  | 	return i, nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func encodeFixed64Proto3(data []byte, offset int, v uint64) int { | ||||||
|  | 	data[offset] = uint8(v) | ||||||
|  | 	data[offset+1] = uint8(v >> 8) | ||||||
|  | 	data[offset+2] = uint8(v >> 16) | ||||||
|  | 	data[offset+3] = uint8(v >> 24) | ||||||
|  | 	data[offset+4] = uint8(v >> 32) | ||||||
|  | 	data[offset+5] = uint8(v >> 40) | ||||||
|  | 	data[offset+6] = uint8(v >> 48) | ||||||
|  | 	data[offset+7] = uint8(v >> 56) | ||||||
|  | 	return offset + 8 | ||||||
|  | } | ||||||
|  | func encodeFixed32Proto3(data []byte, offset int, v uint32) int { | ||||||
|  | 	data[offset] = uint8(v) | ||||||
|  | 	data[offset+1] = uint8(v >> 8) | ||||||
|  | 	data[offset+2] = uint8(v >> 16) | ||||||
|  | 	data[offset+3] = uint8(v >> 24) | ||||||
|  | 	return offset + 4 | ||||||
|  | } | ||||||
|  | func encodeVarintProto3(data []byte, offset int, v uint64) int { | ||||||
|  | 	for v >= 1<<7 { | ||||||
|  | 		data[offset] = uint8(v&0x7f | 0x80) | ||||||
|  | 		v >>= 7 | ||||||
|  | 		offset++ | ||||||
|  | 	} | ||||||
|  | 	data[offset] = uint8(v) | ||||||
|  | 	return offset + 1 | ||||||
|  | } | ||||||
|  | func (m *Aproto3) Size() (n int) { | ||||||
|  | 	var l int | ||||||
|  | 	_ = l | ||||||
|  | 	l = len(m.B) | ||||||
|  | 	if l > 0 { | ||||||
|  | 		n += 1 + l + sovProto3(uint64(l)) | ||||||
|  | 	} | ||||||
|  | 	return n | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func sovProto3(x uint64) (n int) { | ||||||
|  | 	for { | ||||||
|  | 		n++ | ||||||
|  | 		x >>= 7 | ||||||
|  | 		if x == 0 { | ||||||
|  | 			break | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return n | ||||||
|  | } | ||||||
|  | func sozProto3(x uint64) (n int) { | ||||||
|  | 	return sovProto3(uint64((x << 1) ^ uint64((int64(x) >> 63)))) | ||||||
|  | } | ||||||
|  | func (m *Aproto3) Unmarshal(data []byte) error { | ||||||
|  | 	l := len(data) | ||||||
|  | 	iNdEx := 0 | ||||||
|  | 	for iNdEx < l { | ||||||
|  | 		preIndex := iNdEx | ||||||
|  | 		var wire uint64 | ||||||
|  | 		for shift := uint(0); ; shift += 7 { | ||||||
|  | 			if shift >= 64 { | ||||||
|  | 				return ErrIntOverflowProto3 | ||||||
|  | 			} | ||||||
|  | 			if iNdEx >= l { | ||||||
|  | 				return io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			b := data[iNdEx] | ||||||
|  | 			iNdEx++ | ||||||
|  | 			wire |= (uint64(b) & 0x7F) << shift | ||||||
|  | 			if b < 0x80 { | ||||||
|  | 				break | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		fieldNum := int32(wire >> 3) | ||||||
|  | 		wireType := int(wire & 0x7) | ||||||
|  | 		if wireType == 4 { | ||||||
|  | 			return fmt.Errorf("proto: Aproto3: wiretype end group for non-group") | ||||||
|  | 		} | ||||||
|  | 		if fieldNum <= 0 { | ||||||
|  | 			return fmt.Errorf("proto: Aproto3: illegal tag %d (wire type %d)", fieldNum, wire) | ||||||
|  | 		} | ||||||
|  | 		switch fieldNum { | ||||||
|  | 		case 1: | ||||||
|  | 			if wireType != 2 { | ||||||
|  | 				return fmt.Errorf("proto: wrong wireType = %d for field B", wireType) | ||||||
|  | 			} | ||||||
|  | 			var stringLen uint64 | ||||||
|  | 			for shift := uint(0); ; shift += 7 { | ||||||
|  | 				if shift >= 64 { | ||||||
|  | 					return ErrIntOverflowProto3 | ||||||
|  | 				} | ||||||
|  | 				if iNdEx >= l { | ||||||
|  | 					return io.ErrUnexpectedEOF | ||||||
|  | 				} | ||||||
|  | 				b := data[iNdEx] | ||||||
|  | 				iNdEx++ | ||||||
|  | 				stringLen |= (uint64(b) & 0x7F) << shift | ||||||
|  | 				if b < 0x80 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			intStringLen := int(stringLen) | ||||||
|  | 			if intStringLen < 0 { | ||||||
|  | 				return ErrInvalidLengthProto3 | ||||||
|  | 			} | ||||||
|  | 			postIndex := iNdEx + intStringLen | ||||||
|  | 			if postIndex > l { | ||||||
|  | 				return io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			m.B = string(data[iNdEx:postIndex]) | ||||||
|  | 			iNdEx = postIndex | ||||||
|  | 		default: | ||||||
|  | 			iNdEx = preIndex | ||||||
|  | 			skippy, err := skipProto3(data[iNdEx:]) | ||||||
|  | 			if err != nil { | ||||||
|  | 				return err | ||||||
|  | 			} | ||||||
|  | 			if skippy < 0 { | ||||||
|  | 				return ErrInvalidLengthProto3 | ||||||
|  | 			} | ||||||
|  | 			if (iNdEx + skippy) > l { | ||||||
|  | 				return io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			iNdEx += skippy | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if iNdEx > l { | ||||||
|  | 		return io.ErrUnexpectedEOF | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  | func skipProto3(data []byte) (n int, err error) { | ||||||
|  | 	l := len(data) | ||||||
|  | 	iNdEx := 0 | ||||||
|  | 	for iNdEx < l { | ||||||
|  | 		var wire uint64 | ||||||
|  | 		for shift := uint(0); ; shift += 7 { | ||||||
|  | 			if shift >= 64 { | ||||||
|  | 				return 0, ErrIntOverflowProto3 | ||||||
|  | 			} | ||||||
|  | 			if iNdEx >= l { | ||||||
|  | 				return 0, io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			b := data[iNdEx] | ||||||
|  | 			iNdEx++ | ||||||
|  | 			wire |= (uint64(b) & 0x7F) << shift | ||||||
|  | 			if b < 0x80 { | ||||||
|  | 				break | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		wireType := int(wire & 0x7) | ||||||
|  | 		switch wireType { | ||||||
|  | 		case 0: | ||||||
|  | 			for shift := uint(0); ; shift += 7 { | ||||||
|  | 				if shift >= 64 { | ||||||
|  | 					return 0, ErrIntOverflowProto3 | ||||||
|  | 				} | ||||||
|  | 				if iNdEx >= l { | ||||||
|  | 					return 0, io.ErrUnexpectedEOF | ||||||
|  | 				} | ||||||
|  | 				iNdEx++ | ||||||
|  | 				if data[iNdEx-1] < 0x80 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 1: | ||||||
|  | 			iNdEx += 8 | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 2: | ||||||
|  | 			var length int | ||||||
|  | 			for shift := uint(0); ; shift += 7 { | ||||||
|  | 				if shift >= 64 { | ||||||
|  | 					return 0, ErrIntOverflowProto3 | ||||||
|  | 				} | ||||||
|  | 				if iNdEx >= l { | ||||||
|  | 					return 0, io.ErrUnexpectedEOF | ||||||
|  | 				} | ||||||
|  | 				b := data[iNdEx] | ||||||
|  | 				iNdEx++ | ||||||
|  | 				length |= (int(b) & 0x7F) << shift | ||||||
|  | 				if b < 0x80 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			iNdEx += length | ||||||
|  | 			if length < 0 { | ||||||
|  | 				return 0, ErrInvalidLengthProto3 | ||||||
|  | 			} | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 3: | ||||||
|  | 			for { | ||||||
|  | 				var innerWire uint64 | ||||||
|  | 				var start int = iNdEx | ||||||
|  | 				for shift := uint(0); ; shift += 7 { | ||||||
|  | 					if shift >= 64 { | ||||||
|  | 						return 0, ErrIntOverflowProto3 | ||||||
|  | 					} | ||||||
|  | 					if iNdEx >= l { | ||||||
|  | 						return 0, io.ErrUnexpectedEOF | ||||||
|  | 					} | ||||||
|  | 					b := data[iNdEx] | ||||||
|  | 					iNdEx++ | ||||||
|  | 					innerWire |= (uint64(b) & 0x7F) << shift | ||||||
|  | 					if b < 0x80 { | ||||||
|  | 						break | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 				innerWireType := int(innerWire & 0x7) | ||||||
|  | 				if innerWireType == 4 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 				next, err := skipProto3(data[start:]) | ||||||
|  | 				if err != nil { | ||||||
|  | 					return 0, err | ||||||
|  | 				} | ||||||
|  | 				iNdEx = start + next | ||||||
|  | 			} | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 4: | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 5: | ||||||
|  | 			iNdEx += 4 | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		default: | ||||||
|  | 			return 0, fmt.Errorf("proto: illegal wireType %d", wireType) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	panic("unreachable") | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var ( | ||||||
|  | 	ErrInvalidLengthProto3 = fmt.Errorf("proto: negative length found during unmarshaling") | ||||||
|  | 	ErrIntOverflowProto3   = fmt.Errorf("proto: integer overflow") | ||||||
|  | ) | ||||||
							
								
								
									
										355
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/test/fast/vanity.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										355
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/test/fast/vanity.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,355 @@ | |||||||
|  | // Code generated by protoc-gen-gogo. | ||||||
|  | // source: vanity.proto | ||||||
|  | // DO NOT EDIT! | ||||||
|  |  | ||||||
|  | /* | ||||||
|  | 	Package vanity is a generated protocol buffer package. | ||||||
|  |  | ||||||
|  | 	It is generated from these files: | ||||||
|  | 		vanity.proto | ||||||
|  |  | ||||||
|  | 	It has these top-level messages: | ||||||
|  | 		A | ||||||
|  | */ | ||||||
|  | package vanity | ||||||
|  |  | ||||||
|  | import proto "github.com/gogo/protobuf/proto" | ||||||
|  | import fmt "fmt" | ||||||
|  | import math "math" | ||||||
|  |  | ||||||
|  | import github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto" | ||||||
|  |  | ||||||
|  | import io "io" | ||||||
|  |  | ||||||
|  | // Reference imports to suppress errors if they are not otherwise used. | ||||||
|  | var _ = proto.Marshal | ||||||
|  | var _ = fmt.Errorf | ||||||
|  | var _ = math.Inf | ||||||
|  |  | ||||||
|  | type A struct { | ||||||
|  | 	Strings          *string `protobuf:"bytes,1,opt,name=Strings" json:"Strings,omitempty"` | ||||||
|  | 	Int              *int64  `protobuf:"varint,2,req,name=Int" json:"Int,omitempty"` | ||||||
|  | 	XXX_unrecognized []byte  `json:"-"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *A) Reset()         { *m = A{} } | ||||||
|  | func (m *A) String() string { return proto.CompactTextString(m) } | ||||||
|  | func (*A) ProtoMessage()    {} | ||||||
|  |  | ||||||
|  | func (m *A) GetStrings() string { | ||||||
|  | 	if m != nil && m.Strings != nil { | ||||||
|  | 		return *m.Strings | ||||||
|  | 	} | ||||||
|  | 	return "" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *A) GetInt() int64 { | ||||||
|  | 	if m != nil && m.Int != nil { | ||||||
|  | 		return *m.Int | ||||||
|  | 	} | ||||||
|  | 	return 0 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func init() { | ||||||
|  | 	proto.RegisterType((*A)(nil), "vanity.A") | ||||||
|  | } | ||||||
|  | func (m *A) Marshal() (data []byte, err error) { | ||||||
|  | 	size := m.Size() | ||||||
|  | 	data = make([]byte, size) | ||||||
|  | 	n, err := m.MarshalTo(data) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	return data[:n], nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *A) MarshalTo(data []byte) (int, error) { | ||||||
|  | 	var i int | ||||||
|  | 	_ = i | ||||||
|  | 	var l int | ||||||
|  | 	_ = l | ||||||
|  | 	if m.Strings != nil { | ||||||
|  | 		data[i] = 0xa | ||||||
|  | 		i++ | ||||||
|  | 		i = encodeVarintVanity(data, i, uint64(len(*m.Strings))) | ||||||
|  | 		i += copy(data[i:], *m.Strings) | ||||||
|  | 	} | ||||||
|  | 	if m.Int == nil { | ||||||
|  | 		return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("Int") | ||||||
|  | 	} else { | ||||||
|  | 		data[i] = 0x10 | ||||||
|  | 		i++ | ||||||
|  | 		i = encodeVarintVanity(data, i, uint64(*m.Int)) | ||||||
|  | 	} | ||||||
|  | 	if m.XXX_unrecognized != nil { | ||||||
|  | 		i += copy(data[i:], m.XXX_unrecognized) | ||||||
|  | 	} | ||||||
|  | 	return i, nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func encodeFixed64Vanity(data []byte, offset int, v uint64) int { | ||||||
|  | 	data[offset] = uint8(v) | ||||||
|  | 	data[offset+1] = uint8(v >> 8) | ||||||
|  | 	data[offset+2] = uint8(v >> 16) | ||||||
|  | 	data[offset+3] = uint8(v >> 24) | ||||||
|  | 	data[offset+4] = uint8(v >> 32) | ||||||
|  | 	data[offset+5] = uint8(v >> 40) | ||||||
|  | 	data[offset+6] = uint8(v >> 48) | ||||||
|  | 	data[offset+7] = uint8(v >> 56) | ||||||
|  | 	return offset + 8 | ||||||
|  | } | ||||||
|  | func encodeFixed32Vanity(data []byte, offset int, v uint32) int { | ||||||
|  | 	data[offset] = uint8(v) | ||||||
|  | 	data[offset+1] = uint8(v >> 8) | ||||||
|  | 	data[offset+2] = uint8(v >> 16) | ||||||
|  | 	data[offset+3] = uint8(v >> 24) | ||||||
|  | 	return offset + 4 | ||||||
|  | } | ||||||
|  | func encodeVarintVanity(data []byte, offset int, v uint64) int { | ||||||
|  | 	for v >= 1<<7 { | ||||||
|  | 		data[offset] = uint8(v&0x7f | 0x80) | ||||||
|  | 		v >>= 7 | ||||||
|  | 		offset++ | ||||||
|  | 	} | ||||||
|  | 	data[offset] = uint8(v) | ||||||
|  | 	return offset + 1 | ||||||
|  | } | ||||||
|  | func (m *A) Size() (n int) { | ||||||
|  | 	var l int | ||||||
|  | 	_ = l | ||||||
|  | 	if m.Strings != nil { | ||||||
|  | 		l = len(*m.Strings) | ||||||
|  | 		n += 1 + l + sovVanity(uint64(l)) | ||||||
|  | 	} | ||||||
|  | 	if m.Int != nil { | ||||||
|  | 		n += 1 + sovVanity(uint64(*m.Int)) | ||||||
|  | 	} | ||||||
|  | 	if m.XXX_unrecognized != nil { | ||||||
|  | 		n += len(m.XXX_unrecognized) | ||||||
|  | 	} | ||||||
|  | 	return n | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func sovVanity(x uint64) (n int) { | ||||||
|  | 	for { | ||||||
|  | 		n++ | ||||||
|  | 		x >>= 7 | ||||||
|  | 		if x == 0 { | ||||||
|  | 			break | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return n | ||||||
|  | } | ||||||
|  | func sozVanity(x uint64) (n int) { | ||||||
|  | 	return sovVanity(uint64((x << 1) ^ uint64((int64(x) >> 63)))) | ||||||
|  | } | ||||||
|  | func (m *A) Unmarshal(data []byte) error { | ||||||
|  | 	var hasFields [1]uint64 | ||||||
|  | 	l := len(data) | ||||||
|  | 	iNdEx := 0 | ||||||
|  | 	for iNdEx < l { | ||||||
|  | 		preIndex := iNdEx | ||||||
|  | 		var wire uint64 | ||||||
|  | 		for shift := uint(0); ; shift += 7 { | ||||||
|  | 			if shift >= 64 { | ||||||
|  | 				return ErrIntOverflowVanity | ||||||
|  | 			} | ||||||
|  | 			if iNdEx >= l { | ||||||
|  | 				return io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			b := data[iNdEx] | ||||||
|  | 			iNdEx++ | ||||||
|  | 			wire |= (uint64(b) & 0x7F) << shift | ||||||
|  | 			if b < 0x80 { | ||||||
|  | 				break | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		fieldNum := int32(wire >> 3) | ||||||
|  | 		wireType := int(wire & 0x7) | ||||||
|  | 		if wireType == 4 { | ||||||
|  | 			return fmt.Errorf("proto: A: wiretype end group for non-group") | ||||||
|  | 		} | ||||||
|  | 		if fieldNum <= 0 { | ||||||
|  | 			return fmt.Errorf("proto: A: illegal tag %d (wire type %d)", fieldNum, wire) | ||||||
|  | 		} | ||||||
|  | 		switch fieldNum { | ||||||
|  | 		case 1: | ||||||
|  | 			if wireType != 2 { | ||||||
|  | 				return fmt.Errorf("proto: wrong wireType = %d for field Strings", wireType) | ||||||
|  | 			} | ||||||
|  | 			var stringLen uint64 | ||||||
|  | 			for shift := uint(0); ; shift += 7 { | ||||||
|  | 				if shift >= 64 { | ||||||
|  | 					return ErrIntOverflowVanity | ||||||
|  | 				} | ||||||
|  | 				if iNdEx >= l { | ||||||
|  | 					return io.ErrUnexpectedEOF | ||||||
|  | 				} | ||||||
|  | 				b := data[iNdEx] | ||||||
|  | 				iNdEx++ | ||||||
|  | 				stringLen |= (uint64(b) & 0x7F) << shift | ||||||
|  | 				if b < 0x80 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			intStringLen := int(stringLen) | ||||||
|  | 			if intStringLen < 0 { | ||||||
|  | 				return ErrInvalidLengthVanity | ||||||
|  | 			} | ||||||
|  | 			postIndex := iNdEx + intStringLen | ||||||
|  | 			if postIndex > l { | ||||||
|  | 				return io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			s := string(data[iNdEx:postIndex]) | ||||||
|  | 			m.Strings = &s | ||||||
|  | 			iNdEx = postIndex | ||||||
|  | 		case 2: | ||||||
|  | 			if wireType != 0 { | ||||||
|  | 				return fmt.Errorf("proto: wrong wireType = %d for field Int", wireType) | ||||||
|  | 			} | ||||||
|  | 			var v int64 | ||||||
|  | 			for shift := uint(0); ; shift += 7 { | ||||||
|  | 				if shift >= 64 { | ||||||
|  | 					return ErrIntOverflowVanity | ||||||
|  | 				} | ||||||
|  | 				if iNdEx >= l { | ||||||
|  | 					return io.ErrUnexpectedEOF | ||||||
|  | 				} | ||||||
|  | 				b := data[iNdEx] | ||||||
|  | 				iNdEx++ | ||||||
|  | 				v |= (int64(b) & 0x7F) << shift | ||||||
|  | 				if b < 0x80 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			m.Int = &v | ||||||
|  | 			hasFields[0] |= uint64(0x00000001) | ||||||
|  | 		default: | ||||||
|  | 			iNdEx = preIndex | ||||||
|  | 			skippy, err := skipVanity(data[iNdEx:]) | ||||||
|  | 			if err != nil { | ||||||
|  | 				return err | ||||||
|  | 			} | ||||||
|  | 			if skippy < 0 { | ||||||
|  | 				return ErrInvalidLengthVanity | ||||||
|  | 			} | ||||||
|  | 			if (iNdEx + skippy) > l { | ||||||
|  | 				return io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			m.XXX_unrecognized = append(m.XXX_unrecognized, data[iNdEx:iNdEx+skippy]...) | ||||||
|  | 			iNdEx += skippy | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	if hasFields[0]&uint64(0x00000001) == 0 { | ||||||
|  | 		return github_com_gogo_protobuf_proto.NewRequiredNotSetError("Int") | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if iNdEx > l { | ||||||
|  | 		return io.ErrUnexpectedEOF | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  | func skipVanity(data []byte) (n int, err error) { | ||||||
|  | 	l := len(data) | ||||||
|  | 	iNdEx := 0 | ||||||
|  | 	for iNdEx < l { | ||||||
|  | 		var wire uint64 | ||||||
|  | 		for shift := uint(0); ; shift += 7 { | ||||||
|  | 			if shift >= 64 { | ||||||
|  | 				return 0, ErrIntOverflowVanity | ||||||
|  | 			} | ||||||
|  | 			if iNdEx >= l { | ||||||
|  | 				return 0, io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			b := data[iNdEx] | ||||||
|  | 			iNdEx++ | ||||||
|  | 			wire |= (uint64(b) & 0x7F) << shift | ||||||
|  | 			if b < 0x80 { | ||||||
|  | 				break | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		wireType := int(wire & 0x7) | ||||||
|  | 		switch wireType { | ||||||
|  | 		case 0: | ||||||
|  | 			for shift := uint(0); ; shift += 7 { | ||||||
|  | 				if shift >= 64 { | ||||||
|  | 					return 0, ErrIntOverflowVanity | ||||||
|  | 				} | ||||||
|  | 				if iNdEx >= l { | ||||||
|  | 					return 0, io.ErrUnexpectedEOF | ||||||
|  | 				} | ||||||
|  | 				iNdEx++ | ||||||
|  | 				if data[iNdEx-1] < 0x80 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 1: | ||||||
|  | 			iNdEx += 8 | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 2: | ||||||
|  | 			var length int | ||||||
|  | 			for shift := uint(0); ; shift += 7 { | ||||||
|  | 				if shift >= 64 { | ||||||
|  | 					return 0, ErrIntOverflowVanity | ||||||
|  | 				} | ||||||
|  | 				if iNdEx >= l { | ||||||
|  | 					return 0, io.ErrUnexpectedEOF | ||||||
|  | 				} | ||||||
|  | 				b := data[iNdEx] | ||||||
|  | 				iNdEx++ | ||||||
|  | 				length |= (int(b) & 0x7F) << shift | ||||||
|  | 				if b < 0x80 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			iNdEx += length | ||||||
|  | 			if length < 0 { | ||||||
|  | 				return 0, ErrInvalidLengthVanity | ||||||
|  | 			} | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 3: | ||||||
|  | 			for { | ||||||
|  | 				var innerWire uint64 | ||||||
|  | 				var start int = iNdEx | ||||||
|  | 				for shift := uint(0); ; shift += 7 { | ||||||
|  | 					if shift >= 64 { | ||||||
|  | 						return 0, ErrIntOverflowVanity | ||||||
|  | 					} | ||||||
|  | 					if iNdEx >= l { | ||||||
|  | 						return 0, io.ErrUnexpectedEOF | ||||||
|  | 					} | ||||||
|  | 					b := data[iNdEx] | ||||||
|  | 					iNdEx++ | ||||||
|  | 					innerWire |= (uint64(b) & 0x7F) << shift | ||||||
|  | 					if b < 0x80 { | ||||||
|  | 						break | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 				innerWireType := int(innerWire & 0x7) | ||||||
|  | 				if innerWireType == 4 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 				next, err := skipVanity(data[start:]) | ||||||
|  | 				if err != nil { | ||||||
|  | 					return 0, err | ||||||
|  | 				} | ||||||
|  | 				iNdEx = start + next | ||||||
|  | 			} | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 4: | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 5: | ||||||
|  | 			iNdEx += 4 | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		default: | ||||||
|  | 			return 0, fmt.Errorf("proto: illegal wireType %d", wireType) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	panic("unreachable") | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var ( | ||||||
|  | 	ErrInvalidLengthVanity = fmt.Errorf("proto: negative length found during unmarshaling") | ||||||
|  | 	ErrIntOverflowVanity   = fmt.Errorf("proto: integer overflow") | ||||||
|  | ) | ||||||
							
								
								
									
										372
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/test/faster/gogovanity.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										372
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/test/faster/gogovanity.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,372 @@ | |||||||
|  | // Code generated by protoc-gen-gogo. | ||||||
|  | // source: gogovanity.proto | ||||||
|  | // DO NOT EDIT! | ||||||
|  |  | ||||||
|  | /* | ||||||
|  | 	Package vanity is a generated protocol buffer package. | ||||||
|  |  | ||||||
|  | 	It is generated from these files: | ||||||
|  | 		gogovanity.proto | ||||||
|  |  | ||||||
|  | 	It has these top-level messages: | ||||||
|  | 		B | ||||||
|  | */ | ||||||
|  | package vanity | ||||||
|  |  | ||||||
|  | import proto "github.com/gogo/protobuf/proto" | ||||||
|  | import fmt "fmt" | ||||||
|  | import math "math" | ||||||
|  | import _ "github.com/gogo/protobuf/gogoproto" | ||||||
|  |  | ||||||
|  | import io "io" | ||||||
|  |  | ||||||
|  | // Reference imports to suppress errors if they are not otherwise used. | ||||||
|  | var _ = proto.Marshal | ||||||
|  | var _ = fmt.Errorf | ||||||
|  | var _ = math.Inf | ||||||
|  |  | ||||||
|  | type B struct { | ||||||
|  | 	String_ *string `protobuf:"bytes,1,opt,name=String" json:"String,omitempty"` | ||||||
|  | 	Int64   int64   `protobuf:"varint,2,opt,name=Int64" json:"Int64"` | ||||||
|  | 	Int32   *int32  `protobuf:"varint,3,opt,name=Int32,def=1234" json:"Int32,omitempty"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *B) Reset()         { *m = B{} } | ||||||
|  | func (m *B) String() string { return proto.CompactTextString(m) } | ||||||
|  | func (*B) ProtoMessage()    {} | ||||||
|  |  | ||||||
|  | const Default_B_Int32 int32 = 1234 | ||||||
|  |  | ||||||
|  | func (m *B) GetString_() string { | ||||||
|  | 	if m != nil && m.String_ != nil { | ||||||
|  | 		return *m.String_ | ||||||
|  | 	} | ||||||
|  | 	return "" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *B) GetInt64() int64 { | ||||||
|  | 	if m != nil { | ||||||
|  | 		return m.Int64 | ||||||
|  | 	} | ||||||
|  | 	return 0 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *B) GetInt32() int32 { | ||||||
|  | 	if m != nil && m.Int32 != nil { | ||||||
|  | 		return *m.Int32 | ||||||
|  | 	} | ||||||
|  | 	return Default_B_Int32 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func init() { | ||||||
|  | 	proto.RegisterType((*B)(nil), "vanity.B") | ||||||
|  | } | ||||||
|  | func (m *B) Marshal() (data []byte, err error) { | ||||||
|  | 	size := m.Size() | ||||||
|  | 	data = make([]byte, size) | ||||||
|  | 	n, err := m.MarshalTo(data) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	return data[:n], nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *B) MarshalTo(data []byte) (int, error) { | ||||||
|  | 	var i int | ||||||
|  | 	_ = i | ||||||
|  | 	var l int | ||||||
|  | 	_ = l | ||||||
|  | 	if m.String_ != nil { | ||||||
|  | 		data[i] = 0xa | ||||||
|  | 		i++ | ||||||
|  | 		i = encodeVarintGogovanity(data, i, uint64(len(*m.String_))) | ||||||
|  | 		i += copy(data[i:], *m.String_) | ||||||
|  | 	} | ||||||
|  | 	data[i] = 0x10 | ||||||
|  | 	i++ | ||||||
|  | 	i = encodeVarintGogovanity(data, i, uint64(m.Int64)) | ||||||
|  | 	if m.Int32 != nil { | ||||||
|  | 		data[i] = 0x18 | ||||||
|  | 		i++ | ||||||
|  | 		i = encodeVarintGogovanity(data, i, uint64(*m.Int32)) | ||||||
|  | 	} | ||||||
|  | 	return i, nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func encodeFixed64Gogovanity(data []byte, offset int, v uint64) int { | ||||||
|  | 	data[offset] = uint8(v) | ||||||
|  | 	data[offset+1] = uint8(v >> 8) | ||||||
|  | 	data[offset+2] = uint8(v >> 16) | ||||||
|  | 	data[offset+3] = uint8(v >> 24) | ||||||
|  | 	data[offset+4] = uint8(v >> 32) | ||||||
|  | 	data[offset+5] = uint8(v >> 40) | ||||||
|  | 	data[offset+6] = uint8(v >> 48) | ||||||
|  | 	data[offset+7] = uint8(v >> 56) | ||||||
|  | 	return offset + 8 | ||||||
|  | } | ||||||
|  | func encodeFixed32Gogovanity(data []byte, offset int, v uint32) int { | ||||||
|  | 	data[offset] = uint8(v) | ||||||
|  | 	data[offset+1] = uint8(v >> 8) | ||||||
|  | 	data[offset+2] = uint8(v >> 16) | ||||||
|  | 	data[offset+3] = uint8(v >> 24) | ||||||
|  | 	return offset + 4 | ||||||
|  | } | ||||||
|  | func encodeVarintGogovanity(data []byte, offset int, v uint64) int { | ||||||
|  | 	for v >= 1<<7 { | ||||||
|  | 		data[offset] = uint8(v&0x7f | 0x80) | ||||||
|  | 		v >>= 7 | ||||||
|  | 		offset++ | ||||||
|  | 	} | ||||||
|  | 	data[offset] = uint8(v) | ||||||
|  | 	return offset + 1 | ||||||
|  | } | ||||||
|  | func (m *B) Size() (n int) { | ||||||
|  | 	var l int | ||||||
|  | 	_ = l | ||||||
|  | 	if m.String_ != nil { | ||||||
|  | 		l = len(*m.String_) | ||||||
|  | 		n += 1 + l + sovGogovanity(uint64(l)) | ||||||
|  | 	} | ||||||
|  | 	n += 1 + sovGogovanity(uint64(m.Int64)) | ||||||
|  | 	if m.Int32 != nil { | ||||||
|  | 		n += 1 + sovGogovanity(uint64(*m.Int32)) | ||||||
|  | 	} | ||||||
|  | 	return n | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func sovGogovanity(x uint64) (n int) { | ||||||
|  | 	for { | ||||||
|  | 		n++ | ||||||
|  | 		x >>= 7 | ||||||
|  | 		if x == 0 { | ||||||
|  | 			break | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return n | ||||||
|  | } | ||||||
|  | func sozGogovanity(x uint64) (n int) { | ||||||
|  | 	return sovGogovanity(uint64((x << 1) ^ uint64((int64(x) >> 63)))) | ||||||
|  | } | ||||||
|  | func (m *B) Unmarshal(data []byte) error { | ||||||
|  | 	l := len(data) | ||||||
|  | 	iNdEx := 0 | ||||||
|  | 	for iNdEx < l { | ||||||
|  | 		preIndex := iNdEx | ||||||
|  | 		var wire uint64 | ||||||
|  | 		for shift := uint(0); ; shift += 7 { | ||||||
|  | 			if shift >= 64 { | ||||||
|  | 				return ErrIntOverflowGogovanity | ||||||
|  | 			} | ||||||
|  | 			if iNdEx >= l { | ||||||
|  | 				return io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			b := data[iNdEx] | ||||||
|  | 			iNdEx++ | ||||||
|  | 			wire |= (uint64(b) & 0x7F) << shift | ||||||
|  | 			if b < 0x80 { | ||||||
|  | 				break | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		fieldNum := int32(wire >> 3) | ||||||
|  | 		wireType := int(wire & 0x7) | ||||||
|  | 		if wireType == 4 { | ||||||
|  | 			return fmt.Errorf("proto: B: wiretype end group for non-group") | ||||||
|  | 		} | ||||||
|  | 		if fieldNum <= 0 { | ||||||
|  | 			return fmt.Errorf("proto: B: illegal tag %d (wire type %d)", fieldNum, wire) | ||||||
|  | 		} | ||||||
|  | 		switch fieldNum { | ||||||
|  | 		case 1: | ||||||
|  | 			if wireType != 2 { | ||||||
|  | 				return fmt.Errorf("proto: wrong wireType = %d for field String_", wireType) | ||||||
|  | 			} | ||||||
|  | 			var stringLen uint64 | ||||||
|  | 			for shift := uint(0); ; shift += 7 { | ||||||
|  | 				if shift >= 64 { | ||||||
|  | 					return ErrIntOverflowGogovanity | ||||||
|  | 				} | ||||||
|  | 				if iNdEx >= l { | ||||||
|  | 					return io.ErrUnexpectedEOF | ||||||
|  | 				} | ||||||
|  | 				b := data[iNdEx] | ||||||
|  | 				iNdEx++ | ||||||
|  | 				stringLen |= (uint64(b) & 0x7F) << shift | ||||||
|  | 				if b < 0x80 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			intStringLen := int(stringLen) | ||||||
|  | 			if intStringLen < 0 { | ||||||
|  | 				return ErrInvalidLengthGogovanity | ||||||
|  | 			} | ||||||
|  | 			postIndex := iNdEx + intStringLen | ||||||
|  | 			if postIndex > l { | ||||||
|  | 				return io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			s := string(data[iNdEx:postIndex]) | ||||||
|  | 			m.String_ = &s | ||||||
|  | 			iNdEx = postIndex | ||||||
|  | 		case 2: | ||||||
|  | 			if wireType != 0 { | ||||||
|  | 				return fmt.Errorf("proto: wrong wireType = %d for field Int64", wireType) | ||||||
|  | 			} | ||||||
|  | 			m.Int64 = 0 | ||||||
|  | 			for shift := uint(0); ; shift += 7 { | ||||||
|  | 				if shift >= 64 { | ||||||
|  | 					return ErrIntOverflowGogovanity | ||||||
|  | 				} | ||||||
|  | 				if iNdEx >= l { | ||||||
|  | 					return io.ErrUnexpectedEOF | ||||||
|  | 				} | ||||||
|  | 				b := data[iNdEx] | ||||||
|  | 				iNdEx++ | ||||||
|  | 				m.Int64 |= (int64(b) & 0x7F) << shift | ||||||
|  | 				if b < 0x80 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		case 3: | ||||||
|  | 			if wireType != 0 { | ||||||
|  | 				return fmt.Errorf("proto: wrong wireType = %d for field Int32", wireType) | ||||||
|  | 			} | ||||||
|  | 			var v int32 | ||||||
|  | 			for shift := uint(0); ; shift += 7 { | ||||||
|  | 				if shift >= 64 { | ||||||
|  | 					return ErrIntOverflowGogovanity | ||||||
|  | 				} | ||||||
|  | 				if iNdEx >= l { | ||||||
|  | 					return io.ErrUnexpectedEOF | ||||||
|  | 				} | ||||||
|  | 				b := data[iNdEx] | ||||||
|  | 				iNdEx++ | ||||||
|  | 				v |= (int32(b) & 0x7F) << shift | ||||||
|  | 				if b < 0x80 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			m.Int32 = &v | ||||||
|  | 		default: | ||||||
|  | 			iNdEx = preIndex | ||||||
|  | 			skippy, err := skipGogovanity(data[iNdEx:]) | ||||||
|  | 			if err != nil { | ||||||
|  | 				return err | ||||||
|  | 			} | ||||||
|  | 			if skippy < 0 { | ||||||
|  | 				return ErrInvalidLengthGogovanity | ||||||
|  | 			} | ||||||
|  | 			if (iNdEx + skippy) > l { | ||||||
|  | 				return io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			iNdEx += skippy | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if iNdEx > l { | ||||||
|  | 		return io.ErrUnexpectedEOF | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  | func skipGogovanity(data []byte) (n int, err error) { | ||||||
|  | 	l := len(data) | ||||||
|  | 	iNdEx := 0 | ||||||
|  | 	for iNdEx < l { | ||||||
|  | 		var wire uint64 | ||||||
|  | 		for shift := uint(0); ; shift += 7 { | ||||||
|  | 			if shift >= 64 { | ||||||
|  | 				return 0, ErrIntOverflowGogovanity | ||||||
|  | 			} | ||||||
|  | 			if iNdEx >= l { | ||||||
|  | 				return 0, io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			b := data[iNdEx] | ||||||
|  | 			iNdEx++ | ||||||
|  | 			wire |= (uint64(b) & 0x7F) << shift | ||||||
|  | 			if b < 0x80 { | ||||||
|  | 				break | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		wireType := int(wire & 0x7) | ||||||
|  | 		switch wireType { | ||||||
|  | 		case 0: | ||||||
|  | 			for shift := uint(0); ; shift += 7 { | ||||||
|  | 				if shift >= 64 { | ||||||
|  | 					return 0, ErrIntOverflowGogovanity | ||||||
|  | 				} | ||||||
|  | 				if iNdEx >= l { | ||||||
|  | 					return 0, io.ErrUnexpectedEOF | ||||||
|  | 				} | ||||||
|  | 				iNdEx++ | ||||||
|  | 				if data[iNdEx-1] < 0x80 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 1: | ||||||
|  | 			iNdEx += 8 | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 2: | ||||||
|  | 			var length int | ||||||
|  | 			for shift := uint(0); ; shift += 7 { | ||||||
|  | 				if shift >= 64 { | ||||||
|  | 					return 0, ErrIntOverflowGogovanity | ||||||
|  | 				} | ||||||
|  | 				if iNdEx >= l { | ||||||
|  | 					return 0, io.ErrUnexpectedEOF | ||||||
|  | 				} | ||||||
|  | 				b := data[iNdEx] | ||||||
|  | 				iNdEx++ | ||||||
|  | 				length |= (int(b) & 0x7F) << shift | ||||||
|  | 				if b < 0x80 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			iNdEx += length | ||||||
|  | 			if length < 0 { | ||||||
|  | 				return 0, ErrInvalidLengthGogovanity | ||||||
|  | 			} | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 3: | ||||||
|  | 			for { | ||||||
|  | 				var innerWire uint64 | ||||||
|  | 				var start int = iNdEx | ||||||
|  | 				for shift := uint(0); ; shift += 7 { | ||||||
|  | 					if shift >= 64 { | ||||||
|  | 						return 0, ErrIntOverflowGogovanity | ||||||
|  | 					} | ||||||
|  | 					if iNdEx >= l { | ||||||
|  | 						return 0, io.ErrUnexpectedEOF | ||||||
|  | 					} | ||||||
|  | 					b := data[iNdEx] | ||||||
|  | 					iNdEx++ | ||||||
|  | 					innerWire |= (uint64(b) & 0x7F) << shift | ||||||
|  | 					if b < 0x80 { | ||||||
|  | 						break | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 				innerWireType := int(innerWire & 0x7) | ||||||
|  | 				if innerWireType == 4 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 				next, err := skipGogovanity(data[start:]) | ||||||
|  | 				if err != nil { | ||||||
|  | 					return 0, err | ||||||
|  | 				} | ||||||
|  | 				iNdEx = start + next | ||||||
|  | 			} | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 4: | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 5: | ||||||
|  | 			iNdEx += 4 | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		default: | ||||||
|  | 			return 0, fmt.Errorf("proto: illegal wireType %d", wireType) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	panic("unreachable") | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var ( | ||||||
|  | 	ErrInvalidLengthGogovanity = fmt.Errorf("proto: negative length found during unmarshaling") | ||||||
|  | 	ErrIntOverflowGogovanity   = fmt.Errorf("proto: integer overflow") | ||||||
|  | ) | ||||||
							
								
								
									
										294
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/test/faster/proto3.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										294
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/test/faster/proto3.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,294 @@ | |||||||
|  | // Code generated by protoc-gen-gogo. | ||||||
|  | // source: proto3.proto | ||||||
|  | // DO NOT EDIT! | ||||||
|  |  | ||||||
|  | /* | ||||||
|  | Package vanity is a generated protocol buffer package. | ||||||
|  |  | ||||||
|  | It is generated from these files: | ||||||
|  | 	proto3.proto | ||||||
|  |  | ||||||
|  | It has these top-level messages: | ||||||
|  | 	Aproto3 | ||||||
|  | */ | ||||||
|  | package vanity | ||||||
|  |  | ||||||
|  | import proto "github.com/gogo/protobuf/proto" | ||||||
|  | import fmt "fmt" | ||||||
|  | import math "math" | ||||||
|  |  | ||||||
|  | import io "io" | ||||||
|  |  | ||||||
|  | // Reference imports to suppress errors if they are not otherwise used. | ||||||
|  | var _ = proto.Marshal | ||||||
|  | var _ = fmt.Errorf | ||||||
|  | var _ = math.Inf | ||||||
|  |  | ||||||
|  | type Aproto3 struct { | ||||||
|  | 	B string `protobuf:"bytes,1,opt,name=B,proto3" json:"B,omitempty"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *Aproto3) Reset()         { *m = Aproto3{} } | ||||||
|  | func (m *Aproto3) String() string { return proto.CompactTextString(m) } | ||||||
|  | func (*Aproto3) ProtoMessage()    {} | ||||||
|  |  | ||||||
|  | func init() { | ||||||
|  | 	proto.RegisterType((*Aproto3)(nil), "vanity.Aproto3") | ||||||
|  | } | ||||||
|  | func (m *Aproto3) Marshal() (data []byte, err error) { | ||||||
|  | 	size := m.Size() | ||||||
|  | 	data = make([]byte, size) | ||||||
|  | 	n, err := m.MarshalTo(data) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	return data[:n], nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *Aproto3) MarshalTo(data []byte) (int, error) { | ||||||
|  | 	var i int | ||||||
|  | 	_ = i | ||||||
|  | 	var l int | ||||||
|  | 	_ = l | ||||||
|  | 	if len(m.B) > 0 { | ||||||
|  | 		data[i] = 0xa | ||||||
|  | 		i++ | ||||||
|  | 		i = encodeVarintProto3(data, i, uint64(len(m.B))) | ||||||
|  | 		i += copy(data[i:], m.B) | ||||||
|  | 	} | ||||||
|  | 	return i, nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func encodeFixed64Proto3(data []byte, offset int, v uint64) int { | ||||||
|  | 	data[offset] = uint8(v) | ||||||
|  | 	data[offset+1] = uint8(v >> 8) | ||||||
|  | 	data[offset+2] = uint8(v >> 16) | ||||||
|  | 	data[offset+3] = uint8(v >> 24) | ||||||
|  | 	data[offset+4] = uint8(v >> 32) | ||||||
|  | 	data[offset+5] = uint8(v >> 40) | ||||||
|  | 	data[offset+6] = uint8(v >> 48) | ||||||
|  | 	data[offset+7] = uint8(v >> 56) | ||||||
|  | 	return offset + 8 | ||||||
|  | } | ||||||
|  | func encodeFixed32Proto3(data []byte, offset int, v uint32) int { | ||||||
|  | 	data[offset] = uint8(v) | ||||||
|  | 	data[offset+1] = uint8(v >> 8) | ||||||
|  | 	data[offset+2] = uint8(v >> 16) | ||||||
|  | 	data[offset+3] = uint8(v >> 24) | ||||||
|  | 	return offset + 4 | ||||||
|  | } | ||||||
|  | func encodeVarintProto3(data []byte, offset int, v uint64) int { | ||||||
|  | 	for v >= 1<<7 { | ||||||
|  | 		data[offset] = uint8(v&0x7f | 0x80) | ||||||
|  | 		v >>= 7 | ||||||
|  | 		offset++ | ||||||
|  | 	} | ||||||
|  | 	data[offset] = uint8(v) | ||||||
|  | 	return offset + 1 | ||||||
|  | } | ||||||
|  | func (m *Aproto3) Size() (n int) { | ||||||
|  | 	var l int | ||||||
|  | 	_ = l | ||||||
|  | 	l = len(m.B) | ||||||
|  | 	if l > 0 { | ||||||
|  | 		n += 1 + l + sovProto3(uint64(l)) | ||||||
|  | 	} | ||||||
|  | 	return n | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func sovProto3(x uint64) (n int) { | ||||||
|  | 	for { | ||||||
|  | 		n++ | ||||||
|  | 		x >>= 7 | ||||||
|  | 		if x == 0 { | ||||||
|  | 			break | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return n | ||||||
|  | } | ||||||
|  | func sozProto3(x uint64) (n int) { | ||||||
|  | 	return sovProto3(uint64((x << 1) ^ uint64((int64(x) >> 63)))) | ||||||
|  | } | ||||||
|  | func (m *Aproto3) Unmarshal(data []byte) error { | ||||||
|  | 	l := len(data) | ||||||
|  | 	iNdEx := 0 | ||||||
|  | 	for iNdEx < l { | ||||||
|  | 		preIndex := iNdEx | ||||||
|  | 		var wire uint64 | ||||||
|  | 		for shift := uint(0); ; shift += 7 { | ||||||
|  | 			if shift >= 64 { | ||||||
|  | 				return ErrIntOverflowProto3 | ||||||
|  | 			} | ||||||
|  | 			if iNdEx >= l { | ||||||
|  | 				return io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			b := data[iNdEx] | ||||||
|  | 			iNdEx++ | ||||||
|  | 			wire |= (uint64(b) & 0x7F) << shift | ||||||
|  | 			if b < 0x80 { | ||||||
|  | 				break | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		fieldNum := int32(wire >> 3) | ||||||
|  | 		wireType := int(wire & 0x7) | ||||||
|  | 		if wireType == 4 { | ||||||
|  | 			return fmt.Errorf("proto: Aproto3: wiretype end group for non-group") | ||||||
|  | 		} | ||||||
|  | 		if fieldNum <= 0 { | ||||||
|  | 			return fmt.Errorf("proto: Aproto3: illegal tag %d (wire type %d)", fieldNum, wire) | ||||||
|  | 		} | ||||||
|  | 		switch fieldNum { | ||||||
|  | 		case 1: | ||||||
|  | 			if wireType != 2 { | ||||||
|  | 				return fmt.Errorf("proto: wrong wireType = %d for field B", wireType) | ||||||
|  | 			} | ||||||
|  | 			var stringLen uint64 | ||||||
|  | 			for shift := uint(0); ; shift += 7 { | ||||||
|  | 				if shift >= 64 { | ||||||
|  | 					return ErrIntOverflowProto3 | ||||||
|  | 				} | ||||||
|  | 				if iNdEx >= l { | ||||||
|  | 					return io.ErrUnexpectedEOF | ||||||
|  | 				} | ||||||
|  | 				b := data[iNdEx] | ||||||
|  | 				iNdEx++ | ||||||
|  | 				stringLen |= (uint64(b) & 0x7F) << shift | ||||||
|  | 				if b < 0x80 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			intStringLen := int(stringLen) | ||||||
|  | 			if intStringLen < 0 { | ||||||
|  | 				return ErrInvalidLengthProto3 | ||||||
|  | 			} | ||||||
|  | 			postIndex := iNdEx + intStringLen | ||||||
|  | 			if postIndex > l { | ||||||
|  | 				return io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			m.B = string(data[iNdEx:postIndex]) | ||||||
|  | 			iNdEx = postIndex | ||||||
|  | 		default: | ||||||
|  | 			iNdEx = preIndex | ||||||
|  | 			skippy, err := skipProto3(data[iNdEx:]) | ||||||
|  | 			if err != nil { | ||||||
|  | 				return err | ||||||
|  | 			} | ||||||
|  | 			if skippy < 0 { | ||||||
|  | 				return ErrInvalidLengthProto3 | ||||||
|  | 			} | ||||||
|  | 			if (iNdEx + skippy) > l { | ||||||
|  | 				return io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			iNdEx += skippy | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if iNdEx > l { | ||||||
|  | 		return io.ErrUnexpectedEOF | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  | func skipProto3(data []byte) (n int, err error) { | ||||||
|  | 	l := len(data) | ||||||
|  | 	iNdEx := 0 | ||||||
|  | 	for iNdEx < l { | ||||||
|  | 		var wire uint64 | ||||||
|  | 		for shift := uint(0); ; shift += 7 { | ||||||
|  | 			if shift >= 64 { | ||||||
|  | 				return 0, ErrIntOverflowProto3 | ||||||
|  | 			} | ||||||
|  | 			if iNdEx >= l { | ||||||
|  | 				return 0, io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			b := data[iNdEx] | ||||||
|  | 			iNdEx++ | ||||||
|  | 			wire |= (uint64(b) & 0x7F) << shift | ||||||
|  | 			if b < 0x80 { | ||||||
|  | 				break | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		wireType := int(wire & 0x7) | ||||||
|  | 		switch wireType { | ||||||
|  | 		case 0: | ||||||
|  | 			for shift := uint(0); ; shift += 7 { | ||||||
|  | 				if shift >= 64 { | ||||||
|  | 					return 0, ErrIntOverflowProto3 | ||||||
|  | 				} | ||||||
|  | 				if iNdEx >= l { | ||||||
|  | 					return 0, io.ErrUnexpectedEOF | ||||||
|  | 				} | ||||||
|  | 				iNdEx++ | ||||||
|  | 				if data[iNdEx-1] < 0x80 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 1: | ||||||
|  | 			iNdEx += 8 | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 2: | ||||||
|  | 			var length int | ||||||
|  | 			for shift := uint(0); ; shift += 7 { | ||||||
|  | 				if shift >= 64 { | ||||||
|  | 					return 0, ErrIntOverflowProto3 | ||||||
|  | 				} | ||||||
|  | 				if iNdEx >= l { | ||||||
|  | 					return 0, io.ErrUnexpectedEOF | ||||||
|  | 				} | ||||||
|  | 				b := data[iNdEx] | ||||||
|  | 				iNdEx++ | ||||||
|  | 				length |= (int(b) & 0x7F) << shift | ||||||
|  | 				if b < 0x80 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			iNdEx += length | ||||||
|  | 			if length < 0 { | ||||||
|  | 				return 0, ErrInvalidLengthProto3 | ||||||
|  | 			} | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 3: | ||||||
|  | 			for { | ||||||
|  | 				var innerWire uint64 | ||||||
|  | 				var start int = iNdEx | ||||||
|  | 				for shift := uint(0); ; shift += 7 { | ||||||
|  | 					if shift >= 64 { | ||||||
|  | 						return 0, ErrIntOverflowProto3 | ||||||
|  | 					} | ||||||
|  | 					if iNdEx >= l { | ||||||
|  | 						return 0, io.ErrUnexpectedEOF | ||||||
|  | 					} | ||||||
|  | 					b := data[iNdEx] | ||||||
|  | 					iNdEx++ | ||||||
|  | 					innerWire |= (uint64(b) & 0x7F) << shift | ||||||
|  | 					if b < 0x80 { | ||||||
|  | 						break | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 				innerWireType := int(innerWire & 0x7) | ||||||
|  | 				if innerWireType == 4 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 				next, err := skipProto3(data[start:]) | ||||||
|  | 				if err != nil { | ||||||
|  | 					return 0, err | ||||||
|  | 				} | ||||||
|  | 				iNdEx = start + next | ||||||
|  | 			} | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 4: | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 5: | ||||||
|  | 			iNdEx += 4 | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		default: | ||||||
|  | 			return 0, fmt.Errorf("proto: illegal wireType %d", wireType) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	panic("unreachable") | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var ( | ||||||
|  | 	ErrInvalidLengthProto3 = fmt.Errorf("proto: negative length found during unmarshaling") | ||||||
|  | 	ErrIntOverflowProto3   = fmt.Errorf("proto: integer overflow") | ||||||
|  | ) | ||||||
							
								
								
									
										334
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/test/faster/vanity.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										334
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/test/faster/vanity.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,334 @@ | |||||||
|  | // Code generated by protoc-gen-gogo. | ||||||
|  | // source: vanity.proto | ||||||
|  | // DO NOT EDIT! | ||||||
|  |  | ||||||
|  | /* | ||||||
|  | 	Package vanity is a generated protocol buffer package. | ||||||
|  |  | ||||||
|  | 	It is generated from these files: | ||||||
|  | 		vanity.proto | ||||||
|  |  | ||||||
|  | 	It has these top-level messages: | ||||||
|  | 		A | ||||||
|  | */ | ||||||
|  | package vanity | ||||||
|  |  | ||||||
|  | import proto "github.com/gogo/protobuf/proto" | ||||||
|  | import fmt "fmt" | ||||||
|  | import math "math" | ||||||
|  |  | ||||||
|  | import io "io" | ||||||
|  | import github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto" | ||||||
|  |  | ||||||
|  | // Reference imports to suppress errors if they are not otherwise used. | ||||||
|  | var _ = proto.Marshal | ||||||
|  | var _ = fmt.Errorf | ||||||
|  | var _ = math.Inf | ||||||
|  |  | ||||||
|  | type A struct { | ||||||
|  | 	Strings string `protobuf:"bytes,1,opt,name=Strings" json:"Strings"` | ||||||
|  | 	Int     int64  `protobuf:"varint,2,req,name=Int" json:"Int"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *A) Reset()         { *m = A{} } | ||||||
|  | func (m *A) String() string { return proto.CompactTextString(m) } | ||||||
|  | func (*A) ProtoMessage()    {} | ||||||
|  |  | ||||||
|  | func (m *A) GetStrings() string { | ||||||
|  | 	if m != nil { | ||||||
|  | 		return m.Strings | ||||||
|  | 	} | ||||||
|  | 	return "" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *A) GetInt() int64 { | ||||||
|  | 	if m != nil { | ||||||
|  | 		return m.Int | ||||||
|  | 	} | ||||||
|  | 	return 0 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func init() { | ||||||
|  | 	proto.RegisterType((*A)(nil), "vanity.A") | ||||||
|  | } | ||||||
|  | func (m *A) Marshal() (data []byte, err error) { | ||||||
|  | 	size := m.Size() | ||||||
|  | 	data = make([]byte, size) | ||||||
|  | 	n, err := m.MarshalTo(data) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	return data[:n], nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *A) MarshalTo(data []byte) (int, error) { | ||||||
|  | 	var i int | ||||||
|  | 	_ = i | ||||||
|  | 	var l int | ||||||
|  | 	_ = l | ||||||
|  | 	data[i] = 0xa | ||||||
|  | 	i++ | ||||||
|  | 	i = encodeVarintVanity(data, i, uint64(len(m.Strings))) | ||||||
|  | 	i += copy(data[i:], m.Strings) | ||||||
|  | 	data[i] = 0x10 | ||||||
|  | 	i++ | ||||||
|  | 	i = encodeVarintVanity(data, i, uint64(m.Int)) | ||||||
|  | 	return i, nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func encodeFixed64Vanity(data []byte, offset int, v uint64) int { | ||||||
|  | 	data[offset] = uint8(v) | ||||||
|  | 	data[offset+1] = uint8(v >> 8) | ||||||
|  | 	data[offset+2] = uint8(v >> 16) | ||||||
|  | 	data[offset+3] = uint8(v >> 24) | ||||||
|  | 	data[offset+4] = uint8(v >> 32) | ||||||
|  | 	data[offset+5] = uint8(v >> 40) | ||||||
|  | 	data[offset+6] = uint8(v >> 48) | ||||||
|  | 	data[offset+7] = uint8(v >> 56) | ||||||
|  | 	return offset + 8 | ||||||
|  | } | ||||||
|  | func encodeFixed32Vanity(data []byte, offset int, v uint32) int { | ||||||
|  | 	data[offset] = uint8(v) | ||||||
|  | 	data[offset+1] = uint8(v >> 8) | ||||||
|  | 	data[offset+2] = uint8(v >> 16) | ||||||
|  | 	data[offset+3] = uint8(v >> 24) | ||||||
|  | 	return offset + 4 | ||||||
|  | } | ||||||
|  | func encodeVarintVanity(data []byte, offset int, v uint64) int { | ||||||
|  | 	for v >= 1<<7 { | ||||||
|  | 		data[offset] = uint8(v&0x7f | 0x80) | ||||||
|  | 		v >>= 7 | ||||||
|  | 		offset++ | ||||||
|  | 	} | ||||||
|  | 	data[offset] = uint8(v) | ||||||
|  | 	return offset + 1 | ||||||
|  | } | ||||||
|  | func (m *A) Size() (n int) { | ||||||
|  | 	var l int | ||||||
|  | 	_ = l | ||||||
|  | 	l = len(m.Strings) | ||||||
|  | 	n += 1 + l + sovVanity(uint64(l)) | ||||||
|  | 	n += 1 + sovVanity(uint64(m.Int)) | ||||||
|  | 	return n | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func sovVanity(x uint64) (n int) { | ||||||
|  | 	for { | ||||||
|  | 		n++ | ||||||
|  | 		x >>= 7 | ||||||
|  | 		if x == 0 { | ||||||
|  | 			break | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return n | ||||||
|  | } | ||||||
|  | func sozVanity(x uint64) (n int) { | ||||||
|  | 	return sovVanity(uint64((x << 1) ^ uint64((int64(x) >> 63)))) | ||||||
|  | } | ||||||
|  | func (m *A) Unmarshal(data []byte) error { | ||||||
|  | 	var hasFields [1]uint64 | ||||||
|  | 	l := len(data) | ||||||
|  | 	iNdEx := 0 | ||||||
|  | 	for iNdEx < l { | ||||||
|  | 		preIndex := iNdEx | ||||||
|  | 		var wire uint64 | ||||||
|  | 		for shift := uint(0); ; shift += 7 { | ||||||
|  | 			if shift >= 64 { | ||||||
|  | 				return ErrIntOverflowVanity | ||||||
|  | 			} | ||||||
|  | 			if iNdEx >= l { | ||||||
|  | 				return io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			b := data[iNdEx] | ||||||
|  | 			iNdEx++ | ||||||
|  | 			wire |= (uint64(b) & 0x7F) << shift | ||||||
|  | 			if b < 0x80 { | ||||||
|  | 				break | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		fieldNum := int32(wire >> 3) | ||||||
|  | 		wireType := int(wire & 0x7) | ||||||
|  | 		if wireType == 4 { | ||||||
|  | 			return fmt.Errorf("proto: A: wiretype end group for non-group") | ||||||
|  | 		} | ||||||
|  | 		if fieldNum <= 0 { | ||||||
|  | 			return fmt.Errorf("proto: A: illegal tag %d (wire type %d)", fieldNum, wire) | ||||||
|  | 		} | ||||||
|  | 		switch fieldNum { | ||||||
|  | 		case 1: | ||||||
|  | 			if wireType != 2 { | ||||||
|  | 				return fmt.Errorf("proto: wrong wireType = %d for field Strings", wireType) | ||||||
|  | 			} | ||||||
|  | 			var stringLen uint64 | ||||||
|  | 			for shift := uint(0); ; shift += 7 { | ||||||
|  | 				if shift >= 64 { | ||||||
|  | 					return ErrIntOverflowVanity | ||||||
|  | 				} | ||||||
|  | 				if iNdEx >= l { | ||||||
|  | 					return io.ErrUnexpectedEOF | ||||||
|  | 				} | ||||||
|  | 				b := data[iNdEx] | ||||||
|  | 				iNdEx++ | ||||||
|  | 				stringLen |= (uint64(b) & 0x7F) << shift | ||||||
|  | 				if b < 0x80 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			intStringLen := int(stringLen) | ||||||
|  | 			if intStringLen < 0 { | ||||||
|  | 				return ErrInvalidLengthVanity | ||||||
|  | 			} | ||||||
|  | 			postIndex := iNdEx + intStringLen | ||||||
|  | 			if postIndex > l { | ||||||
|  | 				return io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			m.Strings = string(data[iNdEx:postIndex]) | ||||||
|  | 			iNdEx = postIndex | ||||||
|  | 		case 2: | ||||||
|  | 			if wireType != 0 { | ||||||
|  | 				return fmt.Errorf("proto: wrong wireType = %d for field Int", wireType) | ||||||
|  | 			} | ||||||
|  | 			m.Int = 0 | ||||||
|  | 			for shift := uint(0); ; shift += 7 { | ||||||
|  | 				if shift >= 64 { | ||||||
|  | 					return ErrIntOverflowVanity | ||||||
|  | 				} | ||||||
|  | 				if iNdEx >= l { | ||||||
|  | 					return io.ErrUnexpectedEOF | ||||||
|  | 				} | ||||||
|  | 				b := data[iNdEx] | ||||||
|  | 				iNdEx++ | ||||||
|  | 				m.Int |= (int64(b) & 0x7F) << shift | ||||||
|  | 				if b < 0x80 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			hasFields[0] |= uint64(0x00000001) | ||||||
|  | 		default: | ||||||
|  | 			iNdEx = preIndex | ||||||
|  | 			skippy, err := skipVanity(data[iNdEx:]) | ||||||
|  | 			if err != nil { | ||||||
|  | 				return err | ||||||
|  | 			} | ||||||
|  | 			if skippy < 0 { | ||||||
|  | 				return ErrInvalidLengthVanity | ||||||
|  | 			} | ||||||
|  | 			if (iNdEx + skippy) > l { | ||||||
|  | 				return io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			iNdEx += skippy | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	if hasFields[0]&uint64(0x00000001) == 0 { | ||||||
|  | 		return github_com_gogo_protobuf_proto.NewRequiredNotSetError("Int") | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if iNdEx > l { | ||||||
|  | 		return io.ErrUnexpectedEOF | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  | func skipVanity(data []byte) (n int, err error) { | ||||||
|  | 	l := len(data) | ||||||
|  | 	iNdEx := 0 | ||||||
|  | 	for iNdEx < l { | ||||||
|  | 		var wire uint64 | ||||||
|  | 		for shift := uint(0); ; shift += 7 { | ||||||
|  | 			if shift >= 64 { | ||||||
|  | 				return 0, ErrIntOverflowVanity | ||||||
|  | 			} | ||||||
|  | 			if iNdEx >= l { | ||||||
|  | 				return 0, io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			b := data[iNdEx] | ||||||
|  | 			iNdEx++ | ||||||
|  | 			wire |= (uint64(b) & 0x7F) << shift | ||||||
|  | 			if b < 0x80 { | ||||||
|  | 				break | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		wireType := int(wire & 0x7) | ||||||
|  | 		switch wireType { | ||||||
|  | 		case 0: | ||||||
|  | 			for shift := uint(0); ; shift += 7 { | ||||||
|  | 				if shift >= 64 { | ||||||
|  | 					return 0, ErrIntOverflowVanity | ||||||
|  | 				} | ||||||
|  | 				if iNdEx >= l { | ||||||
|  | 					return 0, io.ErrUnexpectedEOF | ||||||
|  | 				} | ||||||
|  | 				iNdEx++ | ||||||
|  | 				if data[iNdEx-1] < 0x80 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 1: | ||||||
|  | 			iNdEx += 8 | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 2: | ||||||
|  | 			var length int | ||||||
|  | 			for shift := uint(0); ; shift += 7 { | ||||||
|  | 				if shift >= 64 { | ||||||
|  | 					return 0, ErrIntOverflowVanity | ||||||
|  | 				} | ||||||
|  | 				if iNdEx >= l { | ||||||
|  | 					return 0, io.ErrUnexpectedEOF | ||||||
|  | 				} | ||||||
|  | 				b := data[iNdEx] | ||||||
|  | 				iNdEx++ | ||||||
|  | 				length |= (int(b) & 0x7F) << shift | ||||||
|  | 				if b < 0x80 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			iNdEx += length | ||||||
|  | 			if length < 0 { | ||||||
|  | 				return 0, ErrInvalidLengthVanity | ||||||
|  | 			} | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 3: | ||||||
|  | 			for { | ||||||
|  | 				var innerWire uint64 | ||||||
|  | 				var start int = iNdEx | ||||||
|  | 				for shift := uint(0); ; shift += 7 { | ||||||
|  | 					if shift >= 64 { | ||||||
|  | 						return 0, ErrIntOverflowVanity | ||||||
|  | 					} | ||||||
|  | 					if iNdEx >= l { | ||||||
|  | 						return 0, io.ErrUnexpectedEOF | ||||||
|  | 					} | ||||||
|  | 					b := data[iNdEx] | ||||||
|  | 					iNdEx++ | ||||||
|  | 					innerWire |= (uint64(b) & 0x7F) << shift | ||||||
|  | 					if b < 0x80 { | ||||||
|  | 						break | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 				innerWireType := int(innerWire & 0x7) | ||||||
|  | 				if innerWireType == 4 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 				next, err := skipVanity(data[start:]) | ||||||
|  | 				if err != nil { | ||||||
|  | 					return 0, err | ||||||
|  | 				} | ||||||
|  | 				iNdEx = start + next | ||||||
|  | 			} | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 4: | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 5: | ||||||
|  | 			iNdEx += 4 | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		default: | ||||||
|  | 			return 0, fmt.Errorf("proto: illegal wireType %d", wireType) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	panic("unreachable") | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var ( | ||||||
|  | 	ErrInvalidLengthVanity = fmt.Errorf("proto: negative length found during unmarshaling") | ||||||
|  | 	ErrIntOverflowVanity   = fmt.Errorf("proto: integer overflow") | ||||||
|  | ) | ||||||
							
								
								
									
										1
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/test/gofast/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/test/gofast/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | |||||||
|  | *.pb.go | ||||||
							
								
								
									
										37
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/test/gogovanity.proto
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/test/gogovanity.proto
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | |||||||
|  | // Copyright (c) 2015, Vastech SA (PTY) LTD. All rights reserved. | ||||||
|  | // http://github.com/gogo/protobuf/gogoproto | ||||||
|  | // | ||||||
|  | // 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. | ||||||
|  | // | ||||||
|  | // 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. | ||||||
|  |  | ||||||
|  | syntax = "proto2"; | ||||||
|  |  | ||||||
|  | package vanity; | ||||||
|  |  | ||||||
|  | import "github.com/gogo/protobuf/gogoproto/gogo.proto"; | ||||||
|  |  | ||||||
|  | message B { | ||||||
|  | 	optional string String = 1 [(gogoproto.nullable) = true]; | ||||||
|  | 	optional int64 Int64 = 2; | ||||||
|  | 	optional int32 Int32 = 3 [default = 1234]; | ||||||
|  | } | ||||||
							
								
								
									
										33
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/test/proto3.proto
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/test/proto3.proto
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,33 @@ | |||||||
|  | // Copyright (c) 2015, Vastech SA (PTY) LTD. All rights reserved. | ||||||
|  | // http://github.com/gogo/protobuf/gogoproto | ||||||
|  | // | ||||||
|  | // 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. | ||||||
|  | // | ||||||
|  | // 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. | ||||||
|  |  | ||||||
|  | syntax = "proto3"; | ||||||
|  |  | ||||||
|  | package vanity; | ||||||
|  |  | ||||||
|  | message Aproto3 { | ||||||
|  |   string B = 1; | ||||||
|  | } | ||||||
							
								
								
									
										486
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/test/slick/gogovanity.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										486
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/test/slick/gogovanity.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,486 @@ | |||||||
|  | // Code generated by protoc-gen-gogo. | ||||||
|  | // source: gogovanity.proto | ||||||
|  | // DO NOT EDIT! | ||||||
|  |  | ||||||
|  | /* | ||||||
|  | 	Package vanity is a generated protocol buffer package. | ||||||
|  |  | ||||||
|  | 	It is generated from these files: | ||||||
|  | 		gogovanity.proto | ||||||
|  |  | ||||||
|  | 	It has these top-level messages: | ||||||
|  | 		B | ||||||
|  | */ | ||||||
|  | package vanity | ||||||
|  |  | ||||||
|  | import proto "github.com/gogo/protobuf/proto" | ||||||
|  | import fmt "fmt" | ||||||
|  | import math "math" | ||||||
|  | import _ "github.com/gogo/protobuf/gogoproto" | ||||||
|  |  | ||||||
|  | import strings "strings" | ||||||
|  | import github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto" | ||||||
|  | import sort "sort" | ||||||
|  | import strconv "strconv" | ||||||
|  | import reflect "reflect" | ||||||
|  |  | ||||||
|  | import io "io" | ||||||
|  |  | ||||||
|  | // Reference imports to suppress errors if they are not otherwise used. | ||||||
|  | var _ = proto.Marshal | ||||||
|  | var _ = fmt.Errorf | ||||||
|  | var _ = math.Inf | ||||||
|  |  | ||||||
|  | type B struct { | ||||||
|  | 	String_ *string `protobuf:"bytes,1,opt,name=String" json:"String,omitempty"` | ||||||
|  | 	Int64   int64   `protobuf:"varint,2,opt,name=Int64" json:"Int64"` | ||||||
|  | 	Int32   *int32  `protobuf:"varint,3,opt,name=Int32,def=1234" json:"Int32,omitempty"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *B) Reset()      { *m = B{} } | ||||||
|  | func (*B) ProtoMessage() {} | ||||||
|  |  | ||||||
|  | const Default_B_Int32 int32 = 1234 | ||||||
|  |  | ||||||
|  | func (m *B) GetString_() string { | ||||||
|  | 	if m != nil && m.String_ != nil { | ||||||
|  | 		return *m.String_ | ||||||
|  | 	} | ||||||
|  | 	return "" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *B) GetInt64() int64 { | ||||||
|  | 	if m != nil { | ||||||
|  | 		return m.Int64 | ||||||
|  | 	} | ||||||
|  | 	return 0 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *B) GetInt32() int32 { | ||||||
|  | 	if m != nil && m.Int32 != nil { | ||||||
|  | 		return *m.Int32 | ||||||
|  | 	} | ||||||
|  | 	return Default_B_Int32 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func init() { | ||||||
|  | 	proto.RegisterType((*B)(nil), "vanity.B") | ||||||
|  | } | ||||||
|  | func (this *B) Equal(that interface{}) bool { | ||||||
|  | 	if that == nil { | ||||||
|  | 		if this == nil { | ||||||
|  | 			return true | ||||||
|  | 		} | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	that1, ok := that.(*B) | ||||||
|  | 	if !ok { | ||||||
|  | 		that2, ok := that.(B) | ||||||
|  | 		if ok { | ||||||
|  | 			that1 = &that2 | ||||||
|  | 		} else { | ||||||
|  | 			return false | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	if that1 == nil { | ||||||
|  | 		if this == nil { | ||||||
|  | 			return true | ||||||
|  | 		} | ||||||
|  | 		return false | ||||||
|  | 	} else if this == nil { | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | 	if this.String_ != nil && that1.String_ != nil { | ||||||
|  | 		if *this.String_ != *that1.String_ { | ||||||
|  | 			return false | ||||||
|  | 		} | ||||||
|  | 	} else if this.String_ != nil { | ||||||
|  | 		return false | ||||||
|  | 	} else if that1.String_ != nil { | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | 	if this.Int64 != that1.Int64 { | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | 	if this.Int32 != nil && that1.Int32 != nil { | ||||||
|  | 		if *this.Int32 != *that1.Int32 { | ||||||
|  | 			return false | ||||||
|  | 		} | ||||||
|  | 	} else if this.Int32 != nil { | ||||||
|  | 		return false | ||||||
|  | 	} else if that1.Int32 != nil { | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | 	return true | ||||||
|  | } | ||||||
|  | func (this *B) GoString() string { | ||||||
|  | 	if this == nil { | ||||||
|  | 		return "nil" | ||||||
|  | 	} | ||||||
|  | 	s := make([]string, 0, 7) | ||||||
|  | 	s = append(s, "&vanity.B{") | ||||||
|  | 	if this.String_ != nil { | ||||||
|  | 		s = append(s, "String_: "+valueToGoStringGogovanity(this.String_, "string")+",\n") | ||||||
|  | 	} | ||||||
|  | 	s = append(s, "Int64: "+fmt.Sprintf("%#v", this.Int64)+",\n") | ||||||
|  | 	if this.Int32 != nil { | ||||||
|  | 		s = append(s, "Int32: "+valueToGoStringGogovanity(this.Int32, "int32")+",\n") | ||||||
|  | 	} | ||||||
|  | 	s = append(s, "}") | ||||||
|  | 	return strings.Join(s, "") | ||||||
|  | } | ||||||
|  | func valueToGoStringGogovanity(v interface{}, typ string) string { | ||||||
|  | 	rv := reflect.ValueOf(v) | ||||||
|  | 	if rv.IsNil() { | ||||||
|  | 		return "nil" | ||||||
|  | 	} | ||||||
|  | 	pv := reflect.Indirect(rv).Interface() | ||||||
|  | 	return fmt.Sprintf("func(v %v) *%v { return &v } ( %#v )", typ, typ, pv) | ||||||
|  | } | ||||||
|  | func extensionToGoStringGogovanity(e map[int32]github_com_gogo_protobuf_proto.Extension) string { | ||||||
|  | 	if e == nil { | ||||||
|  | 		return "nil" | ||||||
|  | 	} | ||||||
|  | 	s := "map[int32]proto.Extension{" | ||||||
|  | 	keys := make([]int, 0, len(e)) | ||||||
|  | 	for k := range e { | ||||||
|  | 		keys = append(keys, int(k)) | ||||||
|  | 	} | ||||||
|  | 	sort.Ints(keys) | ||||||
|  | 	ss := []string{} | ||||||
|  | 	for _, k := range keys { | ||||||
|  | 		ss = append(ss, strconv.Itoa(k)+": "+e[int32(k)].GoString()) | ||||||
|  | 	} | ||||||
|  | 	s += strings.Join(ss, ",") + "}" | ||||||
|  | 	return s | ||||||
|  | } | ||||||
|  | func (m *B) Marshal() (data []byte, err error) { | ||||||
|  | 	size := m.Size() | ||||||
|  | 	data = make([]byte, size) | ||||||
|  | 	n, err := m.MarshalTo(data) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	return data[:n], nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *B) MarshalTo(data []byte) (int, error) { | ||||||
|  | 	var i int | ||||||
|  | 	_ = i | ||||||
|  | 	var l int | ||||||
|  | 	_ = l | ||||||
|  | 	if m.String_ != nil { | ||||||
|  | 		data[i] = 0xa | ||||||
|  | 		i++ | ||||||
|  | 		i = encodeVarintGogovanity(data, i, uint64(len(*m.String_))) | ||||||
|  | 		i += copy(data[i:], *m.String_) | ||||||
|  | 	} | ||||||
|  | 	data[i] = 0x10 | ||||||
|  | 	i++ | ||||||
|  | 	i = encodeVarintGogovanity(data, i, uint64(m.Int64)) | ||||||
|  | 	if m.Int32 != nil { | ||||||
|  | 		data[i] = 0x18 | ||||||
|  | 		i++ | ||||||
|  | 		i = encodeVarintGogovanity(data, i, uint64(*m.Int32)) | ||||||
|  | 	} | ||||||
|  | 	return i, nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func encodeFixed64Gogovanity(data []byte, offset int, v uint64) int { | ||||||
|  | 	data[offset] = uint8(v) | ||||||
|  | 	data[offset+1] = uint8(v >> 8) | ||||||
|  | 	data[offset+2] = uint8(v >> 16) | ||||||
|  | 	data[offset+3] = uint8(v >> 24) | ||||||
|  | 	data[offset+4] = uint8(v >> 32) | ||||||
|  | 	data[offset+5] = uint8(v >> 40) | ||||||
|  | 	data[offset+6] = uint8(v >> 48) | ||||||
|  | 	data[offset+7] = uint8(v >> 56) | ||||||
|  | 	return offset + 8 | ||||||
|  | } | ||||||
|  | func encodeFixed32Gogovanity(data []byte, offset int, v uint32) int { | ||||||
|  | 	data[offset] = uint8(v) | ||||||
|  | 	data[offset+1] = uint8(v >> 8) | ||||||
|  | 	data[offset+2] = uint8(v >> 16) | ||||||
|  | 	data[offset+3] = uint8(v >> 24) | ||||||
|  | 	return offset + 4 | ||||||
|  | } | ||||||
|  | func encodeVarintGogovanity(data []byte, offset int, v uint64) int { | ||||||
|  | 	for v >= 1<<7 { | ||||||
|  | 		data[offset] = uint8(v&0x7f | 0x80) | ||||||
|  | 		v >>= 7 | ||||||
|  | 		offset++ | ||||||
|  | 	} | ||||||
|  | 	data[offset] = uint8(v) | ||||||
|  | 	return offset + 1 | ||||||
|  | } | ||||||
|  | func (m *B) Size() (n int) { | ||||||
|  | 	var l int | ||||||
|  | 	_ = l | ||||||
|  | 	if m.String_ != nil { | ||||||
|  | 		l = len(*m.String_) | ||||||
|  | 		n += 1 + l + sovGogovanity(uint64(l)) | ||||||
|  | 	} | ||||||
|  | 	n += 1 + sovGogovanity(uint64(m.Int64)) | ||||||
|  | 	if m.Int32 != nil { | ||||||
|  | 		n += 1 + sovGogovanity(uint64(*m.Int32)) | ||||||
|  | 	} | ||||||
|  | 	return n | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func sovGogovanity(x uint64) (n int) { | ||||||
|  | 	for { | ||||||
|  | 		n++ | ||||||
|  | 		x >>= 7 | ||||||
|  | 		if x == 0 { | ||||||
|  | 			break | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return n | ||||||
|  | } | ||||||
|  | func sozGogovanity(x uint64) (n int) { | ||||||
|  | 	return sovGogovanity(uint64((x << 1) ^ uint64((int64(x) >> 63)))) | ||||||
|  | } | ||||||
|  | func (this *B) String() string { | ||||||
|  | 	if this == nil { | ||||||
|  | 		return "nil" | ||||||
|  | 	} | ||||||
|  | 	s := strings.Join([]string{`&B{`, | ||||||
|  | 		`String_:` + valueToStringGogovanity(this.String_) + `,`, | ||||||
|  | 		`Int64:` + fmt.Sprintf("%v", this.Int64) + `,`, | ||||||
|  | 		`Int32:` + valueToStringGogovanity(this.Int32) + `,`, | ||||||
|  | 		`}`, | ||||||
|  | 	}, "") | ||||||
|  | 	return s | ||||||
|  | } | ||||||
|  | func valueToStringGogovanity(v interface{}) string { | ||||||
|  | 	rv := reflect.ValueOf(v) | ||||||
|  | 	if rv.IsNil() { | ||||||
|  | 		return "nil" | ||||||
|  | 	} | ||||||
|  | 	pv := reflect.Indirect(rv).Interface() | ||||||
|  | 	return fmt.Sprintf("*%v", pv) | ||||||
|  | } | ||||||
|  | func (m *B) Unmarshal(data []byte) error { | ||||||
|  | 	l := len(data) | ||||||
|  | 	iNdEx := 0 | ||||||
|  | 	for iNdEx < l { | ||||||
|  | 		preIndex := iNdEx | ||||||
|  | 		var wire uint64 | ||||||
|  | 		for shift := uint(0); ; shift += 7 { | ||||||
|  | 			if shift >= 64 { | ||||||
|  | 				return ErrIntOverflowGogovanity | ||||||
|  | 			} | ||||||
|  | 			if iNdEx >= l { | ||||||
|  | 				return io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			b := data[iNdEx] | ||||||
|  | 			iNdEx++ | ||||||
|  | 			wire |= (uint64(b) & 0x7F) << shift | ||||||
|  | 			if b < 0x80 { | ||||||
|  | 				break | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		fieldNum := int32(wire >> 3) | ||||||
|  | 		wireType := int(wire & 0x7) | ||||||
|  | 		if wireType == 4 { | ||||||
|  | 			return fmt.Errorf("proto: B: wiretype end group for non-group") | ||||||
|  | 		} | ||||||
|  | 		if fieldNum <= 0 { | ||||||
|  | 			return fmt.Errorf("proto: B: illegal tag %d (wire type %d)", fieldNum, wire) | ||||||
|  | 		} | ||||||
|  | 		switch fieldNum { | ||||||
|  | 		case 1: | ||||||
|  | 			if wireType != 2 { | ||||||
|  | 				return fmt.Errorf("proto: wrong wireType = %d for field String_", wireType) | ||||||
|  | 			} | ||||||
|  | 			var stringLen uint64 | ||||||
|  | 			for shift := uint(0); ; shift += 7 { | ||||||
|  | 				if shift >= 64 { | ||||||
|  | 					return ErrIntOverflowGogovanity | ||||||
|  | 				} | ||||||
|  | 				if iNdEx >= l { | ||||||
|  | 					return io.ErrUnexpectedEOF | ||||||
|  | 				} | ||||||
|  | 				b := data[iNdEx] | ||||||
|  | 				iNdEx++ | ||||||
|  | 				stringLen |= (uint64(b) & 0x7F) << shift | ||||||
|  | 				if b < 0x80 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			intStringLen := int(stringLen) | ||||||
|  | 			if intStringLen < 0 { | ||||||
|  | 				return ErrInvalidLengthGogovanity | ||||||
|  | 			} | ||||||
|  | 			postIndex := iNdEx + intStringLen | ||||||
|  | 			if postIndex > l { | ||||||
|  | 				return io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			s := string(data[iNdEx:postIndex]) | ||||||
|  | 			m.String_ = &s | ||||||
|  | 			iNdEx = postIndex | ||||||
|  | 		case 2: | ||||||
|  | 			if wireType != 0 { | ||||||
|  | 				return fmt.Errorf("proto: wrong wireType = %d for field Int64", wireType) | ||||||
|  | 			} | ||||||
|  | 			m.Int64 = 0 | ||||||
|  | 			for shift := uint(0); ; shift += 7 { | ||||||
|  | 				if shift >= 64 { | ||||||
|  | 					return ErrIntOverflowGogovanity | ||||||
|  | 				} | ||||||
|  | 				if iNdEx >= l { | ||||||
|  | 					return io.ErrUnexpectedEOF | ||||||
|  | 				} | ||||||
|  | 				b := data[iNdEx] | ||||||
|  | 				iNdEx++ | ||||||
|  | 				m.Int64 |= (int64(b) & 0x7F) << shift | ||||||
|  | 				if b < 0x80 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		case 3: | ||||||
|  | 			if wireType != 0 { | ||||||
|  | 				return fmt.Errorf("proto: wrong wireType = %d for field Int32", wireType) | ||||||
|  | 			} | ||||||
|  | 			var v int32 | ||||||
|  | 			for shift := uint(0); ; shift += 7 { | ||||||
|  | 				if shift >= 64 { | ||||||
|  | 					return ErrIntOverflowGogovanity | ||||||
|  | 				} | ||||||
|  | 				if iNdEx >= l { | ||||||
|  | 					return io.ErrUnexpectedEOF | ||||||
|  | 				} | ||||||
|  | 				b := data[iNdEx] | ||||||
|  | 				iNdEx++ | ||||||
|  | 				v |= (int32(b) & 0x7F) << shift | ||||||
|  | 				if b < 0x80 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			m.Int32 = &v | ||||||
|  | 		default: | ||||||
|  | 			iNdEx = preIndex | ||||||
|  | 			skippy, err := skipGogovanity(data[iNdEx:]) | ||||||
|  | 			if err != nil { | ||||||
|  | 				return err | ||||||
|  | 			} | ||||||
|  | 			if skippy < 0 { | ||||||
|  | 				return ErrInvalidLengthGogovanity | ||||||
|  | 			} | ||||||
|  | 			if (iNdEx + skippy) > l { | ||||||
|  | 				return io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			iNdEx += skippy | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if iNdEx > l { | ||||||
|  | 		return io.ErrUnexpectedEOF | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  | func skipGogovanity(data []byte) (n int, err error) { | ||||||
|  | 	l := len(data) | ||||||
|  | 	iNdEx := 0 | ||||||
|  | 	for iNdEx < l { | ||||||
|  | 		var wire uint64 | ||||||
|  | 		for shift := uint(0); ; shift += 7 { | ||||||
|  | 			if shift >= 64 { | ||||||
|  | 				return 0, ErrIntOverflowGogovanity | ||||||
|  | 			} | ||||||
|  | 			if iNdEx >= l { | ||||||
|  | 				return 0, io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			b := data[iNdEx] | ||||||
|  | 			iNdEx++ | ||||||
|  | 			wire |= (uint64(b) & 0x7F) << shift | ||||||
|  | 			if b < 0x80 { | ||||||
|  | 				break | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		wireType := int(wire & 0x7) | ||||||
|  | 		switch wireType { | ||||||
|  | 		case 0: | ||||||
|  | 			for shift := uint(0); ; shift += 7 { | ||||||
|  | 				if shift >= 64 { | ||||||
|  | 					return 0, ErrIntOverflowGogovanity | ||||||
|  | 				} | ||||||
|  | 				if iNdEx >= l { | ||||||
|  | 					return 0, io.ErrUnexpectedEOF | ||||||
|  | 				} | ||||||
|  | 				iNdEx++ | ||||||
|  | 				if data[iNdEx-1] < 0x80 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 1: | ||||||
|  | 			iNdEx += 8 | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 2: | ||||||
|  | 			var length int | ||||||
|  | 			for shift := uint(0); ; shift += 7 { | ||||||
|  | 				if shift >= 64 { | ||||||
|  | 					return 0, ErrIntOverflowGogovanity | ||||||
|  | 				} | ||||||
|  | 				if iNdEx >= l { | ||||||
|  | 					return 0, io.ErrUnexpectedEOF | ||||||
|  | 				} | ||||||
|  | 				b := data[iNdEx] | ||||||
|  | 				iNdEx++ | ||||||
|  | 				length |= (int(b) & 0x7F) << shift | ||||||
|  | 				if b < 0x80 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			iNdEx += length | ||||||
|  | 			if length < 0 { | ||||||
|  | 				return 0, ErrInvalidLengthGogovanity | ||||||
|  | 			} | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 3: | ||||||
|  | 			for { | ||||||
|  | 				var innerWire uint64 | ||||||
|  | 				var start int = iNdEx | ||||||
|  | 				for shift := uint(0); ; shift += 7 { | ||||||
|  | 					if shift >= 64 { | ||||||
|  | 						return 0, ErrIntOverflowGogovanity | ||||||
|  | 					} | ||||||
|  | 					if iNdEx >= l { | ||||||
|  | 						return 0, io.ErrUnexpectedEOF | ||||||
|  | 					} | ||||||
|  | 					b := data[iNdEx] | ||||||
|  | 					iNdEx++ | ||||||
|  | 					innerWire |= (uint64(b) & 0x7F) << shift | ||||||
|  | 					if b < 0x80 { | ||||||
|  | 						break | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 				innerWireType := int(innerWire & 0x7) | ||||||
|  | 				if innerWireType == 4 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 				next, err := skipGogovanity(data[start:]) | ||||||
|  | 				if err != nil { | ||||||
|  | 					return 0, err | ||||||
|  | 				} | ||||||
|  | 				iNdEx = start + next | ||||||
|  | 			} | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 4: | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 5: | ||||||
|  | 			iNdEx += 4 | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		default: | ||||||
|  | 			return 0, fmt.Errorf("proto: illegal wireType %d", wireType) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	panic("unreachable") | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var ( | ||||||
|  | 	ErrInvalidLengthGogovanity = fmt.Errorf("proto: negative length found during unmarshaling") | ||||||
|  | 	ErrIntOverflowGogovanity   = fmt.Errorf("proto: integer overflow") | ||||||
|  | ) | ||||||
							
								
								
									
										382
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/test/slick/proto3.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										382
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/test/slick/proto3.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,382 @@ | |||||||
|  | // Code generated by protoc-gen-gogo. | ||||||
|  | // source: proto3.proto | ||||||
|  | // DO NOT EDIT! | ||||||
|  |  | ||||||
|  | /* | ||||||
|  | Package vanity is a generated protocol buffer package. | ||||||
|  |  | ||||||
|  | It is generated from these files: | ||||||
|  | 	proto3.proto | ||||||
|  |  | ||||||
|  | It has these top-level messages: | ||||||
|  | 	Aproto3 | ||||||
|  | */ | ||||||
|  | package vanity | ||||||
|  |  | ||||||
|  | import proto "github.com/gogo/protobuf/proto" | ||||||
|  | import fmt "fmt" | ||||||
|  | import math "math" | ||||||
|  |  | ||||||
|  | import strings "strings" | ||||||
|  | import github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto" | ||||||
|  | import sort "sort" | ||||||
|  | import strconv "strconv" | ||||||
|  | import reflect "reflect" | ||||||
|  |  | ||||||
|  | import io "io" | ||||||
|  |  | ||||||
|  | // Reference imports to suppress errors if they are not otherwise used. | ||||||
|  | var _ = proto.Marshal | ||||||
|  | var _ = fmt.Errorf | ||||||
|  | var _ = math.Inf | ||||||
|  |  | ||||||
|  | type Aproto3 struct { | ||||||
|  | 	B string `protobuf:"bytes,1,opt,name=B,proto3" json:"B,omitempty"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *Aproto3) Reset()      { *m = Aproto3{} } | ||||||
|  | func (*Aproto3) ProtoMessage() {} | ||||||
|  |  | ||||||
|  | func init() { | ||||||
|  | 	proto.RegisterType((*Aproto3)(nil), "vanity.Aproto3") | ||||||
|  | } | ||||||
|  | func (this *Aproto3) Equal(that interface{}) bool { | ||||||
|  | 	if that == nil { | ||||||
|  | 		if this == nil { | ||||||
|  | 			return true | ||||||
|  | 		} | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	that1, ok := that.(*Aproto3) | ||||||
|  | 	if !ok { | ||||||
|  | 		that2, ok := that.(Aproto3) | ||||||
|  | 		if ok { | ||||||
|  | 			that1 = &that2 | ||||||
|  | 		} else { | ||||||
|  | 			return false | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	if that1 == nil { | ||||||
|  | 		if this == nil { | ||||||
|  | 			return true | ||||||
|  | 		} | ||||||
|  | 		return false | ||||||
|  | 	} else if this == nil { | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | 	if this.B != that1.B { | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | 	return true | ||||||
|  | } | ||||||
|  | func (this *Aproto3) GoString() string { | ||||||
|  | 	if this == nil { | ||||||
|  | 		return "nil" | ||||||
|  | 	} | ||||||
|  | 	s := make([]string, 0, 5) | ||||||
|  | 	s = append(s, "&vanity.Aproto3{") | ||||||
|  | 	s = append(s, "B: "+fmt.Sprintf("%#v", this.B)+",\n") | ||||||
|  | 	s = append(s, "}") | ||||||
|  | 	return strings.Join(s, "") | ||||||
|  | } | ||||||
|  | func valueToGoStringProto3(v interface{}, typ string) string { | ||||||
|  | 	rv := reflect.ValueOf(v) | ||||||
|  | 	if rv.IsNil() { | ||||||
|  | 		return "nil" | ||||||
|  | 	} | ||||||
|  | 	pv := reflect.Indirect(rv).Interface() | ||||||
|  | 	return fmt.Sprintf("func(v %v) *%v { return &v } ( %#v )", typ, typ, pv) | ||||||
|  | } | ||||||
|  | func extensionToGoStringProto3(e map[int32]github_com_gogo_protobuf_proto.Extension) string { | ||||||
|  | 	if e == nil { | ||||||
|  | 		return "nil" | ||||||
|  | 	} | ||||||
|  | 	s := "map[int32]proto.Extension{" | ||||||
|  | 	keys := make([]int, 0, len(e)) | ||||||
|  | 	for k := range e { | ||||||
|  | 		keys = append(keys, int(k)) | ||||||
|  | 	} | ||||||
|  | 	sort.Ints(keys) | ||||||
|  | 	ss := []string{} | ||||||
|  | 	for _, k := range keys { | ||||||
|  | 		ss = append(ss, strconv.Itoa(k)+": "+e[int32(k)].GoString()) | ||||||
|  | 	} | ||||||
|  | 	s += strings.Join(ss, ",") + "}" | ||||||
|  | 	return s | ||||||
|  | } | ||||||
|  | func (m *Aproto3) Marshal() (data []byte, err error) { | ||||||
|  | 	size := m.Size() | ||||||
|  | 	data = make([]byte, size) | ||||||
|  | 	n, err := m.MarshalTo(data) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	return data[:n], nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *Aproto3) MarshalTo(data []byte) (int, error) { | ||||||
|  | 	var i int | ||||||
|  | 	_ = i | ||||||
|  | 	var l int | ||||||
|  | 	_ = l | ||||||
|  | 	if len(m.B) > 0 { | ||||||
|  | 		data[i] = 0xa | ||||||
|  | 		i++ | ||||||
|  | 		i = encodeVarintProto3(data, i, uint64(len(m.B))) | ||||||
|  | 		i += copy(data[i:], m.B) | ||||||
|  | 	} | ||||||
|  | 	return i, nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func encodeFixed64Proto3(data []byte, offset int, v uint64) int { | ||||||
|  | 	data[offset] = uint8(v) | ||||||
|  | 	data[offset+1] = uint8(v >> 8) | ||||||
|  | 	data[offset+2] = uint8(v >> 16) | ||||||
|  | 	data[offset+3] = uint8(v >> 24) | ||||||
|  | 	data[offset+4] = uint8(v >> 32) | ||||||
|  | 	data[offset+5] = uint8(v >> 40) | ||||||
|  | 	data[offset+6] = uint8(v >> 48) | ||||||
|  | 	data[offset+7] = uint8(v >> 56) | ||||||
|  | 	return offset + 8 | ||||||
|  | } | ||||||
|  | func encodeFixed32Proto3(data []byte, offset int, v uint32) int { | ||||||
|  | 	data[offset] = uint8(v) | ||||||
|  | 	data[offset+1] = uint8(v >> 8) | ||||||
|  | 	data[offset+2] = uint8(v >> 16) | ||||||
|  | 	data[offset+3] = uint8(v >> 24) | ||||||
|  | 	return offset + 4 | ||||||
|  | } | ||||||
|  | func encodeVarintProto3(data []byte, offset int, v uint64) int { | ||||||
|  | 	for v >= 1<<7 { | ||||||
|  | 		data[offset] = uint8(v&0x7f | 0x80) | ||||||
|  | 		v >>= 7 | ||||||
|  | 		offset++ | ||||||
|  | 	} | ||||||
|  | 	data[offset] = uint8(v) | ||||||
|  | 	return offset + 1 | ||||||
|  | } | ||||||
|  | func (m *Aproto3) Size() (n int) { | ||||||
|  | 	var l int | ||||||
|  | 	_ = l | ||||||
|  | 	l = len(m.B) | ||||||
|  | 	if l > 0 { | ||||||
|  | 		n += 1 + l + sovProto3(uint64(l)) | ||||||
|  | 	} | ||||||
|  | 	return n | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func sovProto3(x uint64) (n int) { | ||||||
|  | 	for { | ||||||
|  | 		n++ | ||||||
|  | 		x >>= 7 | ||||||
|  | 		if x == 0 { | ||||||
|  | 			break | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return n | ||||||
|  | } | ||||||
|  | func sozProto3(x uint64) (n int) { | ||||||
|  | 	return sovProto3(uint64((x << 1) ^ uint64((int64(x) >> 63)))) | ||||||
|  | } | ||||||
|  | func (this *Aproto3) String() string { | ||||||
|  | 	if this == nil { | ||||||
|  | 		return "nil" | ||||||
|  | 	} | ||||||
|  | 	s := strings.Join([]string{`&Aproto3{`, | ||||||
|  | 		`B:` + fmt.Sprintf("%v", this.B) + `,`, | ||||||
|  | 		`}`, | ||||||
|  | 	}, "") | ||||||
|  | 	return s | ||||||
|  | } | ||||||
|  | func valueToStringProto3(v interface{}) string { | ||||||
|  | 	rv := reflect.ValueOf(v) | ||||||
|  | 	if rv.IsNil() { | ||||||
|  | 		return "nil" | ||||||
|  | 	} | ||||||
|  | 	pv := reflect.Indirect(rv).Interface() | ||||||
|  | 	return fmt.Sprintf("*%v", pv) | ||||||
|  | } | ||||||
|  | func (m *Aproto3) Unmarshal(data []byte) error { | ||||||
|  | 	l := len(data) | ||||||
|  | 	iNdEx := 0 | ||||||
|  | 	for iNdEx < l { | ||||||
|  | 		preIndex := iNdEx | ||||||
|  | 		var wire uint64 | ||||||
|  | 		for shift := uint(0); ; shift += 7 { | ||||||
|  | 			if shift >= 64 { | ||||||
|  | 				return ErrIntOverflowProto3 | ||||||
|  | 			} | ||||||
|  | 			if iNdEx >= l { | ||||||
|  | 				return io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			b := data[iNdEx] | ||||||
|  | 			iNdEx++ | ||||||
|  | 			wire |= (uint64(b) & 0x7F) << shift | ||||||
|  | 			if b < 0x80 { | ||||||
|  | 				break | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		fieldNum := int32(wire >> 3) | ||||||
|  | 		wireType := int(wire & 0x7) | ||||||
|  | 		if wireType == 4 { | ||||||
|  | 			return fmt.Errorf("proto: Aproto3: wiretype end group for non-group") | ||||||
|  | 		} | ||||||
|  | 		if fieldNum <= 0 { | ||||||
|  | 			return fmt.Errorf("proto: Aproto3: illegal tag %d (wire type %d)", fieldNum, wire) | ||||||
|  | 		} | ||||||
|  | 		switch fieldNum { | ||||||
|  | 		case 1: | ||||||
|  | 			if wireType != 2 { | ||||||
|  | 				return fmt.Errorf("proto: wrong wireType = %d for field B", wireType) | ||||||
|  | 			} | ||||||
|  | 			var stringLen uint64 | ||||||
|  | 			for shift := uint(0); ; shift += 7 { | ||||||
|  | 				if shift >= 64 { | ||||||
|  | 					return ErrIntOverflowProto3 | ||||||
|  | 				} | ||||||
|  | 				if iNdEx >= l { | ||||||
|  | 					return io.ErrUnexpectedEOF | ||||||
|  | 				} | ||||||
|  | 				b := data[iNdEx] | ||||||
|  | 				iNdEx++ | ||||||
|  | 				stringLen |= (uint64(b) & 0x7F) << shift | ||||||
|  | 				if b < 0x80 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			intStringLen := int(stringLen) | ||||||
|  | 			if intStringLen < 0 { | ||||||
|  | 				return ErrInvalidLengthProto3 | ||||||
|  | 			} | ||||||
|  | 			postIndex := iNdEx + intStringLen | ||||||
|  | 			if postIndex > l { | ||||||
|  | 				return io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			m.B = string(data[iNdEx:postIndex]) | ||||||
|  | 			iNdEx = postIndex | ||||||
|  | 		default: | ||||||
|  | 			iNdEx = preIndex | ||||||
|  | 			skippy, err := skipProto3(data[iNdEx:]) | ||||||
|  | 			if err != nil { | ||||||
|  | 				return err | ||||||
|  | 			} | ||||||
|  | 			if skippy < 0 { | ||||||
|  | 				return ErrInvalidLengthProto3 | ||||||
|  | 			} | ||||||
|  | 			if (iNdEx + skippy) > l { | ||||||
|  | 				return io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			iNdEx += skippy | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if iNdEx > l { | ||||||
|  | 		return io.ErrUnexpectedEOF | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  | func skipProto3(data []byte) (n int, err error) { | ||||||
|  | 	l := len(data) | ||||||
|  | 	iNdEx := 0 | ||||||
|  | 	for iNdEx < l { | ||||||
|  | 		var wire uint64 | ||||||
|  | 		for shift := uint(0); ; shift += 7 { | ||||||
|  | 			if shift >= 64 { | ||||||
|  | 				return 0, ErrIntOverflowProto3 | ||||||
|  | 			} | ||||||
|  | 			if iNdEx >= l { | ||||||
|  | 				return 0, io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			b := data[iNdEx] | ||||||
|  | 			iNdEx++ | ||||||
|  | 			wire |= (uint64(b) & 0x7F) << shift | ||||||
|  | 			if b < 0x80 { | ||||||
|  | 				break | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		wireType := int(wire & 0x7) | ||||||
|  | 		switch wireType { | ||||||
|  | 		case 0: | ||||||
|  | 			for shift := uint(0); ; shift += 7 { | ||||||
|  | 				if shift >= 64 { | ||||||
|  | 					return 0, ErrIntOverflowProto3 | ||||||
|  | 				} | ||||||
|  | 				if iNdEx >= l { | ||||||
|  | 					return 0, io.ErrUnexpectedEOF | ||||||
|  | 				} | ||||||
|  | 				iNdEx++ | ||||||
|  | 				if data[iNdEx-1] < 0x80 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 1: | ||||||
|  | 			iNdEx += 8 | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 2: | ||||||
|  | 			var length int | ||||||
|  | 			for shift := uint(0); ; shift += 7 { | ||||||
|  | 				if shift >= 64 { | ||||||
|  | 					return 0, ErrIntOverflowProto3 | ||||||
|  | 				} | ||||||
|  | 				if iNdEx >= l { | ||||||
|  | 					return 0, io.ErrUnexpectedEOF | ||||||
|  | 				} | ||||||
|  | 				b := data[iNdEx] | ||||||
|  | 				iNdEx++ | ||||||
|  | 				length |= (int(b) & 0x7F) << shift | ||||||
|  | 				if b < 0x80 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			iNdEx += length | ||||||
|  | 			if length < 0 { | ||||||
|  | 				return 0, ErrInvalidLengthProto3 | ||||||
|  | 			} | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 3: | ||||||
|  | 			for { | ||||||
|  | 				var innerWire uint64 | ||||||
|  | 				var start int = iNdEx | ||||||
|  | 				for shift := uint(0); ; shift += 7 { | ||||||
|  | 					if shift >= 64 { | ||||||
|  | 						return 0, ErrIntOverflowProto3 | ||||||
|  | 					} | ||||||
|  | 					if iNdEx >= l { | ||||||
|  | 						return 0, io.ErrUnexpectedEOF | ||||||
|  | 					} | ||||||
|  | 					b := data[iNdEx] | ||||||
|  | 					iNdEx++ | ||||||
|  | 					innerWire |= (uint64(b) & 0x7F) << shift | ||||||
|  | 					if b < 0x80 { | ||||||
|  | 						break | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 				innerWireType := int(innerWire & 0x7) | ||||||
|  | 				if innerWireType == 4 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 				next, err := skipProto3(data[start:]) | ||||||
|  | 				if err != nil { | ||||||
|  | 					return 0, err | ||||||
|  | 				} | ||||||
|  | 				iNdEx = start + next | ||||||
|  | 			} | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 4: | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 5: | ||||||
|  | 			iNdEx += 4 | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		default: | ||||||
|  | 			return 0, fmt.Errorf("proto: illegal wireType %d", wireType) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	panic("unreachable") | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var ( | ||||||
|  | 	ErrInvalidLengthProto3 = fmt.Errorf("proto: negative length found during unmarshaling") | ||||||
|  | 	ErrIntOverflowProto3   = fmt.Errorf("proto: integer overflow") | ||||||
|  | ) | ||||||
							
								
								
									
										426
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/test/slick/vanity.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										426
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/test/slick/vanity.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,426 @@ | |||||||
|  | // Code generated by protoc-gen-gogo. | ||||||
|  | // source: vanity.proto | ||||||
|  | // DO NOT EDIT! | ||||||
|  |  | ||||||
|  | /* | ||||||
|  | 	Package vanity is a generated protocol buffer package. | ||||||
|  |  | ||||||
|  | 	It is generated from these files: | ||||||
|  | 		vanity.proto | ||||||
|  |  | ||||||
|  | 	It has these top-level messages: | ||||||
|  | 		A | ||||||
|  | */ | ||||||
|  | package vanity | ||||||
|  |  | ||||||
|  | import proto "github.com/gogo/protobuf/proto" | ||||||
|  | import fmt "fmt" | ||||||
|  | import math "math" | ||||||
|  |  | ||||||
|  | import strings "strings" | ||||||
|  | import github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto" | ||||||
|  | import sort "sort" | ||||||
|  | import strconv "strconv" | ||||||
|  | import reflect "reflect" | ||||||
|  |  | ||||||
|  | import io "io" | ||||||
|  |  | ||||||
|  | // Reference imports to suppress errors if they are not otherwise used. | ||||||
|  | var _ = proto.Marshal | ||||||
|  | var _ = fmt.Errorf | ||||||
|  | var _ = math.Inf | ||||||
|  |  | ||||||
|  | type A struct { | ||||||
|  | 	Strings string `protobuf:"bytes,1,opt,name=Strings" json:"Strings"` | ||||||
|  | 	Int     int64  `protobuf:"varint,2,req,name=Int" json:"Int"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *A) Reset()      { *m = A{} } | ||||||
|  | func (*A) ProtoMessage() {} | ||||||
|  |  | ||||||
|  | func (m *A) GetStrings() string { | ||||||
|  | 	if m != nil { | ||||||
|  | 		return m.Strings | ||||||
|  | 	} | ||||||
|  | 	return "" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *A) GetInt() int64 { | ||||||
|  | 	if m != nil { | ||||||
|  | 		return m.Int | ||||||
|  | 	} | ||||||
|  | 	return 0 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func init() { | ||||||
|  | 	proto.RegisterType((*A)(nil), "vanity.A") | ||||||
|  | } | ||||||
|  | func (this *A) Equal(that interface{}) bool { | ||||||
|  | 	if that == nil { | ||||||
|  | 		if this == nil { | ||||||
|  | 			return true | ||||||
|  | 		} | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	that1, ok := that.(*A) | ||||||
|  | 	if !ok { | ||||||
|  | 		that2, ok := that.(A) | ||||||
|  | 		if ok { | ||||||
|  | 			that1 = &that2 | ||||||
|  | 		} else { | ||||||
|  | 			return false | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	if that1 == nil { | ||||||
|  | 		if this == nil { | ||||||
|  | 			return true | ||||||
|  | 		} | ||||||
|  | 		return false | ||||||
|  | 	} else if this == nil { | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | 	if this.Strings != that1.Strings { | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | 	if this.Int != that1.Int { | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | 	return true | ||||||
|  | } | ||||||
|  | func (this *A) GoString() string { | ||||||
|  | 	if this == nil { | ||||||
|  | 		return "nil" | ||||||
|  | 	} | ||||||
|  | 	s := make([]string, 0, 6) | ||||||
|  | 	s = append(s, "&vanity.A{") | ||||||
|  | 	s = append(s, "Strings: "+fmt.Sprintf("%#v", this.Strings)+",\n") | ||||||
|  | 	s = append(s, "Int: "+fmt.Sprintf("%#v", this.Int)+",\n") | ||||||
|  | 	s = append(s, "}") | ||||||
|  | 	return strings.Join(s, "") | ||||||
|  | } | ||||||
|  | func valueToGoStringVanity(v interface{}, typ string) string { | ||||||
|  | 	rv := reflect.ValueOf(v) | ||||||
|  | 	if rv.IsNil() { | ||||||
|  | 		return "nil" | ||||||
|  | 	} | ||||||
|  | 	pv := reflect.Indirect(rv).Interface() | ||||||
|  | 	return fmt.Sprintf("func(v %v) *%v { return &v } ( %#v )", typ, typ, pv) | ||||||
|  | } | ||||||
|  | func extensionToGoStringVanity(e map[int32]github_com_gogo_protobuf_proto.Extension) string { | ||||||
|  | 	if e == nil { | ||||||
|  | 		return "nil" | ||||||
|  | 	} | ||||||
|  | 	s := "map[int32]proto.Extension{" | ||||||
|  | 	keys := make([]int, 0, len(e)) | ||||||
|  | 	for k := range e { | ||||||
|  | 		keys = append(keys, int(k)) | ||||||
|  | 	} | ||||||
|  | 	sort.Ints(keys) | ||||||
|  | 	ss := []string{} | ||||||
|  | 	for _, k := range keys { | ||||||
|  | 		ss = append(ss, strconv.Itoa(k)+": "+e[int32(k)].GoString()) | ||||||
|  | 	} | ||||||
|  | 	s += strings.Join(ss, ",") + "}" | ||||||
|  | 	return s | ||||||
|  | } | ||||||
|  | func (m *A) Marshal() (data []byte, err error) { | ||||||
|  | 	size := m.Size() | ||||||
|  | 	data = make([]byte, size) | ||||||
|  | 	n, err := m.MarshalTo(data) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	return data[:n], nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *A) MarshalTo(data []byte) (int, error) { | ||||||
|  | 	var i int | ||||||
|  | 	_ = i | ||||||
|  | 	var l int | ||||||
|  | 	_ = l | ||||||
|  | 	data[i] = 0xa | ||||||
|  | 	i++ | ||||||
|  | 	i = encodeVarintVanity(data, i, uint64(len(m.Strings))) | ||||||
|  | 	i += copy(data[i:], m.Strings) | ||||||
|  | 	data[i] = 0x10 | ||||||
|  | 	i++ | ||||||
|  | 	i = encodeVarintVanity(data, i, uint64(m.Int)) | ||||||
|  | 	return i, nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func encodeFixed64Vanity(data []byte, offset int, v uint64) int { | ||||||
|  | 	data[offset] = uint8(v) | ||||||
|  | 	data[offset+1] = uint8(v >> 8) | ||||||
|  | 	data[offset+2] = uint8(v >> 16) | ||||||
|  | 	data[offset+3] = uint8(v >> 24) | ||||||
|  | 	data[offset+4] = uint8(v >> 32) | ||||||
|  | 	data[offset+5] = uint8(v >> 40) | ||||||
|  | 	data[offset+6] = uint8(v >> 48) | ||||||
|  | 	data[offset+7] = uint8(v >> 56) | ||||||
|  | 	return offset + 8 | ||||||
|  | } | ||||||
|  | func encodeFixed32Vanity(data []byte, offset int, v uint32) int { | ||||||
|  | 	data[offset] = uint8(v) | ||||||
|  | 	data[offset+1] = uint8(v >> 8) | ||||||
|  | 	data[offset+2] = uint8(v >> 16) | ||||||
|  | 	data[offset+3] = uint8(v >> 24) | ||||||
|  | 	return offset + 4 | ||||||
|  | } | ||||||
|  | func encodeVarintVanity(data []byte, offset int, v uint64) int { | ||||||
|  | 	for v >= 1<<7 { | ||||||
|  | 		data[offset] = uint8(v&0x7f | 0x80) | ||||||
|  | 		v >>= 7 | ||||||
|  | 		offset++ | ||||||
|  | 	} | ||||||
|  | 	data[offset] = uint8(v) | ||||||
|  | 	return offset + 1 | ||||||
|  | } | ||||||
|  | func (m *A) Size() (n int) { | ||||||
|  | 	var l int | ||||||
|  | 	_ = l | ||||||
|  | 	l = len(m.Strings) | ||||||
|  | 	n += 1 + l + sovVanity(uint64(l)) | ||||||
|  | 	n += 1 + sovVanity(uint64(m.Int)) | ||||||
|  | 	return n | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func sovVanity(x uint64) (n int) { | ||||||
|  | 	for { | ||||||
|  | 		n++ | ||||||
|  | 		x >>= 7 | ||||||
|  | 		if x == 0 { | ||||||
|  | 			break | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return n | ||||||
|  | } | ||||||
|  | func sozVanity(x uint64) (n int) { | ||||||
|  | 	return sovVanity(uint64((x << 1) ^ uint64((int64(x) >> 63)))) | ||||||
|  | } | ||||||
|  | func (this *A) String() string { | ||||||
|  | 	if this == nil { | ||||||
|  | 		return "nil" | ||||||
|  | 	} | ||||||
|  | 	s := strings.Join([]string{`&A{`, | ||||||
|  | 		`Strings:` + fmt.Sprintf("%v", this.Strings) + `,`, | ||||||
|  | 		`Int:` + fmt.Sprintf("%v", this.Int) + `,`, | ||||||
|  | 		`}`, | ||||||
|  | 	}, "") | ||||||
|  | 	return s | ||||||
|  | } | ||||||
|  | func valueToStringVanity(v interface{}) string { | ||||||
|  | 	rv := reflect.ValueOf(v) | ||||||
|  | 	if rv.IsNil() { | ||||||
|  | 		return "nil" | ||||||
|  | 	} | ||||||
|  | 	pv := reflect.Indirect(rv).Interface() | ||||||
|  | 	return fmt.Sprintf("*%v", pv) | ||||||
|  | } | ||||||
|  | func (m *A) Unmarshal(data []byte) error { | ||||||
|  | 	var hasFields [1]uint64 | ||||||
|  | 	l := len(data) | ||||||
|  | 	iNdEx := 0 | ||||||
|  | 	for iNdEx < l { | ||||||
|  | 		preIndex := iNdEx | ||||||
|  | 		var wire uint64 | ||||||
|  | 		for shift := uint(0); ; shift += 7 { | ||||||
|  | 			if shift >= 64 { | ||||||
|  | 				return ErrIntOverflowVanity | ||||||
|  | 			} | ||||||
|  | 			if iNdEx >= l { | ||||||
|  | 				return io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			b := data[iNdEx] | ||||||
|  | 			iNdEx++ | ||||||
|  | 			wire |= (uint64(b) & 0x7F) << shift | ||||||
|  | 			if b < 0x80 { | ||||||
|  | 				break | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		fieldNum := int32(wire >> 3) | ||||||
|  | 		wireType := int(wire & 0x7) | ||||||
|  | 		if wireType == 4 { | ||||||
|  | 			return fmt.Errorf("proto: A: wiretype end group for non-group") | ||||||
|  | 		} | ||||||
|  | 		if fieldNum <= 0 { | ||||||
|  | 			return fmt.Errorf("proto: A: illegal tag %d (wire type %d)", fieldNum, wire) | ||||||
|  | 		} | ||||||
|  | 		switch fieldNum { | ||||||
|  | 		case 1: | ||||||
|  | 			if wireType != 2 { | ||||||
|  | 				return fmt.Errorf("proto: wrong wireType = %d for field Strings", wireType) | ||||||
|  | 			} | ||||||
|  | 			var stringLen uint64 | ||||||
|  | 			for shift := uint(0); ; shift += 7 { | ||||||
|  | 				if shift >= 64 { | ||||||
|  | 					return ErrIntOverflowVanity | ||||||
|  | 				} | ||||||
|  | 				if iNdEx >= l { | ||||||
|  | 					return io.ErrUnexpectedEOF | ||||||
|  | 				} | ||||||
|  | 				b := data[iNdEx] | ||||||
|  | 				iNdEx++ | ||||||
|  | 				stringLen |= (uint64(b) & 0x7F) << shift | ||||||
|  | 				if b < 0x80 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			intStringLen := int(stringLen) | ||||||
|  | 			if intStringLen < 0 { | ||||||
|  | 				return ErrInvalidLengthVanity | ||||||
|  | 			} | ||||||
|  | 			postIndex := iNdEx + intStringLen | ||||||
|  | 			if postIndex > l { | ||||||
|  | 				return io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			m.Strings = string(data[iNdEx:postIndex]) | ||||||
|  | 			iNdEx = postIndex | ||||||
|  | 		case 2: | ||||||
|  | 			if wireType != 0 { | ||||||
|  | 				return fmt.Errorf("proto: wrong wireType = %d for field Int", wireType) | ||||||
|  | 			} | ||||||
|  | 			m.Int = 0 | ||||||
|  | 			for shift := uint(0); ; shift += 7 { | ||||||
|  | 				if shift >= 64 { | ||||||
|  | 					return ErrIntOverflowVanity | ||||||
|  | 				} | ||||||
|  | 				if iNdEx >= l { | ||||||
|  | 					return io.ErrUnexpectedEOF | ||||||
|  | 				} | ||||||
|  | 				b := data[iNdEx] | ||||||
|  | 				iNdEx++ | ||||||
|  | 				m.Int |= (int64(b) & 0x7F) << shift | ||||||
|  | 				if b < 0x80 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			hasFields[0] |= uint64(0x00000001) | ||||||
|  | 		default: | ||||||
|  | 			iNdEx = preIndex | ||||||
|  | 			skippy, err := skipVanity(data[iNdEx:]) | ||||||
|  | 			if err != nil { | ||||||
|  | 				return err | ||||||
|  | 			} | ||||||
|  | 			if skippy < 0 { | ||||||
|  | 				return ErrInvalidLengthVanity | ||||||
|  | 			} | ||||||
|  | 			if (iNdEx + skippy) > l { | ||||||
|  | 				return io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			iNdEx += skippy | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	if hasFields[0]&uint64(0x00000001) == 0 { | ||||||
|  | 		return github_com_gogo_protobuf_proto.NewRequiredNotSetError("Int") | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if iNdEx > l { | ||||||
|  | 		return io.ErrUnexpectedEOF | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  | func skipVanity(data []byte) (n int, err error) { | ||||||
|  | 	l := len(data) | ||||||
|  | 	iNdEx := 0 | ||||||
|  | 	for iNdEx < l { | ||||||
|  | 		var wire uint64 | ||||||
|  | 		for shift := uint(0); ; shift += 7 { | ||||||
|  | 			if shift >= 64 { | ||||||
|  | 				return 0, ErrIntOverflowVanity | ||||||
|  | 			} | ||||||
|  | 			if iNdEx >= l { | ||||||
|  | 				return 0, io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			b := data[iNdEx] | ||||||
|  | 			iNdEx++ | ||||||
|  | 			wire |= (uint64(b) & 0x7F) << shift | ||||||
|  | 			if b < 0x80 { | ||||||
|  | 				break | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		wireType := int(wire & 0x7) | ||||||
|  | 		switch wireType { | ||||||
|  | 		case 0: | ||||||
|  | 			for shift := uint(0); ; shift += 7 { | ||||||
|  | 				if shift >= 64 { | ||||||
|  | 					return 0, ErrIntOverflowVanity | ||||||
|  | 				} | ||||||
|  | 				if iNdEx >= l { | ||||||
|  | 					return 0, io.ErrUnexpectedEOF | ||||||
|  | 				} | ||||||
|  | 				iNdEx++ | ||||||
|  | 				if data[iNdEx-1] < 0x80 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 1: | ||||||
|  | 			iNdEx += 8 | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 2: | ||||||
|  | 			var length int | ||||||
|  | 			for shift := uint(0); ; shift += 7 { | ||||||
|  | 				if shift >= 64 { | ||||||
|  | 					return 0, ErrIntOverflowVanity | ||||||
|  | 				} | ||||||
|  | 				if iNdEx >= l { | ||||||
|  | 					return 0, io.ErrUnexpectedEOF | ||||||
|  | 				} | ||||||
|  | 				b := data[iNdEx] | ||||||
|  | 				iNdEx++ | ||||||
|  | 				length |= (int(b) & 0x7F) << shift | ||||||
|  | 				if b < 0x80 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			iNdEx += length | ||||||
|  | 			if length < 0 { | ||||||
|  | 				return 0, ErrInvalidLengthVanity | ||||||
|  | 			} | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 3: | ||||||
|  | 			for { | ||||||
|  | 				var innerWire uint64 | ||||||
|  | 				var start int = iNdEx | ||||||
|  | 				for shift := uint(0); ; shift += 7 { | ||||||
|  | 					if shift >= 64 { | ||||||
|  | 						return 0, ErrIntOverflowVanity | ||||||
|  | 					} | ||||||
|  | 					if iNdEx >= l { | ||||||
|  | 						return 0, io.ErrUnexpectedEOF | ||||||
|  | 					} | ||||||
|  | 					b := data[iNdEx] | ||||||
|  | 					iNdEx++ | ||||||
|  | 					innerWire |= (uint64(b) & 0x7F) << shift | ||||||
|  | 					if b < 0x80 { | ||||||
|  | 						break | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 				innerWireType := int(innerWire & 0x7) | ||||||
|  | 				if innerWireType == 4 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 				next, err := skipVanity(data[start:]) | ||||||
|  | 				if err != nil { | ||||||
|  | 					return 0, err | ||||||
|  | 				} | ||||||
|  | 				iNdEx = start + next | ||||||
|  | 			} | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 4: | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		case 5: | ||||||
|  | 			iNdEx += 4 | ||||||
|  | 			return iNdEx, nil | ||||||
|  | 		default: | ||||||
|  | 			return 0, fmt.Errorf("proto: illegal wireType %d", wireType) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	panic("unreachable") | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var ( | ||||||
|  | 	ErrInvalidLengthVanity = fmt.Errorf("proto: negative length found during unmarshaling") | ||||||
|  | 	ErrIntOverflowVanity   = fmt.Errorf("proto: integer overflow") | ||||||
|  | ) | ||||||
							
								
								
									
										34
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/test/vanity.proto
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								Godeps/_workspace/src/github.com/gogo/protobuf/vanity/test/vanity.proto
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | |||||||
|  | // Copyright (c) 2015, Vastech SA (PTY) LTD. All rights reserved. | ||||||
|  | // http://github.com/gogo/protobuf/gogoproto | ||||||
|  | // | ||||||
|  | // 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. | ||||||
|  | // | ||||||
|  | // 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. | ||||||
|  |  | ||||||
|  | syntax = "proto2"; | ||||||
|  |  | ||||||
|  | package vanity; | ||||||
|  |  | ||||||
|  | message A { | ||||||
|  | 	optional string Strings = 1; | ||||||
|  | 	required int64 Int = 2; | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user
	 Clayton Coleman
					Clayton Coleman