Working js grpc generation (same as official output)
This commit is contained in:
		
							
								
								
									
										2
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
									
									
									
									
								
							| @@ -9,4 +9,4 @@ install: | ||||
| .PHONY: test | ||||
| test:	build | ||||
| 	cd examples/dummy && make | ||||
| 	cd examples/go-kit && make | ||||
| 	cd examples/js-grpc && make | ||||
|   | ||||
							
								
								
									
										13
									
								
								examples/js-grpc/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								examples/js-grpc/Makefile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| .PHONY: build | ||||
| build: | ||||
| 	mkdir -p output | ||||
| 	protoc -I. --gotemplate_out=template_dir=templates,debug=true:output ./protos/*.proto | ||||
|  | ||||
|  | ||||
| .PHONY: re | ||||
| re: clean build | ||||
|  | ||||
|  | ||||
| .PHONY: clean | ||||
| clean: | ||||
| 	rm -rf output | ||||
							
								
								
									
										160
									
								
								examples/js-grpc/output/user/user_grpc_pb.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										160
									
								
								examples/js-grpc/output/user/user_grpc_pb.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,160 @@ | ||||
|  | ||||
|  | ||||
|  | ||||
| // GENERATED CODE -- DO NOT EDIT! | ||||
|  | ||||
| 'use strict'; | ||||
| var grpc = require('grpc'); | ||||
| var user_user_pb = require('../user/user_pb.js'); | ||||
| var google_api_annotations_pb = require('../google/api/annotations_pb.js'); | ||||
|  | ||||
|  | ||||
|  | ||||
| function serialize_user_RegisterRequest(arg) { | ||||
|   if (!(arg instanceof user_user_pb.RegisterRequest)) { | ||||
|     throw new Error('Expected argument of type user.RegisterRequest'); | ||||
|   } | ||||
|   return new Buffer(arg.serializeBinary()); | ||||
| } | ||||
|  | ||||
| function deserialize_user_RegisterRequest(buffer_arg) { | ||||
|   return user_user_pb.RegisterRequest.deserializeBinary(new Uint8Array(buffer_arg)); | ||||
| } | ||||
|  | ||||
| function serialize_user_RegisterReply(arg) { | ||||
|   if (!(arg instanceof user_user_pb.RegisterReply)) { | ||||
|     throw new Error('Expected argument of type user.RegisterReply'); | ||||
|   } | ||||
|   return new Buffer(arg.serializeBinary()); | ||||
| } | ||||
|  | ||||
| function deserialize_user_RegisterReply(buffer_arg) { | ||||
|   return user_user_pb.RegisterReply.deserializeBinary(new Uint8Array(buffer_arg)); | ||||
| } | ||||
|  | ||||
| function serialize_user_GetUserProfileRequest(arg) { | ||||
|   if (!(arg instanceof user_user_pb.GetUserProfileRequest)) { | ||||
|     throw new Error('Expected argument of type user.GetUserProfileRequest'); | ||||
|   } | ||||
|   return new Buffer(arg.serializeBinary()); | ||||
| } | ||||
|  | ||||
| function deserialize_user_GetUserProfileRequest(buffer_arg) { | ||||
|   return user_user_pb.GetUserProfileRequest.deserializeBinary(new Uint8Array(buffer_arg)); | ||||
| } | ||||
|  | ||||
| function serialize_user_GetUserProfileReply(arg) { | ||||
|   if (!(arg instanceof user_user_pb.GetUserProfileReply)) { | ||||
|     throw new Error('Expected argument of type user.GetUserProfileReply'); | ||||
|   } | ||||
|   return new Buffer(arg.serializeBinary()); | ||||
| } | ||||
|  | ||||
| function deserialize_user_GetUserProfileReply(buffer_arg) { | ||||
|   return user_user_pb.GetUserProfileReply.deserializeBinary(new Uint8Array(buffer_arg)); | ||||
| } | ||||
|  | ||||
| function serialize_user_UpdateProfileRequest(arg) { | ||||
|   if (!(arg instanceof user_user_pb.UpdateProfileRequest)) { | ||||
|     throw new Error('Expected argument of type user.UpdateProfileRequest'); | ||||
|   } | ||||
|   return new Buffer(arg.serializeBinary()); | ||||
| } | ||||
|  | ||||
| function deserialize_user_UpdateProfileRequest(buffer_arg) { | ||||
|   return user_user_pb.UpdateProfileRequest.deserializeBinary(new Uint8Array(buffer_arg)); | ||||
| } | ||||
|  | ||||
| function serialize_user_UpdateProfileReply(arg) { | ||||
|   if (!(arg instanceof user_user_pb.UpdateProfileReply)) { | ||||
|     throw new Error('Expected argument of type user.UpdateProfileReply'); | ||||
|   } | ||||
|   return new Buffer(arg.serializeBinary()); | ||||
| } | ||||
|  | ||||
| function deserialize_user_UpdateProfileReply(buffer_arg) { | ||||
|   return user_user_pb.UpdateProfileReply.deserializeBinary(new Uint8Array(buffer_arg)); | ||||
| } | ||||
|  | ||||
| function serialize_user_UploadDocumentRequest(arg) { | ||||
|   if (!(arg instanceof user_user_pb.UploadDocumentRequest)) { | ||||
|     throw new Error('Expected argument of type user.UploadDocumentRequest'); | ||||
|   } | ||||
|   return new Buffer(arg.serializeBinary()); | ||||
| } | ||||
|  | ||||
| function deserialize_user_UploadDocumentRequest(buffer_arg) { | ||||
|   return user_user_pb.UploadDocumentRequest.deserializeBinary(new Uint8Array(buffer_arg)); | ||||
| } | ||||
|  | ||||
| function serialize_user_UploadDocumentReply(arg) { | ||||
|   if (!(arg instanceof user_user_pb.UploadDocumentReply)) { | ||||
|     throw new Error('Expected argument of type user.UploadDocumentReply'); | ||||
|   } | ||||
|   return new Buffer(arg.serializeBinary()); | ||||
| } | ||||
|  | ||||
| function deserialize_user_UploadDocumentReply(buffer_arg) { | ||||
|   return user_user_pb.UploadDocumentReply.deserializeBinary(new Uint8Array(buffer_arg)); | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| exports.TestServiceClient = grpc.makeGenericClientConstructor(UserServiceService); | ||||
|  | ||||
|  | ||||
| var UserServiceService = exports.UserServiceService = { | ||||
|  | ||||
|  | ||||
|   register: { | ||||
|     path: '/user.UserService/Register', | ||||
|     requestStream: false, | ||||
|     responseStream: false, | ||||
|     requestType: user_user_pb.RegisterRequest, | ||||
|     responseType: user_user_pb.RegisterReply, | ||||
|     requestSerialize: serialize_user_RegisterRequest, | ||||
|     requestDeserialize: deserialize_user_RegisterRequest, | ||||
|     responseSerialize: serialize_user_RegisterReply, | ||||
|     responseDeserialize: deserialize_user_RegisterReply, | ||||
|   }, | ||||
|  | ||||
|   getUserProfile: { | ||||
|     path: '/user.UserService/GetUserProfile', | ||||
|     requestStream: false, | ||||
|     responseStream: false, | ||||
|     requestType: user_user_pb.GetUserProfileRequest, | ||||
|     responseType: user_user_pb.GetUserProfileReply, | ||||
|     requestSerialize: serialize_user_GetUserProfileRequest, | ||||
|     requestDeserialize: deserialize_user_GetUserProfileRequest, | ||||
|     responseSerialize: serialize_user_GetUserProfileReply, | ||||
|     responseDeserialize: deserialize_user_GetUserProfileReply, | ||||
|   }, | ||||
|  | ||||
|   updateProfile: { | ||||
|     path: '/user.UserService/UpdateProfile', | ||||
|     requestStream: false, | ||||
|     responseStream: false, | ||||
|     requestType: user_user_pb.UpdateProfileRequest, | ||||
|     responseType: user_user_pb.UpdateProfileReply, | ||||
|     requestSerialize: serialize_user_UpdateProfileRequest, | ||||
|     requestDeserialize: deserialize_user_UpdateProfileRequest, | ||||
|     responseSerialize: serialize_user_UpdateProfileReply, | ||||
|     responseDeserialize: deserialize_user_UpdateProfileReply, | ||||
|   }, | ||||
|  | ||||
|   uploadDocument: { | ||||
|     path: '/user.UserService/UploadDocument', | ||||
|     requestStream: false, | ||||
|     responseStream: false, | ||||
|     requestType: user_user_pb.UploadDocumentRequest, | ||||
|     responseType: user_user_pb.UploadDocumentReply, | ||||
|     requestSerialize: serialize_user_UploadDocumentRequest, | ||||
|     requestDeserialize: deserialize_user_UploadDocumentRequest, | ||||
|     responseSerialize: serialize_user_UploadDocumentReply, | ||||
|     responseDeserialize: deserialize_user_UploadDocumentReply, | ||||
|   }, | ||||
|  | ||||
| } | ||||
|  | ||||
| exports.UserServiceClient = grpc.makeGenericClientConstructor(UserServiceService); | ||||
|  | ||||
							
								
								
									
										66
									
								
								examples/js-grpc/protos/user.proto
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								examples/js-grpc/protos/user.proto
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,66 @@ | ||||
| syntax = "proto3"; | ||||
|  | ||||
| package user; | ||||
|  | ||||
| option go_package = "github.com/united-drivers/models/go/user;userpb"; | ||||
|  | ||||
| // import "google/api/annotations.proto"; | ||||
|  | ||||
| // service UserService { | ||||
| //   rpc Register(RegisterRequest) returns (RegisterReply) {option (google.api.http).post = "/user/register";} | ||||
| //   rpc GetUserProfile(GetUserProfileRequest) returns (GetUserProfileReply) {option (google.api.http).post = "/user/get-user-profile";} | ||||
| //   rpc UpdateProfile(UpdateProfileRequest) returns (UpdateProfileReply) {option (google.api.http).post = "/user/update-profile";} | ||||
| //   rpc UploadDocument(UploadDocumentRequest) returns (UploadDocumentReply) {option (google.api.http).post = "/user/upload-document";} | ||||
| // } | ||||
|  | ||||
| service UserService { | ||||
|   rpc Register(RegisterRequest) returns (RegisterReply); | ||||
|   rpc GetUserProfile(GetUserProfileRequest) returns (GetUserProfileReply); | ||||
|   rpc UpdateProfile(UpdateProfileRequest) returns (UpdateProfileReply); | ||||
|   rpc UploadDocument(UploadDocumentRequest) returns (UploadDocumentReply); | ||||
| } | ||||
|  | ||||
| message UpdateProfileRequest { | ||||
|   Profile profile = 1; | ||||
| } | ||||
|  | ||||
| message UpdateProfileReply { | ||||
|   string err_msg = 1; | ||||
| } | ||||
|  | ||||
| message UploadDocumentRequest { | ||||
|   string path = 1; | ||||
|   string document = 2; | ||||
| } | ||||
|  | ||||
| message UploadDocumentReply { | ||||
|   string err_msg = 1; | ||||
| } | ||||
|  | ||||
| message Profile { | ||||
|   string id = 1; | ||||
|   string email = 2; | ||||
|   string first_name = 3; | ||||
|   string last_name = 4; | ||||
|   string picture = 5; | ||||
|   string promo_code = 6; | ||||
|   string phone_number = 7; | ||||
| } | ||||
|  | ||||
| message RegisterRequest { | ||||
|   string first_name = 1; | ||||
|   string last_name = 2; | ||||
|   string email = 3; | ||||
|   string phone_number = 4; | ||||
| } | ||||
|  | ||||
| message RegisterReply { | ||||
|   string err_msg  = 1; | ||||
| } | ||||
|  | ||||
| message GetUserProfileRequest {} | ||||
|  | ||||
| message GetUserProfileReply { | ||||
|   Profile profile = 1; | ||||
|   string err_msg = 2; | ||||
| } | ||||
| @@ -1,56 +1,58 @@ | ||||
| {{$Package:=.File.Package}} | ||||
| {{$Service:=.Service}} | ||||
|  | ||||
| // GENERATED CODE -- DO NOT EDIT! | ||||
|  | ||||
| 'use strict'; | ||||
| {{$file:=.File}}{{$service:=.Service}} | ||||
|  | ||||
| var {{$file.Package}}_pb = require('../{{$file.Package}}/{{$file.Package}}_pb.js'); | ||||
| var grpc = require('grpc'); | ||||
| var base64 = require('base64-js'); | ||||
| var {{$Package}}_{{$Package}}_pb = require('../{{$Package}}/{{$Package}}_pb.js'); | ||||
| var google_api_annotations_pb = require('../google/api/annotations_pb.js'); | ||||
|  | ||||
| function serializeToBase64(req) { | ||||
|     return base64.fromByteArray(req) | ||||
| } | ||||
|  | ||||
| function deserializeFromBase64(b64) { | ||||
|     return new Uint8Array(base64.toByteArray(b64)) | ||||
| } | ||||
| {{range .Service.Method}} | ||||
| function serialize_{{$file.Package}}_{{.Name}}Request(arg) { | ||||
|     if (!(arg instanceof {{$file.Package}}_pb.{{.Name}}Request)) { | ||||
|         throw new Error('Expected argument of type {{$file.Package}}.{{.Name}}Request'); | ||||
| {{range .File.Service}} | ||||
| {{range .Method}} | ||||
| function serialize_{{$Package}}_{{.InputType | splitArray "." | last}}(arg) { | ||||
|   if (!(arg instanceof {{$Package}}_{{$Package}}_pb.{{.InputType | splitArray "." | last}})) { | ||||
|     throw new Error('Expected argument of type {{$Package}}.{{.InputType | splitArray "." | last}}'); | ||||
|   } | ||||
|     return serializeToBase64(arg.serializeBinary()); | ||||
|   return new Buffer(arg.serializeBinary()); | ||||
| } | ||||
|  | ||||
| function deserialize_{{$file.Package}}_{{.Name}}Request(base64) { | ||||
|     return {{$file.Package}}_pb.{{.Name}}Request.deserializeBinary(deserializeFromBase64(base64)); | ||||
| function deserialize_{{$Package}}_{{.InputType | splitArray "." | last}}(buffer_arg) { | ||||
|   return {{$Package}}_{{$Package}}_pb.{{.InputType | splitArray "." | last}}.deserializeBinary(new Uint8Array(buffer_arg)); | ||||
| } | ||||
|  | ||||
| function serialize_{{$file.Package}}_{{.Name}}Reply(arg) { | ||||
|     if (!(arg instanceof {{$file.Package}}_pb.{{.Name}}Reply)) { | ||||
|         throw new Error('Expected argument of type {{$file.Package}}.{{.Name}}Reply'); | ||||
| function serialize_{{$Package}}_{{.OutputType | splitArray "." | last}}(arg) { | ||||
|   if (!(arg instanceof {{$Package}}_{{$Package}}_pb.{{.OutputType | splitArray "." | last}})) { | ||||
|     throw new Error('Expected argument of type {{$Package}}.{{.OutputType | splitArray "." | last}}'); | ||||
|   } | ||||
|     return serializeToBase64(arg.serializeBinary()); | ||||
|   return new Buffer(arg.serializeBinary()); | ||||
| } | ||||
|  | ||||
| function deserialize_{{$file.Package}}_{{.Name}}Reply(base64) { | ||||
|     return {{$file.Package}}_pb.{{.Name}}Reply.deserializeBinary(deserializeFromBase64(base64)); | ||||
| function deserialize_{{$Package}}_{{.OutputType | splitArray "." | last}}(buffer_arg) { | ||||
|   return {{$Package}}_{{$Package}}_pb.{{.OutputType | splitArray "." | last}}.deserializeBinary(new Uint8Array(buffer_arg)); | ||||
| } | ||||
| {{end}} | ||||
| var TestServiceService = { | ||||
|     {{range .Service.Method}} | ||||
|     {{.Name}}: { | ||||
|         path: '/{{$file.Package}}.{{$service.Name}}/{{.Name}}', | ||||
|         requestStream: {{if .ClientStreaming}}true{{else}}false{{end}}, | ||||
|         responseStream: {{if .ServerStreaming}}true{{else}}false{{end}}, | ||||
|         requestType: {{$file.Package}}_pb.{{.Name}}Request, | ||||
|         responseType: {{$file.Package}}_pb.{{.Name}}Reply, | ||||
|         requestSerialize: serialize_{{$file.Package}}_{{.Name}}Request, | ||||
|         requestDeserialize: deserialize_{{$file.Package}}_{{.Name}}Request, | ||||
|         responseSerialize: serialize_{{$file.Package}}_{{.Name}}Reply, | ||||
|         responseDeserialize: deserialize_{{$file.Package}}_{{.Name}}Reply, | ||||
|     }, | ||||
|     {{end}} | ||||
| }; | ||||
| {{end}} | ||||
|  | ||||
| exports.TestServiceClient = grpc.makeGenericClientConstructor({{.Service.Name}}Service); | ||||
|  | ||||
| {{range .File.Service}} | ||||
| var {{.Name}}Service = exports.{{.Name}}Service = { | ||||
| {{$serviceName:=.Name}} | ||||
| {{range .Method}} | ||||
|   {{.Name | lowerFirst}}: { | ||||
|     path: '/{{$Package}}.{{$serviceName}}/{{.Name}}', | ||||
|     requestStream: {{.ClientStreaming | default "false"}}, | ||||
|     responseStream: {{.ServerStreaming | default "false"}}, | ||||
|     requestType: {{$Package}}_{{$Package}}_pb.{{.InputType | splitArray "." | last}}, | ||||
|     responseType: {{$Package}}_{{$Package}}_pb.{{.OutputType | splitArray "." | last}}, | ||||
|     requestSerialize: serialize_{{$Package}}_{{.InputType | splitArray "." | last}}, | ||||
|     requestDeserialize: deserialize_{{$Package}}_{{.InputType | splitArray "." | last}}, | ||||
|     responseSerialize: serialize_{{$Package}}_{{.OutputType | splitArray "." | last}}, | ||||
|     responseDeserialize: deserialize_{{$Package}}_{{.OutputType | splitArray "." | last}}, | ||||
|   }, | ||||
| {{end}} | ||||
| } | ||||
|  | ||||
| exports.{{.Name}}Client = grpc.makeGenericClientConstructor({{.Name}}Service); | ||||
| {{end}} | ||||
|   | ||||
							
								
								
									
										11
									
								
								helpers.go
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								helpers.go
									
									
									
									
									
								
							| @@ -2,6 +2,7 @@ package main | ||||
|  | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| 	"strings" | ||||
| 	"text/template" | ||||
|  | ||||
| 	"github.com/Masterminds/sprig" | ||||
| @@ -21,12 +22,18 @@ var ProtoHelpersFuncMap = template.FuncMap{ | ||||
| 		a, _ := json.MarshalIndent(v, "", "  ") | ||||
| 		return string(a) | ||||
| 	}, | ||||
| 	"first": func(a []interface{}) interface{} { | ||||
| 	"splitArray": func(sep string, s string) []string { | ||||
| 		return strings.Split(s, sep) | ||||
| 	}, | ||||
| 	"first": func(a []string) string { | ||||
| 		return a[0] | ||||
| 	}, | ||||
| 	"last": func(a []interface{}) interface{} { | ||||
| 	"last": func(a []string) string { | ||||
| 		return a[len(a)-1] | ||||
| 	}, | ||||
| 	"lowerFirst": func(s string) string { | ||||
| 		return strings.ToLower(s[:1]) + s[1:] | ||||
| 	}, | ||||
| } | ||||
|  | ||||
| func init() { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user