From b73318248f1bac41bff427e5d0ec5cf2d7c0d621 Mon Sep 17 00:00:00 2001
From: Valera Shaitorov <shaitorov@perx.ru>
Date: Wed, 14 Jun 2023 15:19:40 +0700
Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?=
 =?UTF-8?q?=D0=BD=D0=B0=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8F=20?=
 =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D0=B4=D0=BE=D0=BF=20=D0=BE=D0=B1=D1=80?=
 =?UTF-8?q?=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B8=20=D0=BE=D1=88=D0=B8=D0=B1?=
 =?UTF-8?q?=D0=BA=D0=B8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 pkg/transport/http.go | 35 +++++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)
 create mode 100644 pkg/transport/http.go

diff --git a/pkg/transport/http.go b/pkg/transport/http.go
new file mode 100644
index 00000000..e8c3af2e
--- /dev/null
+++ b/pkg/transport/http.go
@@ -0,0 +1,35 @@
+package transport
+
+import (
+	"bytes"
+	"io"
+	"net/http"
+	"strings"
+
+	jsoniter "github.com/json-iterator/go"
+	"github.com/pkg/errors"
+)
+
+func DecodeError(r *http.Response) error {
+	if r.StatusCode >= 200 && r.StatusCode < 300 {
+		return nil
+	}
+
+	var buf bytes.Buffer
+	if _, err := io.Copy(&buf, io.LimitReader(r.Body, 1024)); err != nil {
+		return err
+	}
+
+	e := struct {
+		Error error `json:"error"`
+	}{}
+	if err := jsoniter.Unmarshal(buf.Bytes(), e); err != nil {
+		msg := strings.TrimSpace(buf.String())
+		if msg == "" {
+			msg = http.StatusText(r.StatusCode)
+		}
+		return errors.New(msg)
+	}
+
+	return e.Error
+}
-- 
GitLab