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  }