57 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package main
 | |
| 
 | |
| import (
 | |
| 	"bytes"
 | |
| 	"os"
 | |
| 
 | |
| 	"github.com/vektah/gqlparser/v2/formatter"
 | |
| 	generator "go.unistack.org/protoc-gen-go-micro/v4/graphql"
 | |
| 	"google.golang.org/protobuf/compiler/protogen"
 | |
| 	"google.golang.org/protobuf/proto"
 | |
| 	"google.golang.org/protobuf/types/pluginpb"
 | |
| )
 | |
| 
 | |
| func (g *Generator) graphqlsGenerate(plugin *protogen.Plugin) error {
 | |
| 	descs, err := generator.CreateDescriptorsFromProto(plugin.Request)
 | |
| 	if err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 
 | |
| 	gqlDesc, err := generator.NewSchemas(descs, false, false, plugin)
 | |
| 	if err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 
 | |
| 	var outFiles []*pluginpb.CodeGeneratorResponse_File
 | |
| 
 | |
| 	for _, schema := range gqlDesc {
 | |
| 		buf := &bytes.Buffer{}
 | |
| 		formatter.NewFormatter(buf).FormatSchema(schema.AsGraphql())
 | |
| 
 | |
| 		outFiles = append(outFiles, &pluginpb.CodeGeneratorResponse_File{
 | |
| 			Name:    proto.String(g.graphqlFile),
 | |
| 			Content: proto.String(buf.String()),
 | |
| 		})
 | |
| 	}
 | |
| 
 | |
| 	res := &pluginpb.CodeGeneratorResponse{
 | |
| 		File:              outFiles,
 | |
| 		SupportedFeatures: proto.Uint64(uint64(pluginpb.CodeGeneratorResponse_FEATURE_PROTO3_OPTIONAL)),
 | |
| 	}
 | |
| 
 | |
| 	if err != nil {
 | |
| 		res.Error = proto.String(err.Error())
 | |
| 	}
 | |
| 
 | |
| 	out, err := proto.Marshal(res)
 | |
| 	if err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 
 | |
| 	if _, err := os.Stdout.Write(out); err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 
 | |
| 	return nil
 | |
| }
 |