module AesonValueParser.Error where import AesonValueParser.Prelude import qualified Data.Text as Text import qualified Text.Builder as TextBuilder data Error = Error [Text] {-^ Path -} Text {-^ Message -} instance Semigroup Error where (<>) _ b = b instance Monoid Error where mempty = Error [] "" mappend = (<>) instance IsString Error where fromString = message . fromString instance Show Error where show = Text.unpack . toText {-# INLINE indexed #-} indexed :: Int -> Error -> Error indexed = named . fromString . show {-# INLINE named #-} named :: Text -> Error -> Error named name (Error path message) = Error (name : path) message {-# INLINE message #-} message :: Text -> Error message = Error [] toText :: Error -> Text toText = TextBuilder.run . toTextBuilder toTextBuilder :: Error -> TextBuilder.Builder toTextBuilder (Error path message) = "AST parsing error at path " <> foldMap (\ x -> "/" <> TextBuilder.text x) path <> ": " <> TextBuilder.text message