module Currycarbon.Utils (
    CurrycarbonException (..),
    renderCurrycarbonException
) where

import           Control.Exception      (Exception)

-- | Different exceptions for currycarbon
data CurrycarbonException =
      CurrycarbonCLIParsingException String -- ^ An exception to describe an issue in the currycarbon CLI input parsing
    | CurrycarbonCalibrationRangeException String -- ^ An exection to describe the case that a 
                                                  -- date is not in the range of the supplied calibration curve
    deriving (Int -> CurrycarbonException -> ShowS
[CurrycarbonException] -> ShowS
CurrycarbonException -> String
(Int -> CurrycarbonException -> ShowS)
-> (CurrycarbonException -> String)
-> ([CurrycarbonException] -> ShowS)
-> Show CurrycarbonException
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CurrycarbonException] -> ShowS
$cshowList :: [CurrycarbonException] -> ShowS
show :: CurrycarbonException -> String
$cshow :: CurrycarbonException -> String
showsPrec :: Int -> CurrycarbonException -> ShowS
$cshowsPrec :: Int -> CurrycarbonException -> ShowS
Show)

instance Exception CurrycarbonException

renderCurrycarbonException :: CurrycarbonException -> String 
renderCurrycarbonException :: CurrycarbonException -> String
renderCurrycarbonException (CurrycarbonCLIParsingException String
s) = 
    String
"<!> Error: Input can not be parsed\n" String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
s
renderCurrycarbonException (CurrycarbonCalibrationRangeException String
s) =
    String
s String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" <!> Error: Date outside of calibration range"