made go client code generation a little safer, by prepending service names in front of request and repsonse types

This commit is contained in:
Jan Halfar 2016-12-23 09:37:12 +01:00
parent d4a086d569
commit 321c12f08b

38
go.go
View File

@ -483,13 +483,13 @@ func renderGoRPCServiceProxies(services map[string]*Service, fullPackageName str
// Request & Response types // Request & Response types
for _, method := range service.Methods { for _, method := range service.Methods {
// Request type // Request type
g.l(ucfirst(method.Name) + `Request struct {`) g.l(ucfirst(service.Name+method.Name) + `Request struct {`)
for _, a := range method.Args { for _, a := range method.Args {
g.l(ucfirst(a.Name) + ` ` + a.Value.goType(aliases, fullPackageName)) g.l(ucfirst(a.Name) + ` ` + a.Value.goType(aliases, fullPackageName))
} }
g.l(`}`) g.l(`}`)
// Response type // Response type
g.l(ucfirst(method.Name) + `Response struct {`) g.l(ucfirst(service.Name+method.Name) + `Response struct {`)
for i, r := range method.Return { for i, r := range method.Return {
name := r.Name name := r.Name
if len(name) == 0 { if len(name) == 0 {
@ -505,8 +505,8 @@ func renderGoRPCServiceProxies(services map[string]*Service, fullPackageName str
// Init // Init
g.l(`func init() {`) g.l(`func init() {`)
for _, method := range service.Methods { for _, method := range service.Methods {
g.l(`gob.Register(` + ucfirst(method.Name) + `Request{})`) g.l(`gob.Register(` + ucfirst(service.Name+method.Name) + `Request{})`)
g.l(`gob.Register(` + ucfirst(method.Name) + `Response{})`) g.l(`gob.Register(` + ucfirst(service.Name+method.Name) + `Response{})`)
} }
g.l(`}`) g.l(`}`)
// Constructor // Constructor
@ -562,16 +562,16 @@ func renderGoRPCServiceProxies(services map[string]*Service, fullPackageName str
rets = append(rets, name) rets = append(rets, name)
retParams = append(retParams, ucfirst(name)+`: `+name) retParams = append(retParams, ucfirst(name)+`: `+name)
} }
g.l(`case "` + method.Name + `Request":`) g.l(`case "` + service.Name + method.Name + `Request":`)
if len(argParams) > 0 { if len(argParams) > 0 {
g.l(`req := request.(` + method.Name + `Request)`) g.l(`req := request.(` + service.Name + method.Name + `Request)`)
} }
if len(rets) > 0 { if len(rets) > 0 {
g.l(strings.Join(rets, ", ") + ` := p.service.` + method.Name + `(`+strings.Join(argParams, ", ")+`)`) g.l(strings.Join(rets, ", ") + ` := p.service.` + method.Name + `(` + strings.Join(argParams, ", ") + `)`)
} else { } else {
g.l(`p.service.` + method.Name + `(`+strings.Join(argParams, ", ")+`)`) g.l(`p.service.` + method.Name + `(` + strings.Join(argParams, ", ") + `)`)
} }
g.l(`response = ` + method.Name + `Response{`+strings.Join(retParams, ", ")+`}`) g.l(`response = ` + service.Name + method.Name + `Response{` + strings.Join(retParams, ", ") + `}`)
} }
g.l(`default:`) g.l(`default:`)
g.l(`fmt.Println("Unkown request type", reflect.TypeOf(request).String())`) g.l(`fmt.Println("Unkown request type", reflect.TypeOf(request).String())`)
@ -658,8 +658,8 @@ func renderGoRPCServiceClients(services map[string]*Service, fullPackageName str
args := []string{} args := []string{}
params := []string{} params := []string{}
for _, a := range method.Args { for _, a := range method.Args {
args = append(args, ucfirst(a.Name) + `: ` + a.Name) args = append(args, ucfirst(a.Name)+`: `+a.Name)
params = append(params, a.Name + " " + a.Value.goType(aliases, fullPackageName)) params = append(params, a.Name+" "+a.Value.goType(aliases, fullPackageName))
} }
rets := []string{} rets := []string{}
returns := []string{} returns := []string{}
@ -668,23 +668,23 @@ func renderGoRPCServiceClients(services map[string]*Service, fullPackageName str
if len(name) == 0 { if len(name) == 0 {
name = fmt.Sprintf("ret%s_%d", method.Name, i) name = fmt.Sprintf("ret%s_%d", method.Name, i)
} }
rets = append(rets, "response." + ucfirst(name)) rets = append(rets, "response."+ucfirst(name))
returns = append(returns, name + " " + r.Value.goType(aliases, fullPackageName)) returns = append(returns, name+" "+r.Value.goType(aliases, fullPackageName))
} }
returns = append(returns, "clientErr error") returns = append(returns, "clientErr error")
g.l(`func (c *` + clientName + `) ` + method.Name + `(` + strings.Join(params, ", ") + `) (` + strings.Join(returns, ", ") + `) {`) g.l(`func (c *` + clientName + `) ` + method.Name + `(` + strings.Join(params, ", ") + `) (` + strings.Join(returns, ", ") + `) {`)
g.l(`req := ` + method.Name + `Request{` + strings.Join(args, ", ") + `}`) g.l(`req := ` + service.Name + method.Name + `Request{` + strings.Join(args, ", ") + `}`)
if len(rets) > 0 { if len(rets) > 0 {
g.l(`res, err := c.client.Call(req)`) g.l(`rpcCallRes, rpcCallErr := c.client.Call(req)`)
} else { } else {
g.l(`_, err := c.client.Call(req)`) g.l(`_, rpcCallErr := c.client.Call(req)`)
} }
g.l(`if err != nil {`) g.l(`if rpcCallErr != nil {`)
g.l(`clientErr = err`) g.l(`clientErr = rpcCallErr`)
g.l(`return`) g.l(`return`)
g.l(`}`) g.l(`}`)
if len(rets) > 0 { if len(rets) > 0 {
g.l(`response := res.(` + method.Name + `Response)`) g.l(`response := rpcCallRes.(` + service.Name + method.Name + `Response)`)
g.l(`return ` + strings.Join(rets, ", ") + `, nil`) g.l(`return ` + strings.Join(rets, ", ") + `, nil`)
} else { } else {
g.l(`return nil`) g.l(`return nil`)