Safe Haskell | None |
---|---|
Language | Haskell2010 |
Entry-point module for this package.
Synopsis
- data Document a
- data ResourceData a
- data ErrorDocument a = ErrorDocument {
- _error :: Error a
- _errorLinks :: Maybe Links
- _errorMeta :: Maybe Meta
- data Included
- data Error a = Error {}
- data Relationship
- data Resource a = Resource {}
- data Relationships
- class (ToJSON a, FromJSON a) => ResourcefulEntity a where
- resourceIdentifier :: a -> Text
- resourceType :: a -> Text
- resourceLinks :: a -> Maybe Links
- resourceMetaData :: a -> Maybe Meta
- resourceRelationships :: a -> Maybe Relationships
- fromResource :: Resource a -> a
- toResource :: a -> Resource a
- class HasIdentifier a where
- identifier :: a -> Identifier
- data Identifier = Identifier {}
- newtype Links = Links (Map Rel Href)
- data Meta
- class ToJSON a => MetaObject a where
- mkLinks :: [(Rel, URL)] -> Links
- data Pagination = Pagination {}
- newtype PageIndex = PageIndex {
- getPageIndex :: Word
- newtype PageSize = PageSize {
- getPageSize :: Word
- newtype ResourceCount = ResourceCount {}
- data Strategy
- data Source = Source {}
- mkPaginationLinks :: Strategy -> URL -> Pagination -> Links
- mkRelationship :: Maybe Identifier -> Maybe Links -> Maybe Relationship
- mkRelationships :: Relationship -> Relationships
- mkDocument :: ResourcefulEntity a => [a] -> Maybe Links -> Maybe Meta -> Document a
- mkDocument' :: ResourceData a -> Maybe Links -> Maybe Meta -> Document a
- singleton :: ResourcefulEntity a => a -> ResourceData a
- list :: ResourcefulEntity a => [a] -> ResourceData a
- mkCompoundDocument :: ResourcefulEntity a => [a] -> Maybe Links -> Maybe Meta -> Included -> Document a
- mkCompoundDocument' :: ResourceData a -> Maybe Links -> Maybe Meta -> Included -> Document a
- mkIncludedResource :: ResourcefulEntity a => a -> Included
- mkMeta :: MetaObject a => a -> Meta
Documentation
The Document
type represents the top-level JSON-API requirement.
data
attribute - the resulting JSON may be either a singleton resource
or a list of resources. See Resource
for the construction.
For more information see: http://jsonapi.org/format/#document-top-level
Instances
Eq a => Eq (Document a) Source # | |
Show a => Show (Document a) Source # | |
Generic (Document a) Source # | |
ToJSON a => ToJSON (Document a) Source # | |
Defined in Network.JSONApi.Document | |
FromJSON a => FromJSON (Document a) Source # | |
type Rep (Document a) Source # | |
Defined in Network.JSONApi.Document type Rep (Document a) = D1 (MetaData "Document" "Network.JSONApi.Document" "json-api-0.1.4.0-K142BQY8q8A4eKMcVIpvFl" False) (C1 (MetaCons "Document" PrefixI True) ((S1 (MetaSel (Just "_data") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (ResourceData a)) :*: S1 (MetaSel (Just "_links") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (Maybe Links))) :*: (S1 (MetaSel (Just "_meta") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (Maybe Meta)) :*: S1 (MetaSel (Just "_included") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 [Value])))) |
data ResourceData a Source #
The Resource
type encapsulates the underlying Resource
Included in the top-level Document
, the Resource
may be either
a singleton resource or a list.
For more information see: http://jsonapi.org/format/#document-top-level
Instances
data ErrorDocument a Source #
The ErrorDocument
type represents the alternative form of the top-level
JSON-API requirement.
error
attribute - a descriptive object encapsulating application-specific
error detail.
For more information see: http://jsonapi.org/format/#errors
ErrorDocument | |
|
Instances
The Included
type is an abstraction used to constrain the included
section of the Document to JSON serializable Resource objects while
enabling a heterogeneous list of Resource types.
No data constructors for this type are exported as we need to
constrain the Value
to a heterogeneous list of Resource types.
See mkIncludedResource
for creating Included
types.
Type for providing application-specific detail to unsuccessful API responses.
Specification: http://jsonapi.org/format/#error-objects
Instances
data Relationship Source #
A type representing the Relationship between 2 entities
A Relationship provides basic information for fetching further information about a related resource.
Specification: http://jsonapi.org/format/#document-resource-object-relationships
Instances
Type representing a JSON-API resource object.
A Resource supplies standardized data and metadata about a resource.
Specification: http://jsonapi.org/format/#document-resource-objects
Resource | |
|
Instances
data Relationships Source #
Instances
class (ToJSON a, FromJSON a) => ResourcefulEntity a where Source #
A typeclass for decorating an entity with JSON API properties
resourceIdentifier :: a -> Text Source #
resourceType :: a -> Text Source #
resourceLinks :: a -> Maybe Links Source #
resourceMetaData :: a -> Maybe Meta Source #
resourceRelationships :: a -> Maybe Relationships Source #
fromResource :: Resource a -> a Source #
toResource :: a -> Resource a Source #
class HasIdentifier a where Source #
Typeclass indicating how to access an Identifier
for
a given datatype
identifier :: a -> Identifier Source #
Instances
HasIdentifier (Resource a) Source # | |
Defined in Network.JSONApi.Resource identifier :: Resource a -> Identifier Source # |
data Identifier Source #
Identifiers are used to encapsulate the minimum amount of information to uniquely identify a resource.
This object will be found at multiple levels of the JSON-API structure
Specification: http://jsonapi.org/format/#document-resource-identifier-objects
Instances
Eq Identifier Source # | |
Defined in Network.JSONApi.Identifier (==) :: Identifier -> Identifier -> Bool # (/=) :: Identifier -> Identifier -> Bool # | |
Show Identifier Source # | |
Defined in Network.JSONApi.Identifier showsPrec :: Int -> Identifier -> ShowS # show :: Identifier -> String # showList :: [Identifier] -> ShowS # | |
ToJSON Identifier Source # | |
Defined in Network.JSONApi.Identifier toJSON :: Identifier -> Value # toEncoding :: Identifier -> Encoding # toJSONList :: [Identifier] -> Value # toEncodingList :: [Identifier] -> Encoding # | |
FromJSON Identifier Source # | |
Defined in Network.JSONApi.Identifier parseJSON :: Value -> Parser Identifier # parseJSONList :: Value -> Parser [Identifier] # |
Type representing a JSON-API link object.
Links are an abstraction around an underlying Map consisting of relevance identifiers as keys and URIs as values.
Example JSON:
"links": {
"self": "http://example.com/posts/1"
}
Specification: http://jsonapi.org/format/#document-links
Type representing a JSON-API meta object.
Meta is an abstraction around an underlying Map consisting of resource-specific metadata.
Example JSON:
"meta": {
"copyright": "Copyright 2015 Example Corp.",
"authors": [
"Andre Dawson",
"Kirby Puckett",
"Don Mattingly",
"Ozzie Guillen"
]
}
Specification: http://jsonapi.org/format/#document-meta
class ToJSON a => MetaObject a where Source #
Convienience class for constructing a Meta type
Example usage: @ data Pagination = Pagination { currentPage :: Int , totalPages :: Int } deriving (Show, Generic)
instance ToJSON Pagination instance MetaObject Pagination where typeName _ = "pagination" @
data Pagination Source #
Wrapper type for the various components of pagination being page size, page index and the number of resources in total.
We can specify limits on the number of rows we would like back from the database
newtype ResourceCount Source #
Instances
Show ResourceCount Source # | |
Defined in Network.JSONApi.Pagination showsPrec :: Int -> ResourceCount -> ShowS # show :: ResourceCount -> String # showList :: [ResourceCount] -> ShowS # |
Pagination strategies are commonly implemented by the server of which Page and Offset are commonly used.
Instances
Eq Source Source # | |
Show Source Source # | |
Generic Source Source # | |
ToJSON Source Source # | |
Defined in Network.JSONApi.Source | |
FromJSON Source Source # | |
Default Source Source # | |
Defined in Network.JSONApi.Source | |
type Rep Source Source # | |
Defined in Network.JSONApi.Source type Rep Source = D1 (MetaData "Source" "Network.JSONApi.Source" "json-api-0.1.4.0-K142BQY8q8A4eKMcVIpvFl" False) (C1 (MetaCons "Source" PrefixI True) (S1 (MetaSel (Just "pointer") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (Maybe Text)) :*: S1 (MetaSel (Just "parameter") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (Maybe Text)))) |
mkPaginationLinks :: Strategy -> URL -> Pagination -> Links Source #
Helper function to build relative links for a collection of resources of type ResourceEntity.
This helper function assumes that the first page is always page 0.
mkRelationship :: Maybe Identifier -> Maybe Links -> Maybe Relationship Source #
Constructor function for creating a Relationship record
A relationship must contain either an Identifier or a Links record
mkDocument :: ResourcefulEntity a => [a] -> Maybe Links -> Maybe Meta -> Document a Source #
Constructor function for the Document data type.
See mkCompoundDocument
for constructing compound Document
including 'side-loaded' resources
mkDocument' :: ResourceData a -> Maybe Links -> Maybe Meta -> Document a Source #
singleton :: ResourcefulEntity a => a -> ResourceData a Source #
list :: ResourcefulEntity a => [a] -> ResourceData a Source #
mkCompoundDocument :: ResourcefulEntity a => [a] -> Maybe Links -> Maybe Meta -> Included -> Document a Source #
Constructor function for the Document data type.
See mkIncludedResource
for constructing the Included
type.
Supports building compound documents http://jsonapi.org/format/#document-compound-documents
mkCompoundDocument' :: ResourceData a -> Maybe Links -> Maybe Meta -> Included -> Document a Source #
mkIncludedResource :: ResourcefulEntity a => a -> Included Source #
Constructor function for the Document data type.
Supports building compound documents http://jsonapi.org/format/#document-compound-documents
mkMeta :: MetaObject a => a -> Meta Source #
Convienience constructor function for the Meta type
Useful on its own or in combination with Meta's monoid instance
Example usage: See MetaSpec.hs for an example