-- SPDX-FileCopyrightText: 2021 Oxhead Alpha -- SPDX-License-Identifier: LicenseRef-MIT-OA -- | Custom exceptions that can happen during parsing. module Morley.Michelson.Parser.Error ( CustomParserException (..) , StringLiteralParserException (..) , ParseErrorBundle , ParserException (..) ) where import Data.Data (Data(..)) import Fmt (Buildable(build), pretty) import Text.Megaparsec (ParseErrorBundle, ShowErrorComponent(..), errorBundlePretty) import Morley.Michelson.Untyped.View import Morley.Util.Instances () data CustomParserException = StringLiteralException StringLiteralParserException | ViewNameException BadViewNameError | OddNumberBytesException | ExcessFieldAnnotation deriving stock (Eq, Data, Ord, Show, Generic) instance NFData CustomParserException instance ShowErrorComponent CustomParserException where showErrorComponent (StringLiteralException e) = showErrorComponent e showErrorComponent (ViewNameException e) = pretty e showErrorComponent OddNumberBytesException = "odd number bytes" showErrorComponent ExcessFieldAnnotation = "excess field annotation" data StringLiteralParserException = InvalidEscapeSequence Char | InvalidChar Char deriving stock (Eq, Data, Ord, Show, Generic) instance NFData StringLiteralParserException instance ShowErrorComponent StringLiteralParserException where showErrorComponent (InvalidEscapeSequence c) = "invalid escape sequence '\\" <> [c] <> "'" showErrorComponent (InvalidChar c) = "invalid character '" <> [c] <> "'" data ParserException = ParserException (ParseErrorBundle Text CustomParserException) deriving stock (Eq, Show) instance Exception ParserException where displayException (ParserException bundle) = errorBundlePretty bundle instance Buildable ParserException where build (ParserException bundle) = build $ errorBundlePretty bundle