func buildMessageType()

in api-generator/main.go [388:425]


func buildMessageType(scope *string, fileName *string, syntax ptype.Syntax, message *descriptor.DescriptorProto, output *output) error {
	fields := make([]*ptype.Field, 0, len(message.Field))
	fields, err := buildMessageFields(message.Field, fields)
	if err != nil {
		return errors.Wrap(err, "could not process message fields")
	}

	options := make([]*ptype.Option, 0)
	options, err = buildMessageOptions(message.Options, options)
	if err != nil {
		return errors.Wrap(err, "could not process message options")
	}

	oneofs := make([]string, 0, len(message.OneofDecl))
	oneofs, err = buildMessageOneofs(message.OneofDecl, oneofs)
	if err != nil {
		return errors.Wrap(err, "could not process message oneofs")
	}

	name := fmt.Sprintf("%s.%s", *scope, *message.Name)
	result := &ptype.Type{
		Name:          name,
		Fields:        fields,
		Oneofs:        oneofs,
		Options:       options,
		SourceContext: &source_context.SourceContext{FileName: *fileName},
		Syntax:        syntax,
	}
	output.Types = append(output.Types, result)

	for _, nestedMessage := range message.NestedType {
		if err := buildMessageType(&name, fileName, syntax, nestedMessage, output); err != nil {
			return errors.Wrapf(err, "could not process nested message %s", *nestedMessage.Name)
		}
	}

	return nil
}