packages feed

neuron-0.4.0.0: src/lib/Neuron/Zettelkasten/Zettel/Meta.hs

{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE NoImplicitPrelude #-}

module Neuron.Zettelkasten.Zettel.Meta
  ( Meta (..),
    getMeta,
  )
where

import Data.Aeson
import Data.TagTree (Tag)
import Data.Time.Calendar
import Relude
import Text.MMark (MMark, projectYaml)

-- | YAML metadata in a zettel markdown file
data Meta = Meta
  { title :: Text,
    tags :: Maybe [Tag],
    -- | Creation day
    date :: Maybe Day
  }
  deriving (Eq, Show, Generic, FromJSON)

getMeta :: MMark -> Maybe Meta
getMeta src = do
  val <- projectYaml src
  case fromJSON val of
    Error e -> error $ "JSON error: " <> toText e
    Success v -> pure v