-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Utilities for generating JSON-API payloads -- -- Provides utilities for deriving JSON payloads conformant to the -- json-api specification @package json-api @version 0.1.1.2 -- | Module representing a JSON-API meta object. -- -- Specification: http://jsonapi.org/format/#document-meta module Network.JSONApi.Meta -- | 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 data Meta -- | 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" @ class (ToJSON a) => MetaObject a typeName :: MetaObject a => a -> Text -- | 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 mkMeta :: (MetaObject a) => a -> Meta instance GHC.Generics.Generic Network.JSONApi.Meta.Meta instance GHC.Classes.Eq Network.JSONApi.Meta.Meta instance GHC.Show.Show Network.JSONApi.Meta.Meta instance Data.Aeson.Types.Class.ToJSON Network.JSONApi.Meta.Meta instance Data.Aeson.Types.Class.FromJSON Network.JSONApi.Meta.Meta instance GHC.Base.Monoid Network.JSONApi.Meta.Meta -- | Module representing a JSON-API link object. -- -- Specification: http://jsonapi.org/format/#document-links module Network.JSONApi.Link -- | 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 data Links type Rel = Text type Href = Text -- | Constructor function for building Links mkLinks :: [(Rel, URL)] -> Links instance GHC.Generics.Generic Network.JSONApi.Link.Links instance Data.Aeson.Types.Class.FromJSON Network.JSONApi.Link.Links instance Data.Aeson.Types.Class.ToJSON Network.JSONApi.Link.Links instance GHC.Classes.Ord Network.JSONApi.Link.Links instance GHC.Classes.Eq Network.JSONApi.Link.Links instance GHC.Show.Show Network.JSONApi.Link.Links -- | Module representing a JSON-API resource object. -- -- Specification: -- http://jsonapi.org/format/#document-resource-objects module Network.JSONApi.Identifier -- | Typeclass indicating how to access an Identifier for a given -- datatype class HasIdentifier a identifier :: HasIdentifier a => a -> Identifier -- | 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 data Identifier Identifier :: Text -> Text -> Maybe Meta -> Identifier [_ident] :: Identifier -> Text [_datatype] :: Identifier -> Text [_metadata] :: Identifier -> Maybe Meta datatype :: Lens' Identifier Text ident :: Lens' Identifier Text metadata :: Lens' Identifier (Maybe Meta) instance GHC.Classes.Eq Network.JSONApi.Identifier.Identifier instance GHC.Show.Show Network.JSONApi.Identifier.Identifier instance Data.Aeson.Types.Class.ToJSON Network.JSONApi.Identifier.Identifier instance Data.Aeson.Types.Class.FromJSON Network.JSONApi.Identifier.Identifier -- | Module representing a JSON-API resource object. -- -- Specification: -- http://jsonapi.org/format/#document-resource-objects module Network.JSONApi.Resource -- | 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 data Resource a Resource :: Identifier -> a -> Maybe Links -> Maybe Relationships -> Resource a [getIdentifier] :: Resource a -> Identifier [getResource] :: Resource a -> a [getLinks] :: Resource a -> Maybe Links [getRelationships] :: Resource a -> Maybe Relationships data Relationships -- | A typeclass for decorating an entity with JSON API properties class (ToJSON a, FromJSON a) => ResourcefulEntity a where fromResource = getResource toResource a = Resource (Identifier (resourceIdentifier a) (resourceType a) (resourceMetaData a)) a (resourceLinks a) (resourceRelationships a) resourceIdentifier :: ResourcefulEntity a => a -> Text resourceType :: ResourcefulEntity a => a -> Text resourceLinks :: ResourcefulEntity a => a -> Maybe Links resourceMetaData :: ResourcefulEntity a => a -> Maybe Meta resourceRelationships :: ResourcefulEntity a => a -> Maybe Relationships fromResource :: ResourcefulEntity a => Resource a -> a toResource :: ResourcefulEntity a => a -> Resource a -- | 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 data Relationship -- | Constructor function for creating a Relationship record -- -- A relationship must contain either an Identifier or a Links record mkRelationship :: Maybe Identifier -> Maybe Links -> Maybe Relationship mkRelationships :: Relationship -> Relationships instance GHC.Generics.Generic (Network.JSONApi.Resource.Resource a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Network.JSONApi.Resource.Resource a) instance GHC.Show.Show a => GHC.Show.Show (Network.JSONApi.Resource.Resource a) instance GHC.Generics.Generic Network.JSONApi.Resource.Relationships instance GHC.Classes.Eq Network.JSONApi.Resource.Relationships instance GHC.Show.Show Network.JSONApi.Resource.Relationships instance GHC.Generics.Generic Network.JSONApi.Resource.Relationship instance GHC.Classes.Eq Network.JSONApi.Resource.Relationship instance GHC.Show.Show Network.JSONApi.Resource.Relationship instance Data.Aeson.Types.Class.ToJSON a => Data.Aeson.Types.Class.ToJSON (Network.JSONApi.Resource.Resource a) instance Data.Aeson.Types.Class.FromJSON a => Data.Aeson.Types.Class.FromJSON (Network.JSONApi.Resource.Resource a) instance Network.JSONApi.Identifier.HasIdentifier (Network.JSONApi.Resource.Resource a) instance Data.Aeson.Types.Class.ToJSON Network.JSONApi.Resource.Relationship instance Data.Aeson.Types.Class.FromJSON Network.JSONApi.Resource.Relationship instance Data.Aeson.Types.Class.ToJSON Network.JSONApi.Resource.Relationships instance Data.Aeson.Types.Class.FromJSON Network.JSONApi.Resource.Relationships instance GHC.Base.Monoid Network.JSONApi.Resource.Relationships -- | Module representing a JSON-API error object. -- -- Error objects are used for providing application-specific detail to -- unsuccessful API responses. -- -- Specification: http://jsonapi.org/format/#error-objects module Network.JSONApi.Error -- | Type for providing application-specific detail to unsuccessful API -- responses. -- -- Specification: http://jsonapi.org/format/#error-objects data Error a Error :: Maybe Text -> Maybe Links -> Maybe Text -> Maybe Text -> Maybe Text -> Maybe Text -> Maybe Meta -> Error a [id] :: Error a -> Maybe Text [links] :: Error a -> Maybe Links [status] :: Error a -> Maybe Text [code] :: Error a -> Maybe Text [title] :: Error a -> Maybe Text [detail] :: Error a -> Maybe Text [meta] :: Error a -> Maybe Meta instance GHC.Generics.Generic (Network.JSONApi.Error.Error a) instance GHC.Classes.Eq (Network.JSONApi.Error.Error a) instance GHC.Show.Show (Network.JSONApi.Error.Error a) instance Data.Aeson.Types.Class.ToJSON a => Data.Aeson.Types.Class.ToJSON (Network.JSONApi.Error.Error a) instance Data.Aeson.Types.Class.FromJSON a => Data.Aeson.Types.Class.FromJSON (Network.JSONApi.Error.Error a) instance Data.Default.Class.Default (Network.JSONApi.Error.Error a) -- | Contains representations of the top-level JSON-API document structure. module Network.JSONApi.Document -- | 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 data Document a -- | 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 data ResourceData a Singleton :: (Resource a) -> ResourceData a List :: [Resource a] -> ResourceData a -- | 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 data ErrorDocument a ErrorDocument :: Error a -> Maybe Links -> Maybe Meta -> ErrorDocument a [_error] :: ErrorDocument a -> Error a [_errorLinks] :: ErrorDocument a -> Maybe Links [_errorMeta] :: ErrorDocument a -> Maybe Meta -- | 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. data Included -- | Constructor function for the Document data type. -- -- See mkCompoundDocument for constructing compound Document -- including 'side-loaded' resources 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 -- | 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 :: ResourcefulEntity a => [a] -> Maybe Links -> Maybe Meta -> Included -> Document a mkCompoundDocument' :: ResourceData a -> Maybe Links -> Maybe Meta -> Included -> Document a -- | Constructor function for the Document data type. -- -- Supports building compound documents -- http://jsonapi.org/format/#document-compound-documents mkIncludedResource :: ResourcefulEntity a => a -> Included instance GHC.Generics.Generic (Network.JSONApi.Document.ErrorDocument a) instance GHC.Classes.Eq (Network.JSONApi.Document.ErrorDocument a) instance GHC.Show.Show (Network.JSONApi.Document.ErrorDocument a) instance GHC.Generics.Generic (Network.JSONApi.Document.Document a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Network.JSONApi.Document.Document a) instance GHC.Show.Show a => GHC.Show.Show (Network.JSONApi.Document.Document a) instance GHC.Generics.Generic (Network.JSONApi.Document.ResourceData a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Network.JSONApi.Document.ResourceData a) instance GHC.Show.Show a => GHC.Show.Show (Network.JSONApi.Document.ResourceData a) instance GHC.Show.Show Network.JSONApi.Document.Included instance Data.Aeson.Types.Class.ToJSON a => Data.Aeson.Types.Class.ToJSON (Network.JSONApi.Document.Document a) instance Data.Aeson.Types.Class.FromJSON a => Data.Aeson.Types.Class.FromJSON (Network.JSONApi.Document.Document a) instance GHC.Base.Monoid Network.JSONApi.Document.Included instance Data.Aeson.Types.Class.ToJSON a => Data.Aeson.Types.Class.ToJSON (Network.JSONApi.Document.ResourceData a) instance Data.Aeson.Types.Class.FromJSON a => Data.Aeson.Types.Class.FromJSON (Network.JSONApi.Document.ResourceData a) instance Data.Aeson.Types.Class.ToJSON a => Data.Aeson.Types.Class.ToJSON (Network.JSONApi.Document.ErrorDocument a) instance Data.Aeson.Types.Class.FromJSON a => Data.Aeson.Types.Class.FromJSON (Network.JSONApi.Document.ErrorDocument a) -- | Entry-point module for this package. module Network.JSONApi -- | 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 data Document a -- | 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 data ResourceData a Singleton :: (Resource a) -> ResourceData a List :: [Resource a] -> ResourceData a -- | 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 data ErrorDocument a ErrorDocument :: Error a -> Maybe Links -> Maybe Meta -> ErrorDocument a [_error] :: ErrorDocument a -> Error a [_errorLinks] :: ErrorDocument a -> Maybe Links [_errorMeta] :: ErrorDocument a -> Maybe Meta -- | 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. data Included -- | Type for providing application-specific detail to unsuccessful API -- responses. -- -- Specification: http://jsonapi.org/format/#error-objects data Error a Error :: Maybe Text -> Maybe Links -> Maybe Text -> Maybe Text -> Maybe Text -> Maybe Text -> Maybe Meta -> Error a [id] :: Error a -> Maybe Text [links] :: Error a -> Maybe Links [status] :: Error a -> Maybe Text [code] :: Error a -> Maybe Text [title] :: Error a -> Maybe Text [detail] :: Error a -> Maybe Text [meta] :: Error a -> Maybe Meta -- | 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 data Relationship -- | 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 data Resource a Resource :: Identifier -> a -> Maybe Links -> Maybe Relationships -> Resource a [getIdentifier] :: Resource a -> Identifier [getResource] :: Resource a -> a [getLinks] :: Resource a -> Maybe Links [getRelationships] :: Resource a -> Maybe Relationships data Relationships -- | A typeclass for decorating an entity with JSON API properties class (ToJSON a, FromJSON a) => ResourcefulEntity a where fromResource = getResource toResource a = Resource (Identifier (resourceIdentifier a) (resourceType a) (resourceMetaData a)) a (resourceLinks a) (resourceRelationships a) resourceIdentifier :: ResourcefulEntity a => a -> Text resourceType :: ResourcefulEntity a => a -> Text resourceLinks :: ResourcefulEntity a => a -> Maybe Links resourceMetaData :: ResourcefulEntity a => a -> Maybe Meta resourceRelationships :: ResourcefulEntity a => a -> Maybe Relationships fromResource :: ResourcefulEntity a => Resource a -> a toResource :: ResourcefulEntity a => a -> Resource a -- | Typeclass indicating how to access an Identifier for a given -- datatype class HasIdentifier a identifier :: HasIdentifier a => a -> Identifier -- | 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 data Identifier Identifier :: Text -> Text -> Maybe Meta -> Identifier [_ident] :: Identifier -> Text [_datatype] :: Identifier -> Text [_metadata] :: Identifier -> Maybe Meta -- | 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 data 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 data Meta -- | 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" @ class (ToJSON a) => MetaObject a typeName :: MetaObject a => a -> Text -- | Constructor function for building Links mkLinks :: [(Rel, URL)] -> Links -- | Constructor function for creating a Relationship record -- -- A relationship must contain either an Identifier or a Links record mkRelationship :: Maybe Identifier -> Maybe Links -> Maybe Relationship mkRelationships :: Relationship -> Relationships -- | Constructor function for the Document data type. -- -- See mkCompoundDocument for constructing compound Document -- including 'side-loaded' resources 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 -- | 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 :: ResourcefulEntity a => [a] -> Maybe Links -> Maybe Meta -> Included -> Document a mkCompoundDocument' :: ResourceData a -> Maybe Links -> Maybe Meta -> Included -> Document a -- | Constructor function for the Document data type. -- -- Supports building compound documents -- http://jsonapi.org/format/#document-compound-documents mkIncludedResource :: ResourcefulEntity a => a -> Included -- | 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 mkMeta :: (MetaObject a) => a -> Meta