Documentation
¶
Overview ¶
Package jsonapi implements encoding and decoding of JSON with JSONAPI v1.0 format. The mapping between model fields and JSONAPI fields are defined in the models and mapping packages.
See https://jsonapi.org for more information.
Index ¶
- Constants
- func Marshal(w io.Writer, v interface{}) error
- func MarshalC(c *controller.Controller, w io.Writer, v interface{}, ...) error
- func MarshalErrors(w io.Writer, errs ...*Error) error
- func MarshalScope(w io.Writer, s *query.Scope, option ...*MarshalOptions) error
- func Unmarshal(r io.Reader, v interface{}, options ...*UnmarshalOptions) error
- func UnmarshalC(c *controller.Controller, r io.Reader, v interface{}, ...) error
- func UnmarshalManyScope(r io.Reader, model interface{}, options ...*UnmarshalOptions) (*query.Scope, error)
- func UnmarshalManyScopeC(c *controller.Controller, r io.Reader, model interface{}, ...) (*query.Scope, error)
- func UnmarshalSingleScope(r io.Reader, model interface{}, options ...*UnmarshalOptions) (*query.Scope, error)
- func UnmarshalSingleScopeC(c *controller.Controller, r io.Reader, model interface{}, ...) (*query.Scope, error)
- func UnmarshalWithSelected(r io.Reader, v interface{}, options ...*UnmarshalOptions) ([]*mapping.StructField, error)
- func UnmarshalWithSelectedC(c *controller.Controller, r io.Reader, v interface{}, ...) ([]*mapping.StructField, error)
- type Error
- type ErrorsPayload
- type Link
- type LinkOptions
- type LinkType
- type Links
- type ManyPayload
- type MarshalOptions
- type Meta
- type Node
- type PaginationLinks
- type Payloader
- type RelationshipManyNode
- type RelationshipOneNode
- type SinglePayload
- type TopLinks
- type UnmarshalOptions
Constants ¶
const ( // MediaType is the identifier for the JSON API media type // see http://jsonapi.org/format/#document-structure MediaType = "application/vnd.api+json" // ISO8601TimeFormat is the time formatting for the ISO 8601. ISO8601TimeFormat = "2006-01-02T15:04:05Z" // KeyTotal is the meta key for the 'total' instances information. KeyTotal = "total" // StructTag is the jsonapi defined struct tag. StructTag = "jsonapi" )
Variables ¶
This section is empty.
Functions ¶
func Marshal ¶
Marshal marshals the provided value 'v' into the writer with the jsonapi encoding. Takes the default controller for the model mapping.
func MarshalC ¶
func MarshalC(c *controller.Controller, w io.Writer, v interface{}, option ...*MarshalOptions) error
MarshalC marshals the provided value 'v' into the writer. It uses the 'c' controller
func MarshalErrors ¶
MarshalErrors writes a JSON API response using the given `[]error`.
For more information on JSON API error payloads, see the spec here: http://jsonapi.org/format/#document-top-level and here: http://jsonapi.org/format/#error-objects.
func MarshalScope ¶
MarshalScope marshals the scope into the selected writer for the given controller
func Unmarshal ¶
func Unmarshal(r io.Reader, v interface{}, options ...*UnmarshalOptions) error
Unmarshal unmarshals the incoming reader stream into provided value 'v'. The model of the value 'v' should already be registered in the default controller.
func UnmarshalC ¶
func UnmarshalC(c *controller.Controller, r io.Reader, v interface{}, options ...*UnmarshalOptions) error
UnmarshalC unmarshals the incoming reader stream 'r' into provided model 'v' assuming that it is already registered within the controller 'c'
func UnmarshalManyScope ¶
func UnmarshalManyScope(r io.Reader, model interface{}, options ...*UnmarshalOptions) (*query.Scope, error)
UnmarshalManyScope unmarshals the scope of multiple values for the default controller and given model struct. Provided model argument may be a value of the slice of models i.e. &[]*Model{} or a mapping.ModelStruct.
func UnmarshalManyScopeC ¶
func UnmarshalManyScopeC(c *controller.Controller, r io.Reader, model interface{}, options ...*UnmarshalOptions) (*query.Scope, error)
UnmarshalManyScopeC unmarshals the scope of multiple values for the given controller and model struct. Provided model argument may be a value of the slice of models i.e. &[]*Model{} or a mapping.ModelStruct.
func UnmarshalSingleScope ¶
func UnmarshalSingleScope(r io.Reader, model interface{}, options ...*UnmarshalOptions) (*query.Scope, error)
UnmarshalSingleScope unmarshals the value from the reader and creates the scope for the default controller. Provided model argument may be a value of the Model i.e. &Model{} or a mapping.ModelStruct.
func UnmarshalSingleScopeC ¶
func UnmarshalSingleScopeC(c *controller.Controller, r io.Reader, model interface{}, options ...*UnmarshalOptions) (*query.Scope, error)
UnmarshalSingleScopeC unmarshals the value from the reader and creates new scope. Provided model argument may be a value of the Model i.e. &Model{} or a mapping.ModelStruct.
func UnmarshalWithSelected ¶
func UnmarshalWithSelected(r io.Reader, v interface{}, options ...*UnmarshalOptions) ([]*mapping.StructField, error)
UnmarshalWithSelected unmarshals the value from io.Reader and returns the selected fields if the value is a single.
func UnmarshalWithSelectedC ¶
func UnmarshalWithSelectedC(c *controller.Controller, r io.Reader, v interface{}, options ...*UnmarshalOptions) ([]*mapping.StructField, error)
UnmarshalWithSelectedC unmarshals the value from io.Reader and returns the selected fields if the value is a single.
Types ¶
type Error ¶
type Error struct {
// ID is a unique identifier for this particular occurrence of a problem.
ID string `json:"id,omitempty"`
// Title is a short, human-readable summary of the problem that SHOULD NOT change from occurrence to occurrence of the problem, except for purposes of localization.
Title string `json:"title,omitempty"`
// Detail is a human-readable explanation specific to this occurrence of the problem. Like title, this field’s value can be localized.
Detail string `json:"detail,omitempty"`
// Status is the HTTP status code applicable to this problem, expressed as a string value.
Status string `json:"status,omitempty"`
// Code is an application-specific error code, expressed as a string value.
Code string `json:"code,omitempty"`
// Meta is an object containing non-standard meta-information about the error.
Meta map[string]interface{} `json:"meta,omitempty"`
}
Error is the jsonapi error structure. It is used for marshaling and unmarshaling purpose. More info can be found at: 'https://jsonapi.org/format/#errors'
type ErrorsPayload ¶
type ErrorsPayload struct {
JSONAPI map[string]interface{} `json:"jsonapi,omitempty"`
Errors []*Error `json:"errors"`
}
ErrorsPayload is a serializer struct for representing a valid JSON API errors payload.
func UnmarshalErrors ¶
func UnmarshalErrors(r io.Reader, options ...*UnmarshalOptions) (*ErrorsPayload, error)
UnmarshalErrors unmarshals the jsonapi errors from the provided input 'r'.
type LinkOptions ¶ added in v0.8.3
type LinkOptions struct {
// Type defines link type.
Type LinkType
// BaseURL should be the common base url.
BaseURL string
// Collection is the link root collection name.
Collection string
// RootID is the root collection primary value.
RootID string
// RelatedField is the related field name used in the relationship link type.
RelatedField string
// PaginationLinks contains the query values for the pagination links like:
// 'first', 'prev', 'next', 'last'. The values should be only the query values
// without the '?' sign.
PaginationLinks *PaginationLinks
}
LinkOptions contains link options required for marshaling jsonapi data.
type Links ¶
type Links map[string]interface{}
Links is the structure used to represent a related 'links' object.
type ManyPayload ¶
type ManyPayload struct {
Links *TopLinks `json:"links,omitempty"`
Meta *Meta `json:"meta,omitempty"`
Data []*Node `json:"data"`
Included []*Node `json:"included,omitempty"`
}
ManyPayload is used to represent a generic JSON API payload where many resources (Nodes) were included in an [] in the "data" key
func (*ManyPayload) SetIncluded ¶ added in v0.8.3
func (p *ManyPayload) SetIncluded(included []*Node)
SetIncluded sets the included data for the provided payload. Implements Payloader interface.
func (*ManyPayload) SetLinks ¶ added in v0.8.3
func (p *ManyPayload) SetLinks(links *TopLinks)
SetLinks sets the links for the ManyPaload. Implements Payloader interface.
func (*ManyPayload) SetMeta ¶ added in v0.8.3
func (p *ManyPayload) SetMeta(meta *Meta)
SetMeta sets the meta for the single payload. Implements Payloader interface.
type MarshalOptions ¶
type MarshalOptions struct {
Link LinkOptions
RootCollection string `validate:"required"`
RootID string `validate:"required"`
RelatedField string `validate:"required"`
Meta map[string]interface{}
RelationshipMeta map[string]Meta
}
MarshalOptions is the struct that contains marshaling options.
type Meta ¶
type Meta map[string]interface{}
Meta is used to represent a `meta` object. http://jsonapi.org/format/#document-meta
type Node ¶ added in v0.8.3
type Node struct {
Type string `json:"type"`
ID string `json:"id,omitempty"`
Attributes map[string]interface{} `json:"attributes,omitempty"`
Relationships map[string]interface{} `json:"relationships,omitempty"`
Links *Links `json:"links,omitempty"`
Meta *Meta `json:"meta,omitempty"`
}
Node is used to represent a generic JSON API Resource.
type PaginationLinks ¶ added in v0.8.3
type PaginationLinks struct {
// Self should be just a query too
Self string
First string
Prev string
Next string
Last string
Total int64
}
PaginationLinks is the structure that contain options for the pagination links. https://jsonapi.org/examples/#pagination
type Payloader ¶
type Payloader interface {
SetLinks(links *TopLinks)
SetMeta(meta *Meta)
SetIncluded(included []*Node)
}
Payloader is used to encapsulate the One and Many payload types
type RelationshipManyNode ¶ added in v0.8.3
type RelationshipManyNode struct {
Data []*Node `json:"data"`
Links *Links `json:"links,omitempty"`
Meta *Meta `json:"meta,omitempty"`
}
RelationshipManyNode is used to represent a generic has many JSON API relation.
type RelationshipOneNode ¶ added in v0.8.3
type RelationshipOneNode struct {
Data *Node `json:"data"`
Links *Links `json:"links,omitempty"`
Meta *Meta `json:"meta,omitempty"`
}
RelationshipOneNode is used to represent a generic single JSON API relation.
type SinglePayload ¶
type SinglePayload struct {
Links *TopLinks `json:"links,omitempty"`
Meta *Meta `json:"meta,omitempty"`
Data *Node `json:"data"`
Included []*Node `json:"included,omitempty"`
}
SinglePayload is used to represent a generic JSON API payload where a single resource (Node) was included as an {} in the "data" key
func (*SinglePayload) SetIncluded ¶ added in v0.8.3
func (p *SinglePayload) SetIncluded(included []*Node)
SetIncluded sets the included data for the provided payload. Implements Payloader interface.
func (*SinglePayload) SetLinks ¶ added in v0.8.3
func (p *SinglePayload) SetLinks(links *TopLinks)
SetLinks sets the links for the single payload. Implements Payloader interface.
func (*SinglePayload) SetMeta ¶ added in v0.8.3
func (p *SinglePayload) SetMeta(meta *Meta)
SetMeta sets the meta for the single payload. Implements Payloader interface.
type TopLinks ¶ added in v0.8.3
type TopLinks struct {
Self string `json:"self,omitempty"`
Related string `json:"related,omitempty"`
First string `json:"first,omitempty"`
Prev string `json:"prev,omitempty"`
Next string `json:"next,omitempty"`
Last string `json:"last,omitempty"`
}
TopLinks is used to represent a `links` object. http://jsonapi.org/format/#document-links
func (*TopLinks) SetPaginationLinks ¶ added in v0.8.3
func (t *TopLinks) SetPaginationLinks(o *MarshalOptions)
SetPaginationLinks sets the pagination links from the marshal options
type UnmarshalOptions ¶ added in v0.8.2
type UnmarshalOptions struct {
StrictUnmarshalMode bool
}
UnmarshalOptions is the struct that contains unmarshaling options.