neuron-1.0.0.0: src/lib/Neuron/Zettelkasten/Zettel/Meta.hs
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TupleSections #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE ViewPatterns #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Neuron.Zettelkasten.Zettel.Meta
( Meta (..),
)
where
import Data.TagTree (Tag)
import Data.Time.DateMayTime (DateMayTime)
import Data.YAML
import Relude
-- | YAML metadata in a zettel markdown file
data Meta = Meta
{ title :: Maybe Text,
tags :: Maybe [Tag],
-- | Creation day
date :: Maybe DateMayTime,
-- | List in the z-index
unlisted :: Maybe Bool
}
deriving (Eq, Show, Generic)
instance FromYAML Meta where
parseYAML =
withMap "Meta" $ \m ->
Meta
<$> m .:? "title"
-- "keywords" is an alias for "tags"
<*> liftA2 (<|>) (m .:? "tags") (m .:? "keywords")
<*> m .:? "date"
<*> m .:? "unlisted"
-- NOTE: Not using this instance because it generates "tags: null" when tags is
-- Nothing.
-- instance ToYAML Meta where
-- toYAML Meta {..} =
-- mapping
-- [ "title" .= title,
-- "tags" .= tags,
-- "date" .= date
-- ]