frontmatter-0.1.0.0: src/Data/Frontmatter.hs
{-# LANGUAGE ScopedTypeVariables #-}
module Data.Frontmatter
( -- * Frontmatter parser
frontmatter
, frontmatterYaml
-- * Utility functions
, parseFrontmatter
, parseFrontmatterMaybe
, parseFrontmatterEither
, parseYamlFrontmatter
, parseYamlFrontmatterMaybe
, parseYamlFrontmatterEither
-- * Re-exports
, parse
, maybeResult
, eitherResult
, Parser
, Result
, IResult(..)
)
where
import Data.Attoparsec.ByteString
import Data.ByteString (ByteString)
import Data.Frontmatter.Internal
import Data.Yaml (FromJSON)
import Data.Yaml.Frontmatter
-- |
-- Parse a frontmatter from a 'ByteString' returning a 'Result'. Just extracts
-- whatever is on the frontmatter; doesn't care what it is.
parseFrontmatter :: ByteString -> Result ByteString
parseFrontmatter = parse frontmatter
-- |
-- 'parseFrontmatter' but returning a 'Maybe'
parseFrontmatterMaybe :: ByteString -> Maybe ByteString
parseFrontmatterMaybe = maybeResult . parse frontmatter
-- |
-- 'parseFrontmatter' but returning an 'Either'
parseFrontmatterEither :: ByteString -> Either String ByteString
parseFrontmatterEither = eitherResult . parse frontmatter
-- |
-- Parse a frontmatter from a 'ByteString' returning a 'FromJSON a'. Will parse
-- both JSON and YAML.
parseYamlFrontmatter :: FromJSON a => ByteString -> Result a
parseYamlFrontmatter = parse frontmatterYaml
-- |
-- 'parseYamlFrontmatter' but returning a 'Maybe'
parseYamlFrontmatterMaybe :: FromJSON a => ByteString -> Maybe a
parseYamlFrontmatterMaybe = maybeResult . parse frontmatterYaml
-- |
-- 'parseYamlFrontmatter' but returning an 'Either'
parseYamlFrontmatterEither :: FromJSON a => ByteString -> Either String a
parseYamlFrontmatterEither = eitherResult . parse frontmatterYaml