packages feed

obd-0.2.1.1: src/System/Hardware/ELM327/Errors.hs

-- | A collection of error types.
module System.Hardware.ELM327.Errors where

import Control.Lens (Prism', prism')

-- | Possible errors when issuing OBD commands.
data OBDError = OBDErrorMessage OBDErrorMessage
              | OBDDecodeError OBDDecodeError
              deriving (Eq, Show)

-- | Error messages sent by the ELM327 when issuing OBD commands
data OBDErrorMessage = UnableToConnect
                     | BusInitError
                     | NoData
                     deriving (Eq, Show)

-- | A prism between 'String' and 'ELM327Error'.
obdErrorMessage :: Prism' String OBDErrorMessage
obdErrorMessage = prism' conv mConv
  where
    conv UnableToConnect = "UNABLE TO CONNECT"
    conv BusInitError = "BUS INIT: ... ERROR"
    conv NoData = "NO DATA"

    mConv "UNABLE TO CONNECT" = Just UnableToConnect
    mConv "BUS INIT: ... ERROR" = Just BusInitError
    mConv "NO DATA" = Just NoData
    mConv _ = Nothing

-- | Possible decode errors when issuing OBD commands.
data OBDDecodeError = NotEnoughBytesError
                    | HexDecodeError
                    | NoResponseHeaderError
                    | EmptyResponseError
                    deriving (Eq, Show)