module Text.Pandoc.Dhall where
import Data.Either.Validation
import qualified Dhall as D
import Text.Pandoc
import Data.Text as T
pandocDecoder :: (ReaderOptions -> Text -> PandocPure Pandoc) -> ReaderOptions -> D.InputNormalizer -> D.Decoder Pandoc
pandocDecoder :: (ReaderOptions -> Text -> PandocPure Pandoc)
-> ReaderOptions -> InputNormalizer -> Decoder Pandoc
pandocDecoder ReaderOptions -> Text -> PandocPure Pandoc
f ReaderOptions
ropts InputNormalizer
opts =
Decoder :: forall a.
(Expr Src Void -> Extractor Src Void a)
-> Expector (Expr Src Void) -> Decoder a
D.Decoder
{ extract :: Expr Src Void -> Extractor Src Void Pandoc
D.extract = Expr Src Void -> Extractor Src Void Pandoc
extractDoc
, expected :: Expector (Expr Src Void)
D.expected = Expector (Expr Src Void)
expectedDoc
}
where
docDecoder :: D.Decoder Text
docDecoder :: Decoder Text
docDecoder = InputNormalizer -> Decoder Text
forall a. FromDhall a => InputNormalizer -> Decoder a
D.autoWith InputNormalizer
opts
extractDoc :: Expr Src Void -> Extractor Src Void Pandoc
extractDoc Expr Src Void
expression =
case Decoder Text -> Expr Src Void -> Extractor Src Void Text
forall a. Decoder a -> Expr Src Void -> Extractor Src Void a
D.extract Decoder Text
docDecoder Expr Src Void
expression of
Success Text
x -> case PandocPure Pandoc -> Either PandocError Pandoc
forall a. PandocPure a -> Either PandocError a
runPure (ReaderOptions -> Text -> PandocPure Pandoc
f ReaderOptions
ropts Text
x) of
Left PandocError
exception -> Text -> Extractor Src Void Pandoc
forall s a b. Text -> Extractor s a b
D.extractError (String -> Text
T.pack (String -> Text) -> String -> Text
forall a b. (a -> b) -> a -> b
$ PandocError -> String
forall a. Show a => a -> String
show PandocError
exception)
Right Pandoc
path -> Pandoc -> Extractor Src Void Pandoc
forall e a. a -> Validation e a
Success Pandoc
path
Failure ExtractErrors Src Void
e -> ExtractErrors Src Void -> Extractor Src Void Pandoc
forall e a. e -> Validation e a
Failure ExtractErrors Src Void
e
expectedDoc :: Expector (Expr Src Void)
expectedDoc = Decoder Text -> Expector (Expr Src Void)
forall a. Decoder a -> Expector (Expr Src Void)
D.expected Decoder Text
docDecoder