{- | Module representing a JSON-API link object. Specification: <http://jsonapi.org/format/#document-links> -} module Network.JSONApi.Link ( Links , Rel , Href , mkLinks ) where import Data.Aeson (ToJSON, FromJSON) import Data.Map (Map) import qualified Data.Map as Map import Data.Text (Text) import qualified GHC.Generics as G {- | 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> -} newtype Links = Links (Map Rel Href) deriving (Show, Eq, Ord, ToJSON, FromJSON, G.Generic) type Rel = Text type Href = Text {- | Constructor function for building Links -} mkLinks :: [(Rel, Text)] -> Links mkLinks = Links . Map.fromList . map buildLink buildLink :: (Rel, Text) -> (Rel, Href) buildLink (key, url) = (key, url)