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)