{-# LANGUAGE LambdaCase #-}

module Data.Yaml.Ext
    ( modifyInvalidYaml
    , modifyYamlProblem
    )
where

import Prelude

import Data.Yaml

modifyInvalidYaml
    :: (YamlException -> YamlException) -> ParseException -> ParseException
modifyInvalidYaml :: (YamlException -> YamlException)
-> ParseException -> ParseException
modifyInvalidYaml f :: YamlException -> YamlException
f = \case
    ex :: ParseException
ex@NonScalarKey{} -> ParseException
ex
    ex :: ParseException
ex@UnknownAlias{} -> ParseException
ex
    ex :: ParseException
ex@UnexpectedEvent{} -> ParseException
ex

    InvalidYaml mEx :: Maybe YamlException
mEx -> Maybe YamlException -> ParseException
InvalidYaml (Maybe YamlException -> ParseException)
-> Maybe YamlException -> ParseException
forall a b. (a -> b) -> a -> b
$ YamlException -> YamlException
f (YamlException -> YamlException)
-> Maybe YamlException -> Maybe YamlException
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe YamlException
mEx

    ex :: ParseException
ex@AesonException{} -> ParseException
ex
    ex :: ParseException
ex@OtherParseException{} -> ParseException
ex
    ex :: ParseException
ex@NonStringKey{} -> ParseException
ex
    ex :: ParseException
ex@NonStringKeyAlias{} -> ParseException
ex
    ex :: ParseException
ex@CyclicIncludes{} -> ParseException
ex
    ex :: ParseException
ex@LoadSettingsException{} -> ParseException
ex

modifyYamlProblem :: (String -> String) -> ParseException -> ParseException
modifyYamlProblem :: (String -> String) -> ParseException -> ParseException
modifyYamlProblem f :: String -> String
f = (YamlException -> YamlException)
-> ParseException -> ParseException
modifyInvalidYaml ((YamlException -> YamlException)
 -> ParseException -> ParseException)
-> (YamlException -> YamlException)
-> ParseException
-> ParseException
forall a b. (a -> b) -> a -> b
$ \case
    ex :: YamlException
ex@YamlException{} -> YamlException
ex
    YamlParseException problem :: String
problem context :: String
context problemMark :: YamlMark
problemMark ->
        String -> String -> YamlMark -> YamlException
YamlParseException (String -> String
f String
problem) String
context YamlMark
problemMark