{-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE OverloadedStrings #-} module HaskellWorks.Data.Uri.UriError ( UriError(..) , displayUriError , uriErrorStatus ) where import Control.DeepSeq import Data.Semigroup ((<>)) import Data.String import Data.Text (Text) import GHC.Generics import HaskellWorks.Data.Uri.Show import HaskellWorks.Data.Uri.Status import qualified Data.Text as T data UriError = AwsUriError { status :: Status } | HttpUriError { status :: Status } | RetriesFailedUriError | NotFound | DeleteFailed Text | GenericUriError Text deriving (Eq, Show, Generic, NFData) instance IsString UriError where fromString = GenericUriError . T.pack displayUriError :: UriError -> Text displayUriError (AwsUriError s) = tshow s displayUriError (HttpUriError s) = tshow s displayUriError RetriesFailedUriError = "Multiple retries failed" displayUriError NotFound = "Not found" displayUriError (GenericUriError msg) = msg displayUriError (DeleteFailed msg) = "Delete failed: " <> msg uriErrorStatus :: UriError -> Maybe Int uriErrorStatus (AwsUriError (Status statusCode _)) = Just statusCode uriErrorStatus _ = Nothing