summaryrefslogtreecommitdiff
path: root/src/Data/Journal.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Data/Journal.hs')
-rw-r--r--src/Data/Journal.hs41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/Data/Journal.hs b/src/Data/Journal.hs
new file mode 100644
index 0000000..ea15644
--- /dev/null
+++ b/src/Data/Journal.hs
@@ -0,0 +1,41 @@
+module Data.Journal
+ ( Journal (..)
+ , Journal_
+ , journalHtml
+ ) where
+
+import Prolog
+import Network.URI
+import Data.Aeson
+import Data.Alias
+import Data.Set qualified as S
+import Text.Blaze
+import Text.Blaze.Html
+
+import Data.Linked
+
+data Journal a = Journal
+ { title :: !a
+ , shortTitle :: !(Maybe a)
+ , link :: !(Maybe URI)
+ } deriving (Eq, Foldable, Functor, Generic, Ord, Show, Traversable)
+
+instance Binary a => Binary (Journal a)
+
+type Journal_ = Journal StrictText
+
+journalHtml :: (ToMarkup a) => Journal a -> Html
+journalHtml (Journal t st l) = linkedHtml $ Linked (maybe t id st) l (t <$ st)
+
+
+instance Ord a => ToAliases (Journal a) a where
+ toAliases (Journal t st _) = S.fromList $ t : toList st
+
+instance FromAlias a (Journal a) where
+ fromAlias t = pure $ Journal t Nothing Nothing
+
+instance FromJSON a => FromJSON (Journal a) where
+ parseJSON = withObject "Journal" $ \v -> Journal
+ <$> v .: "title"
+ <*> v .:? "short" .!= Nothing
+ <*> v .:? "link" .!= Nothing