github.com/cosmos/cosmos-proto@v1.0.0-beta.3/features/fastreflection/type.go (about) 1 package fastreflection 2 3 import ( 4 "fmt" 5 "github.com/cosmos/cosmos-proto/generator" 6 7 "google.golang.org/protobuf/compiler/protogen" 8 ) 9 10 func messageTypeName(message *protogen.Message) string { 11 return fmt.Sprintf("%s_messageType", fastReflectionTypeName(message)) 12 } 13 14 func messageTypeNameVar(message *protogen.Message) string { 15 return fmt.Sprintf("_%s", messageTypeName(message)) 16 } 17 18 type messageTypeGen struct { 19 typeName string 20 *generator.GeneratedFile 21 message *protogen.Message 22 23 messageTypeName string 24 file *protogen.File 25 } 26 27 func (g *messageTypeGen) generate() { 28 g.messageTypeName = fmt.Sprintf("%s_messageType", g.typeName) 29 30 g.P("var ", messageTypeNameVar(g.message), " ", g.messageTypeName) 31 32 g.P("var _ ", protoreflectPkg.Ident("MessageType"), " = ", g.messageTypeName, "{}") 33 g.P("type ", g.messageTypeName, " struct {}") 34 35 g.P("func (x ", g.messageTypeName, ") Zero() ", protoreflectPkg.Ident("Message"), "{") 36 g.P("return (*", g.typeName, ")(nil)") 37 g.P("}") 38 39 g.P("func (x ", g.messageTypeName, ") New() ", protoreflectPkg.Ident("Message"), "{") 40 g.P("return new(", g.typeName, ")") 41 g.P("}") 42 43 g.P("func (x ", g.messageTypeName, ") Descriptor() ", protoreflectPkg.Ident("MessageDescriptor"), " {") 44 g.P("return ", messageDescriptorName(g.message)) 45 g.P("}") 46 } 47 48 func messageDescriptorName(message *protogen.Message) string { 49 return fmt.Sprintf("md_%s", message.GoIdent.GoName) 50 }