Skip to content

Some helpers, wrappers and middlewares for go-chi/chi

Notifications You must be signed in to change notification settings

FallenTaters/chio

Repository files navigation

chio

chio contains useful functions to use in conjunction with go-chi/chi router.

decode helpers

example

import (
    "github.com/go-chi/chi/v5"
    "github.com/FallenTaters/chio"
)

func main() {
    r := chi.NewRouter()
    r.Get(`/`, chio.JSON(handler))
    // ...
}

type myStruct struct{
    A int `json:"a"`
}

func handler(w http.ResponseWriter, r *http.Request, v myStruct) {
    // ...
}

JSON

if the body cannot be read and decoded, http.StatusUnprocessableEntity is returned.

encode helpers

example

import (
    "github.com/go-chi/chi/v5"
    "github.com/FallenTaters/chio"
)

func main() {
    r := chi.NewRouter()
    r.Get(`/`, handler)
    // ...
}

func handler(w http.ResponseWriter, r *http.Request) {
    chio.WriteJSON(w, http.StatusOK, myStruct{3})
}

Empty

writes the status code and sets the Content-Length header to 0

WriteString

writes s to the body and sets the Content-Type to text/plain

WriteJSON

writes v to the body as WriteJSON and sets the Content-Type to application/json. If marshalling fails, it panics.

WriteXML

writes v to the body as WriteXML and sets the Content-Type to application/xml. If marshalling fails, it panics.

StreamBlob

copies data from r to w

WriteBlob

writes v to the body

Middleware

example

import (
    "github.com/go-chi/chi/v5"
    "github.com/FallenTaters/chio/middleware"
)

func main() {
    r := chi.NewRouter()
    r.Use(middleware.Recover(middleware.DefaultPanicLogger(os.Stderr)))
    // ...
}

func handler(w http.ResponseWriter, r *http.Request) {
    chio.WriteJSON(w, http.StatusOK, myStruct{3})
}

BasicAuth

A simple middleware handler for adding basic http auth to a route. Authorize should return true if the username and password are correct, otherwise 401 will be returned. The returned contextKey and contextValue can be used to set values on the request context, for example a user struct. Values can be retrieved easily using middleware.GetValue.

Recover

Catches a panic and passes the value and a stack trace to f.

SetValue

Sets a value on the request context for use in later middlewares or handlers. If get returns false, it is assumed something went wrong and the correct response has already been written. If get returns true, v will be set under k in the request context and the underlying handler is called. The value can be retrieved and type-asserted easily using GetValue.

About

Some helpers, wrappers and middlewares for go-chi/chi

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages