* working version
* fix text
* combine test files
* move private funcs to bottom
* ErrInvalidType should ignore interfaces
* replace MarshalOnePayload w/ MarshalPayload; fix bug w/ node merge()
* minor tweaks; address a couple comments
* decompose unmarshalNode() to smaller funcs; unmarshal should go from top-level to embedded
* deep copy the node when passing relation/sideloaded notes to unmarshal()
* add some comments and do some additional cleanup
* add test uses annotationIgnore
* implement support for struct fields that implement json.Marshaler/Unmarshaler
* add additional test that compares marshal/unmarshal behavior w/ standard json library
* add support for pointer embedded structs
* Revert "implement support for struct fields that implement json.Marshaler/Unmarshaler"
This reverts commit deeffb78df.
* Used to have 6 functions: MarshalOnePayload, MarshalOnePayloadWithoutIncluded, MarshalOne, MarshalManyPayload, MarshalManyPayloadWithoutIncluded, MarshalMany - now there are only 3: MarshalPayload, MarshalPayloadWithoutIncluded, Marshal. This simplifies the public API; will be easier to explain and document while still providing the existing support for struct ptrs (&Blog{}) and slices of struct ptrs ([]*Blog{}).
* Correcting all code occurrences leftover.
* Updating README to reflect Marshal API changes.
* Omit the mention of One vs Many
This commit adds omitempty to the field ID of type Node. This is needed
when constructing an entity client-side and sending it to the server for
creation. Without omitempty, the constructed entity will contain an
empty "id": "", which is not sensible to transmit.
This change addresses #83.
* add Meta field in node structs and Metable/RelationshipMetable interfaces
* update response marshalling to add Meta
* update tests for presence of Meta
* add Metable and RelationshipMetable interfaces to example
* update README to include Meta details
* fix spelling in documentation
* add MarshalManyPayloadWithoutIncluded
does the same as `MarshalOnePayloadWithoutIncluded` but for
MarshalManyPayload
* Refactored MarshalManyPayloadWithoutIncluded to use the MarshalMany func
* Implement `links` via optional interfaces
* Updating example app to include links
* Update readme with links information
* Exclude a slice relationship only if the slice is empty AND there are no defined links
* Remove `Link` in favor of vanilla `map[string]interface{}`. More flexible for different allowed links spec implementations.
* Update app.go with correct Links methods
* Use LinksObject and LinkObject types along with type assertion to provide errors when marshaling an invalid links JSON API object.
* Renamed LinksObject Links and LinkObject Link
* Added back the relationship link post merge.
* Renamed the JSON* Linkable functions JSONAPI* such that when a library user implements the interface it is clear the functions are used for JSON API as opposed to JSON
* Example cleanup.
* Refactor the example to use constants from jsonapi and http.
* Add support to nullify relationship; http://jsonapi.org/format/#document-resource-object-linkage
* Fixed: [null] is not valid as an empty relationship.
* add support for 'omitempty' on relationships; default behavior of marshalling empty/nil relations (i.e. w/o 'omitempty' tag) marshals with null data relation
* cleanup whitespace
* Added go 1.7 to test versions; fixed the marshaling of empty relations to return an empty array rather than a null/nil. Added a more robust test case for the marshaling of non omitted relations.
* Cleanup.
* Added a comment to UnmarshalMany
* Document the ‘omitempty’ annotation on a relation.
* Add common JSON API values as exported jsonapi pkg constants.
* Added support for string, int(8,16,32,64), uint(8,16,32,64) and each of their ptr types as acceptable to use for the ID field.
* No longer declaring a new idErr var; also eliminate the switch within a switch - if the ID field was a string or *string it will continue. Added a couple extra tests.
* Add support for iso8601 struct tag.
Currently only unix timestamps are supported for serialising time.Time objects. The JSON.API specification doesn't make a specific requirement on time serialisation format, though it does make a recommendation for using ISO8601.
This adds support for an additional struct tag `iso8601` which controls serialisation and deserialisation using the ISO8601 timestamp format.
* Update doc.go with information regarding iso8601 and omitempty tag arguments.
* add support for direct use of slice of struct pointers for MarshalMany
* Added a test to ensure that whether MarshalManyPayload is called with a []interface{} or []*Struct it will produce the same desired result.
* Added a test to show how the new error type may be returned.
* Ensure the outside accessible Errs have comments.
* Page char width cleanup. Addressed warnings about duplicated "client-id" definition; using the const.
* add support to unmarshal attributes to struct field that are ptr types
* Spacing, addressed all the linter warnings, comments to describe errors, cleanup, left a TODO note to resolve the Error messaging.
* Implemented a failing test demonstrating the intended behaviour of the omitempty annotation.
* Updated the failing test to ensure that unset field without the "omitempty" annotation are not inadvertently omitted.
* Working implementation of the "omitempty" annotation for fields that are of any type.
* Update the readme to include a brief description of how to use the `omitempty` in a attr field.
* Update the json example also using a uint for type variety.
* Added the MarshalOnePayloadWithoutIncluded method for marshaling single objects and their relations without actually populating the "included" key with the full related object.
* Completed method description.
* Added a test to ensure that the library is capable of Unmarshmaling a payload where the One object in the payload had relationships but did not include them via "included"