transport/grpc: directly return various errors
Peter Bourgon
7 years ago
78 | 78 |
|
79 | 79 |
req, err := c.enc(ctx, request)
|
80 | 80 |
if err != nil {
|
81 | |
return nil, fmt.Errorf("Encode: %v", err)
|
|
81 |
return nil, err
|
82 | 82 |
}
|
83 | 83 |
|
84 | 84 |
md := &metadata.MD{}
|
|
89 | 89 |
|
90 | 90 |
grpcReply := reflect.New(c.grpcReply).Interface()
|
91 | 91 |
if err = grpc.Invoke(ctx, c.method, req, grpcReply, c.client); err != nil {
|
92 | |
return nil, fmt.Errorf("Invoke: %v", err)
|
|
92 |
return nil, err
|
93 | 93 |
}
|
94 | 94 |
|
95 | 95 |
response, err := c.dec(ctx, grpcReply)
|
96 | 96 |
if err != nil {
|
97 | |
return nil, fmt.Errorf("Decode: %v", err)
|
|
97 |
return nil, err
|
98 | 98 |
}
|
99 | 99 |
return response, nil
|
100 | 100 |
}
|
91 | 91 |
request, err := s.dec(grpcCtx, req)
|
92 | 92 |
if err != nil {
|
93 | 93 |
s.logger.Log("err", err)
|
94 | |
return grpcCtx, nil, BadRequestError{err}
|
|
94 |
return grpcCtx, nil, err
|
95 | 95 |
}
|
96 | 96 |
|
97 | 97 |
response, err := s.e(ctx, request)
|
|
115 | 115 |
|
116 | 116 |
return grpcCtx, grpcResp, nil
|
117 | 117 |
}
|
118 | |
|
119 | |
// BadRequestError is an error in decoding the request.
|
120 | |
type BadRequestError struct {
|
121 | |
Err error
|
122 | |
}
|
123 | |
|
124 | |
// Error implements the error interface.
|
125 | |
func (err BadRequestError) Error() string {
|
126 | |
return err.Err.Error()
|
127 | |
}
|