{-# 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 -- ]