micro api cleanup
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
This commit is contained in:
		
							
								
								
									
										77
									
								
								util.go
									
									
									
									
									
								
							
							
						
						
									
										77
									
								
								util.go
									
									
									
									
									
								
							| @@ -220,8 +220,8 @@ func (g *Generator) generateServiceClientMethods(gfile *protogen.GeneratedFile, | |||||||
| 				if err != nil { | 				if err != nil { | ||||||
| 					log.Printf("parse duration error %s\n", err.Error()) | 					log.Printf("parse duration error %s\n", err.Error()) | ||||||
| 				} else { | 				} else { | ||||||
| 					gfile.P("td := uint64(", td.Nanoseconds(), ")") | 					gfile.P("td := ", timePackage.Ident("Duration"), "(", td.Nanoseconds(), ")") | ||||||
| 					gfile.P("opts = append(opts, ", microClientPackage.Ident("WithRequestTimeout"), "(", timePackage.Ident("Nanosecond"), "* ", "td", "))") | 					gfile.P("opts = append(opts, ", microClientPackage.Ident("WithRequestTimeout"), "(td))") | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| @@ -481,18 +481,49 @@ func (g *Generator) generateServiceRegister(gfile *protogen.GeneratedFile, servi | |||||||
| 	serviceName := service.GoName | 	serviceName := service.GoName | ||||||
| 	gfile.P("func Register", serviceName, "Server(s ", microServerPackage.Ident("Server"), ", sh ", serviceName, "Server, opts ...", microServerPackage.Ident("HandlerOption"), ") error {") | 	gfile.P("func Register", serviceName, "Server(s ", microServerPackage.Ident("Server"), ", sh ", serviceName, "Server, opts ...", microServerPackage.Ident("HandlerOption"), ") error {") | ||||||
| 	gfile.P("type ", unexport(serviceName), " interface {") | 	gfile.P("type ", unexport(serviceName), " interface {") | ||||||
|  | 	var endpoints []*api_options.HttpRule | ||||||
| 	for _, method := range service.Methods { | 	for _, method := range service.Methods { | ||||||
| 		generateServerSignature(gfile, serviceName, method, true) | 		generateServerSignature(gfile, serviceName, method, true) | ||||||
|  | 		if proto.HasExtension(method.Desc.Options(), api_options.E_Http) { | ||||||
|  | 			if ep, _ := generateEndpoints(method); ep != nil { | ||||||
|  | 				endpoints = append(endpoints, ep...) | ||||||
| 			} | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	gfile.P("}") | 	gfile.P("}") | ||||||
| 	gfile.P("type ", serviceName, " struct {") | 	gfile.P("type ", serviceName, " struct {") | ||||||
| 	gfile.P(unexport(serviceName)) | 	gfile.P(unexport(serviceName)) | ||||||
| 	gfile.P("}") | 	gfile.P("}") | ||||||
| 	gfile.P("h := &", unexport(serviceName), "Server{sh}") | 	gfile.P("h := &", unexport(serviceName), "Server{sh}") | ||||||
| 	gfile.P("var nopts []", microServerPackage.Ident("HandlerOption")) | 	gfile.P("var nopts []", microServerPackage.Ident("HandlerOption")) | ||||||
| 	gfile.P("for _, endpoint := range ", serviceName, "Endpoints {") | 	for _, method := range service.Methods { | ||||||
| 	gfile.P("nopts = append(nopts, ", microApiPackage.Ident("WithEndpoint"), "(&endpoint))") | 		if proto.HasExtension(method.Desc.Options(), api_options.E_Http) { | ||||||
| 	gfile.P("}") | 			if endpoints, streaming := generateEndpoints(method); endpoints != nil { | ||||||
|  | 				gfile.P("nopts = append(nopts, ", microServerHttpPackage.Ident("HandlerMetadata"), "(", "map[string]map[string]string{") | ||||||
|  | 				for _, ep := range endpoints { | ||||||
|  | 					path, method, body := getEndpoint(ep) | ||||||
|  | 					gfile.P(`"`, path, `":map[string]string{`) | ||||||
|  | 					if vmethod, ok := httpMethodMap[method]; ok { | ||||||
|  | 						gfile.P(`"Method": `, httpPackage.Ident(vmethod), `,`) | ||||||
|  | 					} else { | ||||||
|  | 						gfile.P(`"Method": "`, method, `",`) | ||||||
|  | 					} | ||||||
|  | 					if body != "" { | ||||||
|  | 						gfile.P(`"Body": "`, body, `",`) | ||||||
|  | 					} | ||||||
|  | 					if streaming { | ||||||
|  | 						gfile.P(`"Stream": "true",`) | ||||||
|  | 					} else { | ||||||
|  | 						gfile.P(`"Stream": "false",`) | ||||||
|  | 					} | ||||||
|  | 					gfile.P(`},`) | ||||||
|  | 				} | ||||||
|  | 				gfile.P("}", "))") | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	gfile.P("return s.Handle(s.NewHandler(&", serviceName, "{h}, append(nopts, opts...)...))") | 	gfile.P("return s.Handle(s.NewHandler(&", serviceName, "{h}, append(nopts, opts...)...))") | ||||||
| 	gfile.P("}") | 	gfile.P("}") | ||||||
| } | } | ||||||
| @@ -655,35 +686,6 @@ func (g *Generator) generateServiceServerStreamInterface(gfile *protogen.Generat | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| func (g *Generator) generateServiceEndpoints(gfile *protogen.GeneratedFile, service *protogen.Service) { |  | ||||||
| 	serviceName := service.GoName |  | ||||||
| 	gfile.P("var (") |  | ||||||
| 	gfile.P(serviceName, "Name", "=", `"`, serviceName, `"`) |  | ||||||
| 	gfile.P() |  | ||||||
| 	gfile.P(serviceName, "Endpoints", "=", "[]", microApiPackage.Ident("Endpoint"), "{") |  | ||||||
| 	for _, method := range service.Methods { |  | ||||||
| 		if method.Desc.Options() == nil { |  | ||||||
| 			continue |  | ||||||
| 		} |  | ||||||
| 		if proto.HasExtension(method.Desc.Options(), api_options.E_Http) { |  | ||||||
| 			endpoints, streaming := generateEndpoints(method) |  | ||||||
| 			for _, endpoint := range endpoints { |  | ||||||
| 				gfile.P("{") |  | ||||||
| 				generateEndpoint(gfile, serviceName, method.GoName, endpoint, streaming) |  | ||||||
| 				gfile.P("},") |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	gfile.P("}") |  | ||||||
| 	gfile.P(")") |  | ||||||
| 	gfile.P() |  | ||||||
|  |  | ||||||
| 	gfile.P("func New", serviceName, "Endpoints()", "[]", microApiPackage.Ident("Endpoint"), "{") |  | ||||||
| 	gfile.P("return ", serviceName, "Endpoints") |  | ||||||
| 	gfile.P("}") |  | ||||||
| 	gfile.P() |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func generateEndpoints(method *protogen.Method) ([]*api_options.HttpRule, bool) { | func generateEndpoints(method *protogen.Method) ([]*api_options.HttpRule, bool) { | ||||||
| 	if method.Desc.Options() == nil { | 	if method.Desc.Options() == nil { | ||||||
| 		return nil, false | 		return nil, false | ||||||
| @@ -860,3 +862,10 @@ func (g *Generator) generateServiceDesc(gfile *protogen.GeneratedFile, file *pro | |||||||
| 	gfile.P("}") | 	gfile.P("}") | ||||||
| 	gfile.P() | 	gfile.P() | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func (g *Generator) generateServiceEndpoints(gfile *protogen.GeneratedFile, service *protogen.Service) { | ||||||
|  | 	serviceName := service.GoName | ||||||
|  | 	gfile.P("var (") | ||||||
|  | 	gfile.P(serviceName, "Name", "=", `"`, serviceName, `"`) | ||||||
|  | 	gfile.P(")") | ||||||
|  | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user