feed-0.3.2: Text/Atom/Feed/Link.hs
--------------------------------------------------------------------
-- |
-- Module : Text.Atom.Feed.Link
-- Copyright : (c) Galois, Inc. 2008
-- License : BSD3
--
-- Maintainer: Don Stewart <dons@galois.com>
-- Stability : provisional
-- Portability:
--
--------------------------------------------------------------------
module Text.Atom.Feed.Link
( LinkRelation(..)
, showLinkRelation
, showLinkAttr
) where
-- | Atom feeds uses typed IRI links to represent
-- information \/ metadata that is of interest to the
-- consumers (software, in the main) of feeds. For instance,
-- the edit link relation attached to an atom:entry element
-- points to the IRI to use to update\/edit it.
--
-- The Atom standard encourages that such typed links to
-- be registered with IANA if they have wider applicability,
-- and the 'LinkRelation' data type encodes the currently
-- registered link types (derived from:
-- http:\/\/www.iana.org\/assignments\/link-relations.html
-- on 2007-10-28]
--
data LinkRelation -- relevant RFC:
= LinkAlternate -- http://www.rfc-editor.org/rfc/rfc4287.txt
| LinkCurrent -- http://www.rfc-editor.org/rfc/rfc5005.txt
| LinkEnclosure -- http://www.rfc-editor.org/rfc/rfc4287.txt
| LinkEdit -- http://www.rfc-editor.org/rfc/rfc5023.txt
| LinkEditMedia -- http://www.rfc-editor.org/rfc/rfc5023.txt
| LinkFirst -- http://www.iana.org/assignments/link-relations/first
| LinkLast -- http://www.iana.org/assignments/link-relations/last
| LinkLicense -- http://www.rfc-editor.org/rfc/rfc4946.txt
| LinkNext -- http://www.rfc-editor.org/rfc/rfc5005.txt
| LinkNextArchive -- http://www.rfc-editor.org/rfc/rfc5005.txt
| LinkPayment -- http://www.iana.org/assignments/link-relations/payment
| LinkPrevArchive -- http://www.rfc-editor.org/rfc/rfc5005.txt
| LinkPrevious -- http://www.rfc-editor.org/rfc/rfc5005.txt
| LinkRelated -- http://www.rfc-editor.org/rfc/rfc4287.txt
| LinkReplies -- http://www.rfc-editor.org/rfc/rfc4685.txt
| LinkSelf -- http://www.rfc-editor.org/rfc/rfc4287.txt
| LinkVia -- http://www.rfc-editor.org/rfc/rfc4287.txt
| LinkOther String
deriving (Eq, Show)
showLinkRelation :: LinkRelation -> String
showLinkRelation lr =
case lr of
LinkAlternate -> "alternate"
LinkCurrent -> "current"
LinkEnclosure -> "enclosure"
LinkEdit -> "edit"
LinkEditMedia -> "edit-media"
LinkFirst -> "first"
LinkLast -> "last"
LinkLicense -> "license"
LinkNext -> "next"
LinkNextArchive -> "next-archive"
LinkPayment -> "payment"
LinkPrevArchive -> "prev-archive"
LinkPrevious -> "previous"
LinkRelated -> "related"
LinkReplies -> "replies"
LinkSelf -> "self"
LinkVia -> "via"
LinkOther s -> s
showLinkAttr :: LinkRelation -> String{-URI-} -> String
showLinkAttr lr s = showLinkRelation lr ++ '=':'"':concatMap escQ s ++ "\""
where
escQ '"' = "&dquot;"
escQ x = [x]