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