Skip to content

Commit 7298b5a

Browse files
authored
Fix goa error namer (goadesign#3153)
* Fix issues with GoaErrorNamer adapter * Fix tests
1 parent 6c3f880 commit 7298b5a

File tree

4 files changed

+36
-24
lines changed

4 files changed

+36
-24
lines changed

grpc/codegen/server.go

+9-3
Original file line numberDiff line numberDiff line change
@@ -220,11 +220,17 @@ type GoaErrorNamer interface {
220220
GoaErrorName() string
221221
}
222222
223-
type adaptErrorNamer ErrorName
223+
type adaptErrorNamer struct {
224+
ErrorNamer
225+
}
224226
225227
func (err adaptErrorNamer) GoaErrorName() string {
226228
return err.ErrorName()
227229
}
230+
231+
func (err adaptErrorNamer) Error() string {
232+
return err.ErrorNamer.(error).Error()
233+
}
228234
`
229235

230236
// input: ServiceData
@@ -281,8 +287,8 @@ func (s *{{ .ServerStruct }}) {{ .Method.VarName }}(
281287
if err != nil {
282288
{{- if .Errors }}
283289
var deprecatedErrorNamer ErrorNamer
284-
if errors.As(v, &deprecatedErrorNamer) {
285-
v = adaptErrorNamer(deprecatedErrorNamer)
290+
if errors.As(err, &deprecatedErrorNamer) {
291+
err = adaptErrorNamer{deprecatedErrorNamer}
286292
}
287293
var en GoaErrorNamer
288294
if errors.As(err, &en) {

grpc/codegen/testdata/server_interface_code.go

+8-8
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,8 @@ func (s *Server) MethodUnaryRPCWithErrors(ctx context.Context, message *service_
5959
resp, err := s.MethodUnaryRPCWithErrorsH.Handle(ctx, message)
6060
if err != nil {
6161
var deprecatedErrorNamer ErrorNamer
62-
if errors.As(v, &deprecatedErrorNamer) {
63-
v = adaptErrorNamer(deprecatedErrorNamer)
62+
if errors.As(err, &deprecatedErrorNamer) {
63+
err = adaptErrorNamer{deprecatedErrorNamer}
6464
}
6565
var en GoaErrorNamer
6666
if errors.As(err, &en) {
@@ -97,8 +97,8 @@ func (s *Server) MethodUnaryRPCWithOverridingErrors(ctx context.Context, message
9797
resp, err := s.MethodUnaryRPCWithOverridingErrorsH.Handle(ctx, message)
9898
if err != nil {
9999
var deprecatedErrorNamer ErrorNamer
100-
if errors.As(v, &deprecatedErrorNamer) {
101-
v = adaptErrorNamer(deprecatedErrorNamer)
100+
if errors.As(err, &deprecatedErrorNamer) {
101+
err = adaptErrorNamer{deprecatedErrorNamer}
102102
}
103103
var en GoaErrorNamer
104104
if errors.As(err, &en) {
@@ -240,8 +240,8 @@ func (s *Server) MethodBidirectionalStreamingRPCWithErrors(stream service_bidire
240240
_, err := s.MethodBidirectionalStreamingRPCWithErrorsH.Decode(ctx, nil)
241241
if err != nil {
242242
var deprecatedErrorNamer ErrorNamer
243-
if errors.As(v, &deprecatedErrorNamer) {
244-
v = adaptErrorNamer(deprecatedErrorNamer)
243+
if errors.As(err, &deprecatedErrorNamer) {
244+
err = adaptErrorNamer{deprecatedErrorNamer}
245245
}
246246
var en GoaErrorNamer
247247
if errors.As(err, &en) {
@@ -262,8 +262,8 @@ func (s *Server) MethodBidirectionalStreamingRPCWithErrors(stream service_bidire
262262
err = s.MethodBidirectionalStreamingRPCWithErrorsH.Handle(ctx, ep)
263263
if err != nil {
264264
var deprecatedErrorNamer ErrorNamer
265-
if errors.As(v, &deprecatedErrorNamer) {
266-
v = adaptErrorNamer(deprecatedErrorNamer)
265+
if errors.As(err, &deprecatedErrorNamer) {
266+
err = adaptErrorNamer{deprecatedErrorNamer}
267267
}
268268
var en GoaErrorNamer
269269
if errors.As(err, &en) {

http/codegen/server.go

+8-2
Original file line numberDiff line numberDiff line change
@@ -291,11 +291,17 @@ type GoaErrorNamer interface {
291291
GoaErrorName() string
292292
}
293293
294-
type adaptErrorNamer ErrorName
294+
type adaptErrorNamer struct {
295+
ErrorNamer
296+
}
295297
296298
func (err adaptErrorNamer) GoaErrorName() string {
297299
return err.ErrorName()
298300
}
301+
302+
func (err adaptErrorNamer) Error() string {
303+
return err.ErrorNamer.(error).Error()
304+
}
299305
`
300306

301307
// input: ServiceData
@@ -1219,7 +1225,7 @@ func {{ .ErrorEncoder }}(encoder func(context.Context, http.ResponseWriter) goah
12191225
return func(ctx context.Context, w http.ResponseWriter, v error) error {
12201226
var deprecatedErrorNamer ErrorNamer
12211227
if errors.As(v, &deprecatedErrorNamer) {
1222-
v = adaptErrorNamer(deprecatedErrorNamer)
1228+
v = adaptErrorNamer{deprecatedErrorNamer}
12231229
}
12241230
var en GoaErrorNamer
12251231
if !errors.As(v, &en) {

http/codegen/testdata/error_encoder_code.go

+11-11
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ func EncodeMethodPrimitiveErrorResponseError(encoder func(context.Context, http.
88
return func(ctx context.Context, w http.ResponseWriter, v error) error {
99
var deprecatedErrorNamer ErrorNamer
1010
if errors.As(v, &deprecatedErrorNamer) {
11-
v = adaptErrorNamer(deprecatedErrorNamer)
11+
v = adaptErrorNamer{deprecatedErrorNamer}
1212
}
1313
var en GoaErrorNamer
1414
if !errors.As(v, &en) {
@@ -46,7 +46,7 @@ func EncodeMethodPrimitiveErrorInResponseHeaderError(encoder func(context.Contex
4646
return func(ctx context.Context, w http.ResponseWriter, v error) error {
4747
var deprecatedErrorNamer ErrorNamer
4848
if errors.As(v, &deprecatedErrorNamer) {
49-
v = adaptErrorNamer(deprecatedErrorNamer)
49+
v = adaptErrorNamer{deprecatedErrorNamer}
5050
}
5151
var en GoaErrorNamer
5252
if !errors.As(v, &en) {
@@ -90,7 +90,7 @@ func EncodeMethodAPIPrimitiveErrorResponseError(encoder func(context.Context, ht
9090
return func(ctx context.Context, w http.ResponseWriter, v error) error {
9191
var deprecatedErrorNamer ErrorNamer
9292
if errors.As(v, &deprecatedErrorNamer) {
93-
v = adaptErrorNamer(deprecatedErrorNamer)
93+
v = adaptErrorNamer{deprecatedErrorNamer}
9494
}
9595
var en GoaErrorNamer
9696
if !errors.As(v, &en) {
@@ -132,7 +132,7 @@ func EncodeMethodDefaultErrorResponseError(encoder func(context.Context, http.Re
132132
return func(ctx context.Context, w http.ResponseWriter, v error) error {
133133
var deprecatedErrorNamer ErrorNamer
134134
if errors.As(v, &deprecatedErrorNamer) {
135-
v = adaptErrorNamer(deprecatedErrorNamer)
135+
v = adaptErrorNamer{deprecatedErrorNamer}
136136
}
137137
var en GoaErrorNamer
138138
if !errors.As(v, &en) {
@@ -166,7 +166,7 @@ func EncodeMethodDefaultErrorResponseError(encoder func(context.Context, http.Re
166166
return func(ctx context.Context, w http.ResponseWriter, v error) error {
167167
var deprecatedErrorNamer ErrorNamer
168168
if errors.As(v, &deprecatedErrorNamer) {
169-
v = adaptErrorNamer(deprecatedErrorNamer)
169+
v = adaptErrorNamer{deprecatedErrorNamer}
170170
}
171171
var en GoaErrorNamer
172172
if !errors.As(v, &en) {
@@ -201,7 +201,7 @@ func EncodeMethodServiceErrorResponseError(encoder func(context.Context, http.Re
201201
return func(ctx context.Context, w http.ResponseWriter, v error) error {
202202
var deprecatedErrorNamer ErrorNamer
203203
if errors.As(v, &deprecatedErrorNamer) {
204-
v = adaptErrorNamer(deprecatedErrorNamer)
204+
v = adaptErrorNamer{deprecatedErrorNamer}
205205
}
206206
var en GoaErrorNamer
207207
if !errors.As(v, &en) {
@@ -248,7 +248,7 @@ func EncodeMethodServiceErrorResponseError(encoder func(context.Context, http.Re
248248
return func(ctx context.Context, w http.ResponseWriter, v error) error {
249249
var deprecatedErrorNamer ErrorNamer
250250
if errors.As(v, &deprecatedErrorNamer) {
251-
v = adaptErrorNamer(deprecatedErrorNamer)
251+
v = adaptErrorNamer{deprecatedErrorNamer}
252252
}
253253
var en GoaErrorNamer
254254
if !errors.As(v, &en) {
@@ -296,7 +296,7 @@ func EncodeMethodServiceErrorResponseError(encoder func(context.Context, http.Re
296296
return func(ctx context.Context, w http.ResponseWriter, v error) error {
297297
var deprecatedErrorNamer ErrorNamer
298298
if errors.As(v, &deprecatedErrorNamer) {
299-
v = adaptErrorNamer(deprecatedErrorNamer)
299+
v = adaptErrorNamer{deprecatedErrorNamer}
300300
}
301301
var en GoaErrorNamer
302302
if !errors.As(v, &en) {
@@ -326,7 +326,7 @@ func EncodeMethodServiceErrorResponseError(encoder func(context.Context, http.Re
326326
return func(ctx context.Context, w http.ResponseWriter, v error) error {
327327
var deprecatedErrorNamer ErrorNamer
328328
if errors.As(v, &deprecatedErrorNamer) {
329-
v = adaptErrorNamer(deprecatedErrorNamer)
329+
v = adaptErrorNamer{deprecatedErrorNamer}
330330
}
331331
var en GoaErrorNamer
332332
if !errors.As(v, &en) {
@@ -358,7 +358,7 @@ func EncodeMethodEmptyErrorResponseBodyError(encoder func(context.Context, http.
358358
return func(ctx context.Context, w http.ResponseWriter, v error) error {
359359
var deprecatedErrorNamer ErrorNamer
360360
if errors.As(v, &deprecatedErrorNamer) {
361-
v = adaptErrorNamer(deprecatedErrorNamer)
361+
v = adaptErrorNamer{deprecatedErrorNamer}
362362
}
363363
var en GoaErrorNamer
364364
if !errors.As(v, &en) {
@@ -415,7 +415,7 @@ func EncodeMethodEmptyCustomErrorResponseBodyError(encoder func(context.Context,
415415
return func(ctx context.Context, w http.ResponseWriter, v error) error {
416416
var deprecatedErrorNamer ErrorNamer
417417
if errors.As(v, &deprecatedErrorNamer) {
418-
v = adaptErrorNamer(deprecatedErrorNamer)
418+
v = adaptErrorNamer{deprecatedErrorNamer}
419419
}
420420
var en GoaErrorNamer
421421
if !errors.As(v, &en) {

0 commit comments

Comments
 (0)