gorillamux

package
v0.0.0-...-6ed38a2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 27, 2022 License: MIT Imports: 14 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	CatchPanics       = true
	PrettyPrint       = true
	PrettyPrintIndent = "  "
)

Functions

func CommandHandler

func CommandHandler(commandFunc interface{}, args command.Args, resultsWriter ResultsWriter, errHandlers ...httperr.Handler) http.HandlerFunc

func CommandHandlerRequestBodyArg

func CommandHandlerRequestBodyArg(bodyConverter RequestBodyArgConverter, commandFunc interface{}, args command.Args, resultsWriter ResultsWriter, errHandlers ...httperr.Handler) http.HandlerFunc

func CommandHandlerWithQueryParams

func CommandHandlerWithQueryParams(commandFunc interface{}, args command.Args, resultsWriter ResultsWriter, errHandlers ...httperr.Handler) http.HandlerFunc

func DetectContentType

func DetectContentType(data []byte) string

DetectContentType tries to detect the MIME content-type of data, or returns "application/octet-stream" if none could be identified.

func JSONBodyFieldsAsVars

func JSONBodyFieldsAsVars(wrappedHandler http.Handler) http.HandlerFunc

func MapJSONBodyFieldsAsVars

func MapJSONBodyFieldsAsVars(mapping map[string]string, wrappedHandler http.Handler) http.HandlerFunc

Types

type RequestBodyArgConverter

type RequestBodyArgConverter interface {
	RequestBodyToArg(request *http.Request) (name, value string, err error)
}

type RequestBodyArgConverterFunc

type RequestBodyArgConverterFunc func(request *http.Request) (name, value string, err error)

func RequestBodyAsArg

func RequestBodyAsArg(name string) RequestBodyArgConverterFunc

func (RequestBodyArgConverterFunc) RequestBodyToArg

func (f RequestBodyArgConverterFunc) RequestBodyToArg(request *http.Request) (name, value string, err error)

type ResultsWriter

type ResultsWriter interface {
	WriteResults(args command.Args, vars map[string]string, resultVals []reflect.Value, resultErr error, writer http.ResponseWriter, request *http.Request) error
}

func RespondContentType

func RespondContentType(contentType string) ResultsWriter

type ResultsWriterFunc

type ResultsWriterFunc func(args command.Args, vars map[string]string, resultVals []reflect.Value, resultErr error, writer http.ResponseWriter, request *http.Request) error
var RespondDetectContentType ResultsWriterFunc = func(args command.Args, vars map[string]string, resultVals []reflect.Value, resultErr error, writer http.ResponseWriter, request *http.Request) error {
	if resultErr != nil {
		return resultErr
	}
	if len(resultVals) != 1 {
		return fmt.Errorf("RespondDetectContentType needs 1 result, got %d", len(resultVals))
	}
	data, ok := resultVals[0].Interface().([]byte)
	if !ok {
		return fmt.Errorf("RespondDetectContentType needs []byte result, got %s", resultVals[0].Type())
	}

	writer.Header().Add("Content-Type", DetectContentType(data))
	_, err := writer.Write(data)
	return err
}
var RespondHTML ResultsWriterFunc = func(args command.Args, vars map[string]string, resultVals []reflect.Value, resultErr error, writer http.ResponseWriter, request *http.Request) error {
	if resultErr != nil {
		return resultErr
	}
	var buf bytes.Buffer
	for _, resultVal := range resultVals {
		result := resultVal.Interface()
		if b, ok := result.([]byte); ok {
			buf.Write(b)
		} else {
			fmt.Fprint(&buf, result)
		}
	}
	writer.Header().Add("Content-Type", "text/html; charset=utf-8")
	_, err := writer.Write(buf.Bytes())
	return err
}
var RespondJSON ResultsWriterFunc = func(args command.Args, vars map[string]string, resultVals []reflect.Value, resultErr error, writer http.ResponseWriter, request *http.Request) error {
	if resultErr != nil {
		return resultErr
	}
	var buf []byte
	for _, resultVal := range resultVals {
		b, err := encodeJSON(resultVal.Interface())
		if err != nil {
			return err
		}
		buf = append(buf, b...)
	}
	writer.Header().Set("Content-Type", "application/json; charset=utf-8")
	_, err := writer.Write(buf)
	return err
}
var RespondNothing ResultsWriterFunc = func(args command.Args, vars map[string]string, resultVals []reflect.Value, resultErr error, writer http.ResponseWriter, request *http.Request) error {
	return resultErr
}
var RespondPlaintext ResultsWriterFunc = func(args command.Args, vars map[string]string, resultVals []reflect.Value, resultErr error, writer http.ResponseWriter, request *http.Request) error {
	if resultErr != nil {
		return resultErr
	}
	var buf bytes.Buffer
	for _, resultVal := range resultVals {
		result := resultVal.Interface()
		if b, ok := result.([]byte); ok {
			buf.Write(b)
		} else {
			fmt.Fprint(&buf, result)
		}
	}
	writer.Header().Add("Content-Type", "text/plain; charset=utf-8")
	_, err := writer.Write(buf.Bytes())
	return err
}
var RespondXML ResultsWriterFunc = func(args command.Args, vars map[string]string, resultVals []reflect.Value, resultErr error, writer http.ResponseWriter, request *http.Request) error {
	if resultErr != nil {
		return resultErr
	}
	var buf []byte
	for _, resultVal := range resultVals {
		b, err := encodeXML(resultVal.Interface())
		if err != nil {
			return err
		}
		buf = append(buf, b...)
	}
	writer.Header().Set("Content-Type", "application/xml; charset=utf-8")
	_, err := writer.Write(buf)
	return err
}

func RespondBinary

func RespondBinary(contentType string) ResultsWriterFunc

RespondBinary responds with contentType using the binary data from results of type []byte, string, or io.Reader.

func RespondJSONField

func RespondJSONField(fieldName string) ResultsWriterFunc

func (ResultsWriterFunc) WriteResults

func (f ResultsWriterFunc) WriteResults(args command.Args, vars map[string]string, resultVals []reflect.Value, resultErr error, writer http.ResponseWriter, request *http.Request) error

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL