func (setUserIP) ValidateContext(ctx Contexter) {
	var userIP userIP
	var err error
	ctx.SetContext(&userIP)
	ctx.SetContext(&err)
}
ValidateContext makes sure that ctx supports the needed types
package wrap
import (
	"fmt"
	"net"
	"net/http"
	"net/http/httptest"
	"strings"
)
type userIP net.IP
type context struct {
	http.ResponseWriter
	userIP userIP
	err    error
}
var _ ContextInjecter = &context{}
var _ = ValidateContextInjecter(&context{})
func (c *context) Context(ctxPtr interface{}) (found bool) {
	found = true  
	switch ty := ctxPtr.(type) {
	case *http.ResponseWriter:
		*ty = c.ResponseWriter
	case *userIP:
		if c.userIP == nil {
			return false
		}
		*ty = c.userIP
	case *error:
		if c.err == nil {
			return false
		}
		*ty = c.err
	default:
		panic(&ErrUnsupportedContextGetter{ctxPtr})
	}
	return
}
func (c *context) SetContext(ctxPtr interface{}) {
	switch ty := ctxPtr.(type) {
	case *userIP:
		c.userIP = *ty
	case *error:
		c.err = *ty
	default:
		panic(&ErrUnsupportedContextSetter{ctxPtr})
	}
}
func (c context) Wrap(next http.Handler) http.Handler {
	var f http.HandlerFunc
	f = func(rw http.ResponseWriter, req *http.Request) {
		next.ServeHTTP(&context{ResponseWriter: rw}, req)
	}
	return f
}
type setUserIP struct{}
var _ ContextWrapper = setUserIP{}