micro-server-http/options.go
Vasiliy Tolstov 0a59653c70 allow to set any message as error
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
2021-02-25 14:17:20 +03:00

55 lines
1.0 KiB
Go

package http
import (
"context"
"fmt"
"net/http"
"github.com/unistack-org/micro/v3/server"
)
type rspCodeKey struct{}
type rspCodeVal struct {
code int
}
func SetError(err interface{}) error {
return &Error{err: err}
}
type Error struct {
err interface{}
}
func (err *Error) Error() string {
return fmt.Sprintf("%v", err.err)
}
// SetRspCode saves response code in context, must be used by handler to specify http code
func SetRspCode(ctx context.Context, code int) {
if rsp, ok := ctx.Value(rspCodeKey{}).(*rspCodeVal); ok {
rsp.code = code
}
}
// GetRspCode used internally by generated http server handler
func GetRspCode(ctx context.Context) int {
var code int
if rsp, ok := ctx.Value(rspCodeKey{}).(*rspCodeVal); ok {
code = rsp.code
}
return code
}
type middlewareKey struct{}
func Middleware(mw ...func(http.Handler) http.Handler) server.Option {
return server.SetOption(middlewareKey{}, mw)
}
type serverKey struct{}
func Server(hs *http.Server) server.Option {
return server.SetOption(serverKey{}, hs)
}