MCPcopy Create free account
hub / github.com/goadesign/goa / buildStreamData

Method buildStreamData

grpc/codegen/service_data.go:1177–1297  ·  view source on GitHub ↗

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)

Source from the content-addressed store, hash-verified

1175//
1176// svr param indicates that the stream data is built for the server.
1177func (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 }

Callers 1

analyzeMethod · 0.95

Calls 10

buildInitDataMethod · 0.95
serviceTypeContextFunction · 0.85
resultContextFunction · 0.85
protoBufGoFullTypeNameFunction · 0.85
protoBufGoFullTypeRefFunction · 0.85
addValidationFunction · 0.85
PkgMethod · 0.80
NameMethod · 0.65
RefMethod · 0.65
EndpointMethod · 0.45

Tested by

no test coverage detected