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

Function initSSEData

http/codegen/sse.go:66–156  ·  view source on GitHub ↗

initSSEData initializes the SSE related data in ed.

(ed *EndpointData, e *expr.HTTPEndpointExpr, sd *ServiceData)

Source from the content-addressed store, hash-verified

64
65// initSSEData initializes the SSE related data in ed.
66func initSSEData(ed *EndpointData, e *expr.HTTPEndpointExpr, sd *ServiceData) {
67 if e.SSE == nil {
68 return
69 }
70
71 md := ed.Method
72 svc := sd.Service
73
74 // Use streaming result type if different from result
75 var eventType *ResultData
76 var eventAttr *expr.AttributeExpr
77 if e.MethodExpr.HasMixedResults() && e.MethodExpr.StreamingResult != nil {
78 // For mixed results, use StreamingResult for SSE events
79 eventAttr = e.MethodExpr.StreamingResult
80 eventType = &ResultData{
81 Name: md.StreamingResult,
82 Ref: sd.Service.Scope.GoFullTypeRef(eventAttr, svc.PkgName),
83 IsStruct: expr.IsObject(eventAttr.Type),
84 }
85 } else {
86 // Use Result for SSE events (backward compatibility)
87 eventType = ed.Result
88 eventAttr = e.MethodExpr.Result
89 }
90
91 sendDesc := fmt.Sprintf("%s streams instances of %q to the %q endpoint SSE connection.", md.ServerStream.SendName, eventType.Name, md.Name)
92 sendWithContextDesc := fmt.Sprintf("%s streams instances of %q to the %q endpoint SSE connection with context.", md.ServerStream.SendWithContextName, eventType.Name, md.Name)
93 recvDesc := fmt.Sprintf("%s connects to the %q SSE endpoint and streams events.", md.ServerStream.RecvName, md.Name)
94
95 // Convert attribute names to Go field names
96 var dataFieldVar, dataFieldTypeRef, idFieldVar, eventFieldVar, retryFieldVar string
97 if obj := expr.AsObject(eventAttr.Type); obj != nil {
98 for _, nat := range *obj {
99 switch nat.Name {
100 case e.SSE.IDField:
101 idFieldVar = codegen.GoifyAtt(nat.Attribute, nat.Name, true)
102 case e.SSE.EventField:
103 eventFieldVar = codegen.GoifyAtt(nat.Attribute, nat.Name, true)
104 case e.SSE.RetryField:
105 retryFieldVar = codegen.GoifyAtt(nat.Attribute, nat.Name, true)
106 case e.SSE.DataField:
107 dataFieldVar = codegen.GoifyAtt(nat.Attribute, nat.Name, true)
108 dataFieldTypeRef = sd.Service.Scope.GoFullTypeRef(nat.Attribute, svc.PkgName)
109 }
110 }
111 }
112
113 // Determine if the Last-Event-ID mapped payload attribute is a primitive pointer
114 ridPtr := false
115 if e.SSE.RequestIDField != "" {
116 ridPtr = e.MethodExpr.Payload.IsPrimitivePointer(e.SSE.RequestIDField, true)
117 }
118
119 ed.SSE = &SSEData{
120 StructName: md.ServerStream.VarName,
121 Interface: fmt.Sprintf("%s.%s", svc.PkgName, md.ServerStream.Interface),
122 SendName: md.ServerStream.SendName,
123 SendDesc: sendDesc,

Callers 1

analyzeMethod · 0.85

Calls 6

IsObjectFunction · 0.92
AsObjectFunction · 0.92
GoifyAttFunction · 0.92
HasMixedResultsMethod · 0.80
GoFullTypeRefMethod · 0.80
IsPrimitivePointerMethod · 0.45

Tested by

no test coverage detected