generateService generates all the code for the named service.
(file *generator.FileDescriptor, service *pb.ServiceDescriptorProto, index int)
| 119 | |
| 120 | // generateService generates all the code for the named service. |
| 121 | func (g *grpc) generateService(file *generator.FileDescriptor, service *pb.ServiceDescriptorProto, index int) { |
| 122 | path := fmt.Sprintf("6,%d", index) // 6 means service. |
| 123 | |
| 124 | origServName := service.GetName() |
| 125 | fullServName := origServName |
| 126 | if pkg := file.GetPackage(); pkg != "" { |
| 127 | fullServName = pkg + "." + fullServName |
| 128 | } |
| 129 | servName := generator.CamelCase(origServName) |
| 130 | deprecated := service.GetOptions().GetDeprecated() |
| 131 | |
| 132 | g.P() |
| 133 | g.P(fmt.Sprintf(`// %sClient is the client API for %s service. |
| 134 | // |
| 135 | // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.`, servName, servName)) |
| 136 | |
| 137 | // Client interface. |
| 138 | if deprecated { |
| 139 | g.P("//") |
| 140 | g.P(deprecationComment) |
| 141 | } |
| 142 | g.P("type ", servName, "Client interface {") |
| 143 | for i, method := range service.Method { |
| 144 | g.gen.PrintComments(fmt.Sprintf("%s,2,%d", path, i)) // 2 means method in a service. |
| 145 | if method.GetOptions().GetDeprecated() { |
| 146 | g.P("//") |
| 147 | g.P(deprecationComment) |
| 148 | } |
| 149 | g.P(g.generateClientSignature(servName, method)) |
| 150 | } |
| 151 | g.P("}") |
| 152 | g.P() |
| 153 | |
| 154 | // Client structure. |
| 155 | g.P("type ", unexport(servName), "Client struct {") |
| 156 | g.P("cc ", grpcPkg, ".ClientConnInterface") |
| 157 | g.P("}") |
| 158 | g.P() |
| 159 | |
| 160 | // NewClient factory. |
| 161 | if deprecated { |
| 162 | g.P(deprecationComment) |
| 163 | } |
| 164 | g.P("func New", servName, "Client (cc ", grpcPkg, ".ClientConnInterface) ", servName, "Client {") |
| 165 | g.P("return &", unexport(servName), "Client{cc}") |
| 166 | g.P("}") |
| 167 | g.P() |
| 168 | |
| 169 | var methodIndex, streamIndex int |
| 170 | serviceDescVar := "_" + servName + "_serviceDesc" |
| 171 | // Client method implementations. |
| 172 | for _, method := range service.Method { |
| 173 | var descExpr string |
| 174 | if !method.GetServerStreaming() && !method.GetClientStreaming() { |
| 175 | // Unary RPC method |
| 176 | descExpr = fmt.Sprintf("&%s.Methods[%d]", serviceDescVar, methodIndex) |
| 177 | methodIndex++ |
| 178 | } else { |
no test coverage detected