module CabalGild.Unstable.Exception.InvalidOption where

import qualified Control.Monad.Catch as Exception
import qualified Data.Char as Char
import qualified Data.List as List

-- | This exception is thrown when a command line option is invalid.
newtype InvalidOption
  = InvalidOption String
  deriving (InvalidOption -> InvalidOption -> Bool
(InvalidOption -> InvalidOption -> Bool)
-> (InvalidOption -> InvalidOption -> Bool) -> Eq InvalidOption
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: InvalidOption -> InvalidOption -> Bool
== :: InvalidOption -> InvalidOption -> Bool
$c/= :: InvalidOption -> InvalidOption -> Bool
/= :: InvalidOption -> InvalidOption -> Bool
Eq, Int -> InvalidOption -> ShowS
[InvalidOption] -> ShowS
InvalidOption -> String
(Int -> InvalidOption -> ShowS)
-> (InvalidOption -> String)
-> ([InvalidOption] -> ShowS)
-> Show InvalidOption
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> InvalidOption -> ShowS
showsPrec :: Int -> InvalidOption -> ShowS
$cshow :: InvalidOption -> String
show :: InvalidOption -> String
$cshowList :: [InvalidOption] -> ShowS
showList :: [InvalidOption] -> ShowS
Show)

instance Exception.Exception InvalidOption where
  displayException :: InvalidOption -> String
displayException (InvalidOption String
s) = String
"invalid option: " String -> ShowS
forall a. Semigroup a => a -> a -> a
<> String
s

-- | Constructs an 'InvalidOption' from the given 'String'.
fromString :: String -> InvalidOption
fromString :: String -> InvalidOption
fromString = String -> InvalidOption
InvalidOption (String -> InvalidOption) -> ShowS -> String -> InvalidOption
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Char -> Bool) -> ShowS
forall a. (a -> Bool) -> [a] -> [a]
List.dropWhileEnd Char -> Bool
Char.isSpace