hal

package
v0.0.0-...-bd458c8 Latest Latest
Warning

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

Go to latest
Published: Jun 13, 2019 License: Apache-2.0 Imports: 13 Imported by: 0

Documentation

Index

Constants

View Source
const StandardPagingOptions = "{?cursor,limit,order}"

StandardPagingOptions is a helper string to make creating paged collection URIs simpler.

Variables

View Source
var DefaultResponse = json.RawMessage(`{"message":"ok"}`)
View Source
var ErrBadRequest = errors.New("bad request")

Functions

func ExecuteFunc

func ExecuteFunc(ctx context.Context, fn, param interface{}) (interface{}, bool, error)

ExecuteFunc executes the fn with the param after checking whether the function signature is valid or not by calling Handler. The first return value is the result that fn returns. The second return value is a boolean indicating whether the caller should panic on the err or not. If it's true, it means the caller can process the error normally; if it's false, it means the caller should probably panic on the error. The third return value is an error either from Handler() or from fn, if any.

func Handler

func Handler(fn, param interface{}) (http.Handler, error)

Handler returns an HTTP Handler for function fn. If fn returns a non-nil error, the handler will use problem.Render. Please refer to funcParamType for the allowed function signature. The caller of this function should probably panic on the returned error, if any.

func Render

func Render(w http.ResponseWriter, data interface{})

Render write data to w, after marshalling to json

func ReqBodyHandler

func ReqBodyHandler(fn interface{}) (http.Handler, error)

ReqBodyHandler returns an HTTP Handler for function fn. If fn has an input type, it will try to decode the request body into the function's input type. If fn returns a non-nil error, the handler will use problem.Render. Please refer to funcParamType for the allowed function signature. The caller of this function should probably panic on the returned error, if any.

Types

type BasePage

type BasePage struct {
	FullURL  *url.URL `json:"-"`
	Embedded struct {
		Records []Pageable `json:"records"`
	} `json:"_embedded"`
}

BasePage represents the simplest page: one with no links and only embedded records. Can be used to build custom page-like resources

func (*BasePage) Add

func (p *BasePage) Add(rec Pageable)

Add appends the provided record onto the page

func (*BasePage) Init

func (p *BasePage) Init()

Init initialized the Records slice. This ensures that an empty page renders its records as an empty array, rather than `null`

type Link struct {
	Href      string `json:"href"`
	Templated bool   `json:"templated,omitempty"`
}
func NewLink(href string) Link

func (*Link) PopulateTemplated

func (l *Link) PopulateTemplated()

type LinkBuilder

type LinkBuilder struct {
	Base *url.URL
}

LinkBuilder is a helper for constructing URLs in horizon.

func (lb *LinkBuilder) Link(parts ...string) Link

Link returns a hal.Link whose href is each of the provided parts joined by '/'

func (*LinkBuilder) Linkf

func (lb *LinkBuilder) Linkf(format string, args ...interface{}) Link

Linkf provides a helper function that returns a link with an href created by passing the arguments into fmt.Sprintf

func (lb *LinkBuilder) PagedLink(parts ...string) Link

PagedLink creates a link using the `Link` method and appends the common paging options

type Links struct {
	Self Link `json:"self"`
	Next Link `json:"next"`
	Prev Link `json:"prev"`
}

Links represents the Links in a Page

type Page

type Page struct {
	Links Links `json:"_links"`
	BasePage
	Order  string `json:"-"`
	Limit  uint64 `json:"-"`
	Cursor string `json:"-"`
}

Page represents the common page configuration (i.e. has self, next, and prev links) and has a helper method `PopulateLinks` to automate their initialization.

func (*Page) InvertedOrder

func (p *Page) InvertedOrder() string

InvertedOrder returns the inversion of the page's current order. Used to populate the prev link

func (p *Page) PopulateLinks()

PopulateLinks sets the common links for a page.

type Pageable

type Pageable interface {
	PagingToken() string
}

Pageable impementors can be added to hal.Page collections

Jump to

Keyboard shortcuts

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