in fiber/adapter.go [99:145]
func (f *FiberLambda) adaptor(w http.ResponseWriter, r *http.Request) {
// New fasthttp request
req := fasthttp.AcquireRequest()
defer fasthttp.ReleaseRequest(req)
// Convert net/http -> fasthttp request
body, err := ioutil.ReadAll(r.Body)
if err != nil {
http.Error(w, utils.StatusMessage(fiber.StatusInternalServerError), fiber.StatusInternalServerError)
return
}
req.Header.SetContentLength(len(body))
_, _ = req.BodyWriter().Write(body)
req.Header.SetMethod(r.Method)
req.SetRequestURI(r.RequestURI)
req.SetHost(r.Host)
for key, val := range r.Header {
for _, v := range val {
req.Header.Add(key, v)
}
}
remoteAddr, err := net.ResolveTCPAddr("tcp", r.RemoteAddr)
if err != nil {
http.Error(w, utils.StatusMessage(fiber.StatusInternalServerError), fiber.StatusInternalServerError)
return
}
// New fasthttp Ctx
var fctx fasthttp.RequestCtx
fctx.Init(req, remoteAddr, nil)
// Pass RequestCtx to Fiber router
f.app.Handler()(&fctx)
// Set response headers
fctx.Response.Header.VisitAll(func(k, v []byte) {
w.Header().Set(utils.UnsafeString(k), utils.UnsafeString(v))
})
// Set response statuscode
w.WriteHeader(fctx.Response.StatusCode())
// Set response body
_, _ = w.Write(fctx.Response.Body())
}