Skip to content

Commit 7be6678

Browse files
authored
Merge pull request #2 from meysamhadeli/feat/add-fiber-problem-details-support
feat: add fiber problem details support
2 parents 3a8d9d3 + 7526db9 commit 7be6678

File tree

7 files changed

+443
-21
lines changed

7 files changed

+443
-21
lines changed

README.md

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,98 @@ problem.Map[custom_errors.BadRequestError](func() problem.ProblemDetailErr {
104104
})
105105
```
106106

107+
> ### Fiber
108+
#### Error Handler:
109+
For handling our error we need to specify an `Error Handler` on top of `Fiber` framework:
110+
```go
111+
// FiberErrorHandler middleware for handle problem details error on fiber
112+
func FiberErrorHandler(c fiber.Ctx) error {
113+
err := c.Next()
114+
115+
if err != nil {
116+
117+
// add custom map problem details here...
118+
119+
// resolve problem details error from response in fiber
120+
if _, err := problem.ResolveProblemDetails(fiber_helper.Response(c), fiber_helper.Request(c), err); err != nil {
121+
log.Error(err)
122+
}
123+
}
124+
125+
return nil
126+
}
127+
```
128+
129+
#### Map Status Code Error:
130+
131+
In this sample we map status code `StatusBadGateway` to `StatusUnauthorized` base on handler config to problem details error.
132+
133+
```go
134+
// handle specific status code to problem details error
135+
func sample1(c fiber.Ctx) error {
136+
err := errors.New("We have a specific status code error in our endpoint")
137+
return fiber.NewError(http.StatusBadGateway, err.Error())
138+
}
139+
```
140+
```go
141+
// problem details handler config
142+
problem.MapStatus(http.StatusBadGateway, func() problem.ProblemDetailErr {
143+
return &problem.ProblemDetail{
144+
Status: http.StatusUnauthorized,
145+
Title: "unauthorized",
146+
Detail: error.Error(),
147+
}
148+
})
149+
```
150+
#### Map Custom Type Error:
151+
152+
In this sample we map custom error type to problem details error.
153+
154+
```go
155+
// handle custom type error to problem details error
156+
func sample2(c fiber.Ctx) error {
157+
err := errors.New("We have a custom type error in our endpoint")
158+
return custom_errors.BadRequestError{InternalError: err}
159+
}
160+
```
161+
```go
162+
// problem details handler config
163+
problem.Map[custom_errors.BadRequestError](func() problem.ProblemDetailErr {
164+
return &problem.ProblemDetail{
165+
Status: http.StatusBadRequest,
166+
Title: "bad request",
167+
Detail: error.Error(),
168+
}
169+
})
170+
```
171+
172+
> ### Custom Problem Details:
173+
174+
We support custom problem details error for create more flexibility response error:
175+
```go
176+
// custom problem details
177+
type CustomProblemDetail struct {
178+
problem.ProblemDetailErr
179+
Description string `json:"description,omitempty"`
180+
AdditionalInfo string `json:"additionalInfo,omitempty"`
181+
}
182+
```
183+
```go
184+
// problem details handler config
185+
problem.Map[custom_errors.ConflictError](func() problem.ProblemDetailErr {
186+
return &custom_problems.CustomProblemDetail{
187+
ProblemDetailErr: &problem.ProblemDetail{
188+
Status: http.StatusConflict,
189+
Title: "conflict",
190+
Detail: error.Error(),
191+
},
192+
AdditionalInfo: "some additional info...",
193+
Description: "some description...",
194+
}
195+
})
196+
```
197+
198+
107199
> ### Gin
108200
#### Error Handler:
109201
For handling our error we need to specify an `Error Handler` on top of `Gin` framework:

fiber-helper/helper.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package fiber_helper
2+
3+
import (
4+
"github.com/gofiber/fiber/v3"
5+
"net/http"
6+
"net/url"
7+
)
8+
9+
type fiberResponseWriter struct {
10+
ctx fiber.Ctx
11+
written bool
12+
headers http.Header
13+
}
14+
15+
func Response(c fiber.Ctx) *fiberResponseWriter {
16+
return &fiberResponseWriter{
17+
ctx: c,
18+
headers: make(http.Header),
19+
}
20+
}
21+
22+
func (f *fiberResponseWriter) Header() http.Header {
23+
return f.headers
24+
}
25+
26+
func (f *fiberResponseWriter) Write(data []byte) (int, error) {
27+
f.written = true
28+
return f.ctx.Response().BodyWriter().Write(data)
29+
}
30+
31+
func (f *fiberResponseWriter) WriteHeader(statusCode int) {
32+
f.written = true
33+
f.ctx.Status(statusCode)
34+
}
35+
36+
func Request(c fiber.Ctx) *http.Request {
37+
fiberURI := c.Request().URI()
38+
parsedURL, _ := url.Parse(string(fiberURI.FullURI()))
39+
40+
return &http.Request{
41+
Method: c.Method(),
42+
URL: parsedURL,
43+
Header: make(http.Header),
44+
RequestURI: string(c.Request().RequestURI()),
45+
}
46+
}

go.mod

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,42 +4,53 @@ go 1.23.2
44

55
require (
66
github.com/gin-gonic/gin v1.10.0
7+
github.com/gofiber/fiber/v3 v3.0.0-beta.4
78
github.com/labstack/echo/v4 v4.12.0
89
github.com/labstack/gommon v0.4.2
910
github.com/pkg/errors v0.9.1
10-
github.com/stretchr/testify v1.9.0
11+
github.com/stretchr/testify v1.10.0
12+
github.com/valyala/fasthttp v1.62.0
1113
)
1214

1315
require (
16+
github.com/andybalholm/brotli v1.1.1 // indirect
1417
github.com/bytedance/sonic v1.12.3 // indirect
1518
github.com/bytedance/sonic/loader v0.2.1 // indirect
1619
github.com/cloudwego/base64x v0.1.4 // indirect
1720
github.com/cloudwego/iasm v0.2.0 // indirect
1821
github.com/davecgh/go-spew v1.1.1 // indirect
22+
github.com/fxamacker/cbor/v2 v2.8.0 // indirect
1923
github.com/gabriel-vasile/mimetype v1.4.6 // indirect
2024
github.com/gin-contrib/sse v0.1.0 // indirect
2125
github.com/go-playground/locales v0.14.1 // indirect
2226
github.com/go-playground/universal-translator v0.18.1 // indirect
2327
github.com/go-playground/validator/v10 v10.22.1 // indirect
2428
github.com/goccy/go-json v0.10.3 // indirect
29+
github.com/gofiber/schema v1.3.0 // indirect
30+
github.com/gofiber/utils/v2 v2.0.0-beta.8 // indirect
31+
github.com/google/uuid v1.6.0 // indirect
2532
github.com/json-iterator/go v1.1.12 // indirect
33+
github.com/klauspost/compress v1.18.0 // indirect
2634
github.com/klauspost/cpuid/v2 v2.2.8 // indirect
2735
github.com/leodido/go-urn v1.4.0 // indirect
28-
github.com/mattn/go-colorable v0.1.13 // indirect
36+
github.com/mattn/go-colorable v0.1.14 // indirect
2937
github.com/mattn/go-isatty v0.0.20 // indirect
3038
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
3139
github.com/modern-go/reflect2 v1.0.2 // indirect
3240
github.com/pelletier/go-toml/v2 v2.2.3 // indirect
41+
github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c // indirect
3342
github.com/pmezard/go-difflib v1.0.0 // indirect
43+
github.com/tinylib/msgp v1.2.5 // indirect
3444
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
3545
github.com/ugorji/go/codec v1.2.12 // indirect
3646
github.com/valyala/bytebufferpool v1.0.0 // indirect
3747
github.com/valyala/fasttemplate v1.2.2 // indirect
48+
github.com/x448/float16 v0.8.4 // indirect
3849
golang.org/x/arch v0.11.0 // indirect
39-
golang.org/x/crypto v0.28.0 // indirect
40-
golang.org/x/net v0.30.0 // indirect
41-
golang.org/x/sys v0.26.0 // indirect
42-
golang.org/x/text v0.19.0 // indirect
50+
golang.org/x/crypto v0.38.0 // indirect
51+
golang.org/x/net v0.40.0 // indirect
52+
golang.org/x/sys v0.33.0 // indirect
53+
golang.org/x/text v0.25.0 // indirect
4354
google.golang.org/protobuf v1.35.1 // indirect
4455
gopkg.in/yaml.v3 v3.0.1 // indirect
4556
)

go.sum

Lines changed: 36 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
github.com/andybalholm/brotli v1.1.1 h1:PR2pgnyFznKEugtsUo0xLdDop5SKXd5Qf5ysW+7XdTA=
2+
github.com/andybalholm/brotli v1.1.1/go.mod h1:05ib4cKhjx3OQYUY22hTVd34Bc8upXjOLL2rKwwZBoA=
13
github.com/bytedance/sonic v1.12.3 h1:W2MGa7RCU1QTeYRTPE3+88mVC0yXmsRQRChiyVocVjU=
24
github.com/bytedance/sonic v1.12.3/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk=
35
github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU=
@@ -10,6 +12,8 @@ github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQ
1012
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
1113
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
1214
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
15+
github.com/fxamacker/cbor/v2 v2.8.0 h1:fFtUGXUzXPHTIUdne5+zzMPTfffl3RD5qYnkY40vtxU=
16+
github.com/fxamacker/cbor/v2 v2.8.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ=
1317
github.com/gabriel-vasile/mimetype v1.4.6 h1:3+PzJTKLkvgjeTbts6msPJt4DixhT4YtFNf1gtGe3zc=
1418
github.com/gabriel-vasile/mimetype v1.4.6/go.mod h1:JX1qVKqZd40hUPpAfiNTe0Sne7hdfKSbOqqmkq8GCXc=
1519
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
@@ -26,11 +30,21 @@ github.com/go-playground/validator/v10 v10.22.1 h1:40JcKH+bBNGFczGuoBYgX4I6m/i27
2630
github.com/go-playground/validator/v10 v10.22.1/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM=
2731
github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA=
2832
github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
33+
github.com/gofiber/fiber/v3 v3.0.0-beta.4 h1:KzDSavvhG7m81NIsmnu5l3ZDbVS4feCidl4xlIfu6V0=
34+
github.com/gofiber/fiber/v3 v3.0.0-beta.4/go.mod h1:/WFUoHRkZEsGHyy2+fYcdqi109IVOFbVwxv1n1RU+kk=
35+
github.com/gofiber/schema v1.3.0 h1:K3F3wYzAY+aivfCCEHPufCthu5/13r/lzp1nuk6mr3Q=
36+
github.com/gofiber/schema v1.3.0/go.mod h1:YYwj01w3hVfaNjhtJzaqetymL56VW642YS3qZPhuE6c=
37+
github.com/gofiber/utils/v2 v2.0.0-beta.8 h1:ZifwbHZqZO3YJsx1ZhDsWnPjaQ7C0YD20LHt+DQeXOU=
38+
github.com/gofiber/utils/v2 v2.0.0-beta.8/go.mod h1:1lCBo9vEF4RFEtTgWntipnaScJZQiM8rrsYycLZ4n9c=
2939
github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
3040
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
3141
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
42+
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
43+
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
3244
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
3345
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
46+
github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
47+
github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
3448
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
3549
github.com/klauspost/cpuid/v2 v2.2.8 h1:+StwCXwm9PdpiEkPyzBXIy+M9KUb4ODm0Zarf1kS5BM=
3650
github.com/klauspost/cpuid/v2 v2.2.8/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
@@ -41,9 +55,8 @@ github.com/labstack/gommon v0.4.2 h1:F8qTUNXgG1+6WQmqoUWnz8WiEU60mXVVw0P4ht1WRA0
4155
github.com/labstack/gommon v0.4.2/go.mod h1:QlUFxVM+SNXhDL/Z7YhocGIBYOiwB0mXm1+1bAPHPyU=
4256
github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=
4357
github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI=
44-
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
45-
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
46-
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
58+
github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=
59+
github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
4760
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
4861
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
4962
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -53,6 +66,8 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
5366
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
5467
github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M=
5568
github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc=
69+
github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c h1:dAMKvw0MlJT1GshSTtih8C2gDs04w8dReiOGXrGLNoY=
70+
github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c/go.mod h1:RqIHx9QI14HlwKwm98g9Re5prTQ6LdeRQn+gXJFxsJM=
5671
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
5772
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
5873
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
@@ -65,29 +80,36 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
6580
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
6681
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
6782
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
68-
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
69-
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
83+
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
84+
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
85+
github.com/tinylib/msgp v1.2.5 h1:WeQg1whrXRFiZusidTQqzETkRpGjFjcIhW6uqWH09po=
86+
github.com/tinylib/msgp v1.2.5/go.mod h1:ykjzy2wzgrlvpDCRc4LA8UXy6D8bzMSuAF3WD57Gok0=
7087
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
7188
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
7289
github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE=
7390
github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
7491
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
7592
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
93+
github.com/valyala/fasthttp v1.62.0 h1:8dKRBX/y2rCzyc6903Zu1+3qN0H/d2MsxPPmVNamiH0=
94+
github.com/valyala/fasthttp v1.62.0/go.mod h1:FCINgr4GKdKqV8Q0xv8b+UxPV+H/O5nNFo3D+r54Htg=
7695
github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo=
7796
github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ=
97+
github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
98+
github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
99+
github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU=
100+
github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E=
78101
golang.org/x/arch v0.11.0 h1:KXV8WWKCXm6tRpLirl2szsO5j/oOODwZf4hATmGVNs4=
79102
golang.org/x/arch v0.11.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=
80-
golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw=
81-
golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U=
82-
golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4=
83-
golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU=
84-
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
103+
golang.org/x/crypto v0.38.0 h1:jt+WWG8IZlBnVbomuhg2Mdq0+BBQaHbtqHEFEigjUV8=
104+
golang.org/x/crypto v0.38.0/go.mod h1:MvrbAqul58NNYPKnOra203SB9vpuZW0e+RRZV+Ggqjw=
105+
golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY=
106+
golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds=
85107
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
86108
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
87-
golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo=
88-
golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
89-
golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM=
90-
golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
109+
golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
110+
golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
111+
golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4=
112+
golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA=
91113
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
92114
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
93115
google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA=

problem_details.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"encoding/json"
55
"fmt"
66
"github.com/gin-gonic/gin"
7+
"github.com/gofiber/fiber/v3"
78
"github.com/labstack/echo/v4"
89
"github.com/pkg/errors"
910
"net/http"
@@ -127,8 +128,12 @@ func ResolveProblemDetails(w http.ResponseWriter, r *http.Request, err error) (P
127128
var statusCode int = http.StatusInternalServerError
128129
var echoError *echo.HTTPError
129130
var ginError *gin.Error
131+
var fiberError *fiber.Error
130132

131-
if errors.As(err, &echoError) {
133+
if errors.As(err, &fiberError) {
134+
statusCode = fiberError.Code
135+
err = errors.New(fiberError.Message)
136+
} else if errors.As(err, &echoError) {
132137
statusCode = err.(*echo.HTTPError).Code
133138
err = err.(*echo.HTTPError).Message.(error)
134139
} else if errors.As(err, &ginError) {

0 commit comments

Comments
 (0)