packages feed

neuron-0.2.0.0: src/Neuron/Zettelkasten/Meta.hs

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

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

import Data.Aeson
import Relude
import Text.MMark (MMark, projectYaml)

-- | YAML metadata in a zettel markdown file
data Meta
  = Meta
      { title :: Text,
        tags :: Maybe [Text]
      }
  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