(ctx context.Context, resp http.ResponseWriter, req *http.Request)
| 222 | } |
| 223 | |
| 224 | func (s *echoServer) serveSayJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { |
| 225 | var err error |
| 226 | ctx = ctxsetters.WithMethodName(ctx, "Say") |
| 227 | ctx, err = callRequestRouted(ctx, s.hooks) |
| 228 | if err != nil { |
| 229 | s.writeError(ctx, resp, err) |
| 230 | return |
| 231 | } |
| 232 | |
| 233 | reqContent := new(Request) |
| 234 | unmarshaler := jsonpb.Unmarshaler{AllowUnknownFields: true} |
| 235 | if err = unmarshaler.Unmarshal(req.Body, reqContent); err != nil { |
| 236 | s.writeError(ctx, resp, malformedRequestError("the json request could not be decoded")) |
| 237 | return |
| 238 | } |
| 239 | |
| 240 | // Call service method |
| 241 | var respContent *Response |
| 242 | func() { |
| 243 | defer ensurePanicResponses(ctx, resp, s.hooks) |
| 244 | respContent, err = s.Echo.Say(ctx, reqContent) |
| 245 | }() |
| 246 | |
| 247 | if err != nil { |
| 248 | s.writeError(ctx, resp, err) |
| 249 | return |
| 250 | } |
| 251 | if respContent == nil { |
| 252 | s.writeError(ctx, resp, twirp.InternalError("received a nil *Response and nil error while calling Say. nil responses are not supported")) |
| 253 | return |
| 254 | } |
| 255 | |
| 256 | ctx = callResponsePrepared(ctx, s.hooks) |
| 257 | |
| 258 | var buf bytes.Buffer |
| 259 | marshaler := &jsonpb.Marshaler{OrigName: true} |
| 260 | if err = marshaler.Marshal(&buf, respContent); err != nil { |
| 261 | s.writeError(ctx, resp, wrapInternal(err, "failed to marshal json response")) |
| 262 | return |
| 263 | } |
| 264 | |
| 265 | ctx = ctxsetters.WithStatusCode(ctx, http.StatusOK) |
| 266 | respBytes := buf.Bytes() |
| 267 | resp.Header().Set("Content-Type", "application/json") |
| 268 | resp.Header().Set("Content-Length", strconv.Itoa(len(respBytes))) |
| 269 | resp.WriteHeader(http.StatusOK) |
| 270 | |
| 271 | if n, err := resp.Write(respBytes); err != nil { |
| 272 | msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) |
| 273 | twerr := twirp.NewError(twirp.Unknown, msg) |
| 274 | callError(ctx, s.hooks, twerr) |
| 275 | } |
| 276 | callResponseSent(ctx, s.hooks) |
| 277 | } |
| 278 | |
| 279 | func (s *echoServer) serveSayProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { |
| 280 | var err error |
no test coverage detected