module Text.Atom.Types where
import Control.Lens.Combinators
import Data.NonNull
import Data.Text hiding (map)
import Data.Time.Clock
import Data.Time.LocalTime ()
import GHC.Generics
import URI.ByteString
data TextType = TypeText | TypeHTML
deriving(Eq, Generic, Show)
data UriReference = UriReferenceUri URI | UriReferenceRelativeRef RelativeRef
deriving(Eq, Generic, Show)
data AtomText = AtomPlainText TextType Text
| AtomXHTMLText Text
makePrisms ''AtomText
deriving instance Eq AtomText
deriving instance Generic AtomText
deriving instance Show AtomText
data AtomPerson = AtomPerson
{ _personName_ :: NonNull Text
, _personEmail_ :: Text
, _personUri_ :: Maybe UriReference
}
makeLenses ''AtomPerson
deriving instance Eq AtomPerson
deriving instance Generic AtomPerson
deriving instance Show AtomPerson
data AtomCategory = AtomCategory
{ _categoryTerm_ :: NonNull Text
, _categoryScheme_ :: Text
, _categoryLabel_ :: Text
}
makeLenses ''AtomCategory
deriving instance Eq AtomCategory
deriving instance Generic AtomCategory
deriving instance Show AtomCategory
data AtomLink = AtomLink
{ _linkHref_ :: UriReference
, _linkRel_ :: Text
, _linkType_ :: Text
, _linkLang_ :: Text
, _linkTitle_ :: Text
, _linkLength_ :: Text
}
makeLenses ''AtomLink
deriving instance Eq AtomLink
deriving instance Generic AtomLink
deriving instance Show AtomLink
data AtomGenerator = AtomGenerator
{ _generatorUri_ :: Maybe UriReference
, _generatorVersion_ :: Text
, _generatorContent_ :: NonNull Text
}
makeLenses ''AtomGenerator
deriving instance Eq AtomGenerator
deriving instance Generic AtomGenerator
deriving instance Show AtomGenerator
data AtomSource = AtomSource
{ _sourceAuthors_ :: [AtomPerson]
, _sourceCategories_ :: [AtomCategory]
, _sourceContributors_ :: [AtomPerson]
, _sourceGenerator_ :: Maybe AtomGenerator
, _sourceIcon_ :: Maybe UriReference
, _sourceId_ :: Text
, _sourceLinks_ :: [AtomLink]
, _sourceLogo_ :: Maybe UriReference
, _sourceRights_ :: Maybe AtomText
, _sourceSubtitle_ :: Maybe AtomText
, _sourceTitle_ :: Maybe AtomText
, _sourceUpdated_ :: Maybe UTCTime
}
makeLenses ''AtomSource
deriving instance Eq AtomSource
deriving instance Generic AtomSource
deriving instance Show AtomSource
type Type = Text
data AtomContent = AtomContentInlineText TextType Text
| AtomContentInlineXHTML Text
| AtomContentInlineOther Type Text
| AtomContentOutOfLine Type UriReference
deriving instance Eq AtomContent
deriving instance Generic AtomContent
deriving instance Show AtomContent
data AtomEntry = AtomEntry
{ _entryAuthors_ :: [AtomPerson]
, _entryCategories_ :: [AtomCategory]
, _entryContent_ :: Maybe AtomContent
, _entryContributors_ :: [AtomPerson]
, _entryId_ :: NonNull Text
, _entryLinks_ :: [AtomLink]
, _entryPublished_ :: Maybe UTCTime
, _entryRights_ :: Maybe AtomText
, _entrySource_ :: Maybe AtomSource
, _entrySummary_ :: Maybe AtomText
, _entryTitle_ :: AtomText
, _entryUpdated_ :: UTCTime
}
makeLenses ''AtomEntry
deriving instance Eq AtomEntry
deriving instance Generic AtomEntry
deriving instance Show AtomEntry
data AtomFeed = AtomFeed
{ _feedAuthors_ :: [AtomPerson]
, _feedCategories_ :: [AtomCategory]
, _feedContributors_ :: [AtomPerson]
, _feedEntries_ :: [AtomEntry]
, _feedGenerator_ :: Maybe AtomGenerator
, _feedIcon_ :: Maybe UriReference
, _feedId_ :: NonNull Text
, _feedLinks_ :: [AtomLink]
, _feedLogo_ :: Maybe UriReference
, _feedRights_ :: Maybe AtomText
, _feedSubtitle_ :: Maybe AtomText
, _feedTitle_ :: AtomText
, _feedUpdated_ :: UTCTime
}
makeLenses ''AtomFeed
deriving instance Eq AtomFeed
deriving instance Generic AtomFeed
deriving instance Show AtomFeed