func (g *svcauth) setMessage(inputType *generator.Descriptor, path, input, output string, inputIsNullable bool) { var ( goPath string outputIsNullable bool ) goPath = input if inputIsNullable { g.P(`if `, goPath, `== nil {`) g.P(goPath, `= &`, g.gen.TypeName(inputType), `{}`) g.P(`}`) } for path != "" { // split path part := path idx := strings.IndexByte(path, '.') if idx >= 0 { part = path[:idx] path = path[idx+1:] } else { path = "" } // Get Field field := inputType.GetFieldDescriptor(part) if field == nil { g.gen.Fail("unknown field", part, "in message", inputType.GetName()) } if !field.IsMessage() { g.gen.Fail("expected a message") } // Append code fieldGoName := g.gen.GetFieldName(inputType, field) goPath += "." + fieldGoName inputType = g.messages[strings.TrimPrefix(field.GetTypeName(), ".")] if gogoproto.IsNullable(field) && path != "" { g.P(`if `, goPath, `== nil {`) g.P(goPath, `= &`, g.gen.TypeName(inputType), `{}`) g.P(`}`) } if gogoproto.IsNullable(field) { outputIsNullable = true } else { outputIsNullable = false } } if outputIsNullable { g.P(goPath, ` = `, output) } else { g.P(goPath, ` = &`, output) } }
func (g *svcauth) getMessage(inputType *generator.Descriptor, path, input, output string, inputIsNullable bool) { var ( checks []string goPath string isNullable = inputIsNullable ) if path == "." { g.P(output, ` = `, input) return } goPath = input if inputIsNullable { checks = append(checks, input+" != nil") } for path != "" { // split path part := path idx := strings.IndexByte(path, '.') if idx >= 0 { part = path[:idx] path = path[idx+1:] } else { path = "" } // Get Field field := inputType.GetFieldDescriptor(part) if field == nil { g.gen.Fail("unknown field", strconv.Quote(part), "in message", inputType.GetName()) } if !field.IsMessage() { g.gen.Fail("expected a message") } // Append code fieldGoName := g.gen.GetFieldName(inputType, field) goPath += "." + fieldGoName if gogoproto.IsNullable(field) { checks = append(checks, goPath+" != nil") isNullable = true } else { isNullable = false } inputType = g.messages[strings.TrimPrefix(field.GetTypeName(), ".")] } if len(checks) > 0 { g.P(`if `, strings.Join(checks, " && "), `{`) if isNullable { g.P(output, ` = `, goPath) } else { g.P(output, ` = &`, goPath) } g.P(`}`) } else { if isNullable { g.P(output, ` = `, goPath) } else { g.P(output, ` = &`, goPath) } } }