binrep-0.7.0: src/Binrep/Get/Error.hs
-- | Error data type definitions (shared between parsers).
module Binrep.Get.Error where
import GHC.Generics ( Generic )
import Data.Text ( Text )
import Numeric.Natural ( Natural )
import Data.Word ( Word8 )
import Data.ByteString ( ByteString )
-- | Structured parse error.
data E
= E Int EMiddle
-- | Unhandled parse error.
--
-- You get this if you don't change a flatparse fail to an error.
--
-- Should not be set except by library code.
| EFail
deriving stock (Eq, Show, Generic)
data EMiddle
-- | Parse error with no further context.
= EBase EBase
-- | Somehow, we got two parse errors.
--
-- I have a feeling that seeing this indicates a problem in your code.
| EAnd E EBase
-- | Parse error decorated with generic info.
--
-- Should not be set except by library code.
| EGeneric String {- ^ data type name -} (EGeneric E)
deriving stock (Eq, Show, Generic)
data EBase
= EExpectedByte Word8 Word8
-- ^ expected first, got second
| EOverlong Int Int
-- ^ expected first, got second
| EExpected ByteString ByteString
-- ^ expected first, got second
| EFailNamed String
-- ^ known fail
| EFailParse String ByteString Word8
-- ^ parse fail (where you parse a larger object, then a smaller one in it)
| ERanOut Int
-- ^ ran out of input, needed precisely @n@ bytes for this part (n > 0)
--
-- Actually a 'Natural', but we use 'Int' because that's what flatparse uses
-- internally.
deriving stock (Eq, Show, Generic)
-- | A generic context layer for a parse error of type @e@.
--
-- Recursive: parse errors occurring in fields are wrapped up here. (Those
-- errors may also have a generic context layer.)
--
-- Making this explicitly recursive may seem strange, but it clarifies that this
-- data type is to be seen as a layer over a top-level type.
data EGeneric e
-- | Parse error relating to sum types (constructors).
= EGenericSum (EGenericSum e)
-- | Parse error in a constructor field.
| EGenericField
String -- ^ constructor name
(Maybe String) -- ^ field record name (if present)
Natural -- ^ field index in constructor
e -- ^ field parse error
deriving stock (Eq, Show, Generic)
data EGenericSum e
-- | Parse error parsing prefix tag.
= EGenericSumTag e
-- | Unable to match a constructor to the parsed prefix tag.
| EGenericSumTagNoMatch
[String] -- ^ constructors tested
Text -- ^ prettified prefix tag
deriving stock (Eq, Show, Generic)