module Network.IPFS.Get.Error (Error (..)) where

import           Servant.Client

import           Network.IPFS.Prelude

import           Network.IPFS.Stat.Error
import           Network.IPFS.Types

data Error
  = InvalidCID Text
  | TimedOut CID Natural
  | WebError ClientError
  | SizeError OverflowDetected
  | UnexpectedOutput Text
  | UnknownErr Text
  deriving ( Show Error
Typeable Error
SomeException -> Maybe Error
Error -> String
Error -> SomeException
forall e.
Typeable e
-> Show e
-> (e -> SomeException)
-> (SomeException -> Maybe e)
-> (e -> String)
-> Exception e
displayException :: Error -> String
$cdisplayException :: Error -> String
fromException :: SomeException -> Maybe Error
$cfromException :: SomeException -> Maybe Error
toException :: Error -> SomeException
$ctoException :: Error -> SomeException
Exception
           , Error -> Error -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Error -> Error -> Bool
$c/= :: Error -> Error -> Bool
== :: Error -> Error -> Bool
$c== :: Error -> Error -> Bool
Eq
           , forall x. Rep Error x -> Error
forall x. Error -> Rep Error x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Error x -> Error
$cfrom :: forall x. Error -> Rep Error x
Generic
           , Int -> Error -> ShowS
[Error] -> ShowS
Error -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Error] -> ShowS
$cshowList :: [Error] -> ShowS
show :: Error -> String
$cshow :: Error -> String
showsPrec :: Int -> Error -> ShowS
$cshowsPrec :: Int -> Error -> ShowS
Show
           )

instance Display Error where
  display :: Error -> Utf8Builder
display = \case
    InvalidCID Text
hash ->
      Utf8Builder
"Invalid CID: " forall a. Semigroup a => a -> a -> a
<> forall a. Display a => a -> Utf8Builder
display Text
hash

    TimedOut (CID Text
hash) Natural
sec ->
      forall a. Monoid a => [a] -> a
mconcat
        [ Utf8Builder
"Unable to find CID "
        , forall a. Display a => a -> Utf8Builder
display Text
hash
        , Utf8Builder
" before the timeout of "
        , forall a. Display a => a -> Utf8Builder
display Natural
sec
        , Utf8Builder
" seconds."
        ]

    WebError ClientError
err ->
      Utf8Builder
"WebError: " forall a. Semigroup a => a -> a -> a
<> forall a. Show a => a -> Utf8Builder
displayShow ClientError
err

    SizeError OverflowDetected
err ->
      Utf8Builder
"SizeError: " forall a. Semigroup a => a -> a -> a
<> forall a. Display a => a -> Utf8Builder
display OverflowDetected
err

    UnexpectedOutput Text
raw ->
      Utf8Builder
"Unexpected IPFS output: " forall a. Semigroup a => a -> a -> a
<> forall a. Display a => a -> Utf8Builder
display Text
raw

    UnknownErr Text
raw ->
      Utf8Builder
"Unknown IPFS get error: " forall a. Semigroup a => a -> a -> a
<> forall a. Display a => a -> Utf8Builder
display Text
raw