github.com/hhsnopek/up@v0.1.1/internal/proxy/lambda.go (about)

     1  // Package proxy provides API Gateway and Lambda interoperability.
     2  package proxy
     3  
     4  import (
     5  	"encoding/json"
     6  	"net/http"
     7  
     8  	"github.com/apex/go-apex"
     9  	"github.com/pkg/errors"
    10  )
    11  
    12  // TODO: recover() from panic and log / 500
    13  
    14  // NewHandler returns an apex.Handler.
    15  func NewHandler(h http.Handler) apex.Handler {
    16  	return apex.HandlerFunc(func(event json.RawMessage, ctx *apex.Context) (interface{}, error) {
    17  		e := new(Input)
    18  
    19  		err := json.Unmarshal(event, e)
    20  		if err != nil {
    21  			return nil, errors.Wrap(err, "parsing proxy event")
    22  		}
    23  
    24  		req, err := NewRequest(e)
    25  		if err != nil {
    26  			return nil, errors.Wrap(err, "creating new request from event")
    27  		}
    28  
    29  		// TODO: use same writer utility as rest?
    30  		res := NewResponse()
    31  		h.ServeHTTP(res, req)
    32  		return res.End(), nil
    33  	})
    34  }