{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeOperators #-}
module Text.Compdoc.Dhall where
import Composite.Aeson
import Composite.Record
import Data.Either.Validation
import Data.Text as T
import Data.Typeable
import Data.Void
import qualified Dhall as D
import Text.Compdoc
import Text.Pandoc
-- | Decode a Compdoc value.
compdocDecoder :: WriterOptions -> JsonFormat Void (Record a) -> D.InputNormalizer -> D.Decoder (Compdoc a)
compdocDecoder wopts f opts =
D.Decoder
{ D.extract = extractDoc,
D.expected = expectedDoc
}
where
docDecoder :: D.Decoder Text
docDecoder = D.autoWith opts
extractDoc expression =
case D.extract docDecoder expression of
Success x -> case readMarkdown' def {readerExtensions = pandocExtensions} wopts f x of
Left exception -> D.extractError (T.pack $ show exception)
Right l -> Success l
Failure e -> Failure e
expectedDoc = D.expected docDecoder