frontmatter-0.1.0.0: src/Data/Yaml/Frontmatter.hs
{-# LANGUAGE ScopedTypeVariables #-}
module Data.Yaml.Frontmatter where
import Data.Attoparsec.ByteString
import Data.Frontmatter.Internal
import Data.Yaml (FromJSON, Value, decodeEither)
-- |
-- Parses a YAML frontmatter or JSON frontmatter from a 'ByteString' as a
-- 'Value'. Because of how @Data.Yaml@ is implemented using @aeson@, this will
-- succeed for JSON frontmatters as well as YAML ones.
frontmatterYaml :: FromJSON a => Parser a
frontmatterYaml = frontmatterYaml' <?> "frontmatterYaml"
where
frontmatterYaml' = do
f <- frontmatter
case decodeEither f of
Left e -> fail e
Right v -> return v