| 12345678910111213141516171819202122232425262728293031323334353637 |
- package shared
- import (
- "encoding/json"
- "errors"
- "net/http"
- "syscall"
- "github.com/porter-dev/porter/api/server/shared/apierrors"
- "github.com/porter-dev/porter/api/server/shared/config"
- )
- type ResultWriter interface {
- WriteResult(w http.ResponseWriter, r *http.Request, v interface{})
- }
- // default generalizes response codes for common operations
- // (http.StatusOK, http.StatusCreated, etc)
- type DefaultResultWriter struct {
- config *config.Config
- }
- func NewDefaultResultWriter(conf *config.Config) ResultWriter {
- return &DefaultResultWriter{conf}
- }
- func (j *DefaultResultWriter) WriteResult(w http.ResponseWriter, r *http.Request, v interface{}) {
- err := json.NewEncoder(w).Encode(v)
- if errors.Is(err, syscall.EPIPE) || errors.Is(err, syscall.ECONNRESET) {
- // either a broken pipe error or econnreset, ignore. This means the client closed the connection while
- // the server was sending bytes.
- return
- } else if err != nil {
- apierrors.HandleAPIError(j.config, w, r, apierrors.NewErrInternal(err), true)
- }
- }
|