buildStreamData builds the StreamData for the server and client streams. svr param indicates that the stream data is built for the server.
(e *expr.GRPCEndpointExpr, sd *ServiceData, svr bool)
| 1175 | // |
| 1176 | // svr param indicates that the stream data is built for the server. |
| 1177 | func (d *ServicesData) buildStreamData(e *expr.GRPCEndpointExpr, sd *ServiceData, svr bool) *StreamData { |
| 1178 | var ( |
| 1179 | varn string |
| 1180 | intName string |
| 1181 | svcInt string |
| 1182 | sendName string |
| 1183 | sendDesc string |
| 1184 | sendWithContextName string |
| 1185 | sendWithContextDesc string |
| 1186 | sendRef string |
| 1187 | sendConvert *ConvertData |
| 1188 | recvName string |
| 1189 | recvDesc string |
| 1190 | recvWithContextName string |
| 1191 | recvWithContextDesc string |
| 1192 | recvRef string |
| 1193 | recvConvert *ConvertData |
| 1194 | mustClose bool |
| 1195 | typ string |
| 1196 | ) |
| 1197 | svc := sd.Service |
| 1198 | ed := sd.Endpoint(e.Name()) |
| 1199 | md := ed.Method |
| 1200 | svcCtx := serviceTypeContext(svc.PkgName, svc.Scope) |
| 1201 | result, resCtx := resultContext(e, sd) |
| 1202 | resVar := "result" |
| 1203 | if md.ViewedResult != nil { |
| 1204 | resVar = "vresult" |
| 1205 | } |
| 1206 | if svr { |
| 1207 | typ = "server" |
| 1208 | varn = md.ServerStream.VarName |
| 1209 | intName = fmt.Sprintf("%s.%s_%sServer", sd.PkgName, svc.StructName, md.VarName) |
| 1210 | svcInt = fmt.Sprintf("%s.%s", svc.PkgName, md.ServerStream.Interface) |
| 1211 | if e.MethodExpr.Result.Type != expr.Empty { |
| 1212 | sendName = md.ServerStream.SendName |
| 1213 | sendRef = ed.ResultRef |
| 1214 | sendWithContextName = md.ServerStream.SendWithContextName |
| 1215 | sendConvert = &ConvertData{ |
| 1216 | SrcName: resCtx.Scope.Name(result, resCtx.Pkg(result), resCtx.Pointer, resCtx.UseDefault), |
| 1217 | SrcRef: resCtx.Scope.Ref(result, resCtx.Pkg(result)), |
| 1218 | TgtName: protoBufGoFullTypeName(e.Response.Message, sd.PkgName, sd.Scope), |
| 1219 | TgtRef: protoBufGoFullTypeRef(e.Response.Message, sd.PkgName, sd.Scope), |
| 1220 | Init: d.buildInitData(result, e.Response.Message, resVar, "v", resCtx, true, svr, true, sd), |
| 1221 | } |
| 1222 | } |
| 1223 | if e.MethodExpr.StreamingPayload.Type != expr.Empty { |
| 1224 | recvName = md.ServerStream.RecvName |
| 1225 | recvWithContextName = md.ServerStream.RecvWithContextName |
| 1226 | recvRef = svcCtx.Scope.Ref(e.MethodExpr.StreamingPayload, svcCtx.Pkg(e.MethodExpr.StreamingPayload)) |
| 1227 | recvConvert = &ConvertData{ |
| 1228 | SrcName: protoBufGoFullTypeName(e.StreamingRequest, sd.PkgName, sd.Scope), |
| 1229 | SrcRef: protoBufGoFullTypeRef(e.StreamingRequest, sd.PkgName, sd.Scope), |
| 1230 | TgtName: svcCtx.Scope.Name(e.MethodExpr.StreamingPayload, svcCtx.Pkg(e.MethodExpr.StreamingPayload), svcCtx.Pointer, svcCtx.UseDefault), |
| 1231 | TgtRef: recvRef, |
| 1232 | Init: d.buildInitData(e.StreamingRequest, e.MethodExpr.StreamingPayload, "v", "spayload", svcCtx, false, svr, true, sd), |
| 1233 | Validation: addValidation(e.StreamingRequest, "stream", sd, true), |
| 1234 | } |
no test coverage detected