module Network.IPFS.Error
  ( Error (..)
  , Linearization (..)
  ) where

import           Network.IPFS.Prelude
import           Network.IPFS.Types

import qualified Network.IPFS.Add.Error as Add
import qualified Network.IPFS.Get.Error as Get

data Error
  = AddErr Add.Error
  | GetErr Get.Error
  | LinearizationErr Linearization
  deriving ( Show Error
Typeable Error
Typeable Error
-> Show Error
-> (Error -> SomeException)
-> (SomeException -> Maybe Error)
-> (Error -> String)
-> Exception 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
$cp2Exception :: Show Error
$cp1Exception :: Typeable Error
Exception
           , Error -> Error -> Bool
(Error -> Error -> Bool) -> (Error -> Error -> Bool) -> Eq Error
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. Error -> Rep Error x)
-> (forall x. Rep Error x -> Error) -> Generic Error
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
(Int -> Error -> ShowS)
-> (Error -> String) -> ([Error] -> ShowS) -> Show Error
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
           , [Error] -> Encoding
[Error] -> Value
Error -> Encoding
Error -> Value
(Error -> Value)
-> (Error -> Encoding)
-> ([Error] -> Value)
-> ([Error] -> Encoding)
-> ToJSON Error
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
toEncodingList :: [Error] -> Encoding
$ctoEncodingList :: [Error] -> Encoding
toJSONList :: [Error] -> Value
$ctoJSONList :: [Error] -> Value
toEncoding :: Error -> Encoding
$ctoEncoding :: Error -> Encoding
toJSON :: Error -> Value
$ctoJSON :: Error -> Value
ToJSON
           )

-- NOTE Will not stay as a newtype in the long term
newtype Linearization = NonLinear SparseTree
  deriving          ( Linearization -> Linearization -> Bool
(Linearization -> Linearization -> Bool)
-> (Linearization -> Linearization -> Bool) -> Eq Linearization
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Linearization -> Linearization -> Bool
$c/= :: Linearization -> Linearization -> Bool
== :: Linearization -> Linearization -> Bool
$c== :: Linearization -> Linearization -> Bool
Eq
                    , (forall x. Linearization -> Rep Linearization x)
-> (forall x. Rep Linearization x -> Linearization)
-> Generic Linearization
forall x. Rep Linearization x -> Linearization
forall x. Linearization -> Rep Linearization x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Linearization x -> Linearization
$cfrom :: forall x. Linearization -> Rep Linearization x
Generic
                    , Int -> Linearization -> ShowS
[Linearization] -> ShowS
Linearization -> String
(Int -> Linearization -> ShowS)
-> (Linearization -> String)
-> ([Linearization] -> ShowS)
-> Show Linearization
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Linearization] -> ShowS
$cshowList :: [Linearization] -> ShowS
show :: Linearization -> String
$cshow :: Linearization -> String
showsPrec :: Int -> Linearization -> ShowS
$cshowsPrec :: Int -> Linearization -> ShowS
Show
                    )
  deriving anyclass ( Show Linearization
Typeable Linearization
Typeable Linearization
-> Show Linearization
-> (Linearization -> SomeException)
-> (SomeException -> Maybe Linearization)
-> (Linearization -> String)
-> Exception Linearization
SomeException -> Maybe Linearization
Linearization -> String
Linearization -> SomeException
forall e.
Typeable e
-> Show e
-> (e -> SomeException)
-> (SomeException -> Maybe e)
-> (e -> String)
-> Exception e
displayException :: Linearization -> String
$cdisplayException :: Linearization -> String
fromException :: SomeException -> Maybe Linearization
$cfromException :: SomeException -> Maybe Linearization
toException :: Linearization -> SomeException
$ctoException :: Linearization -> SomeException
$cp2Exception :: Show Linearization
$cp1Exception :: Typeable Linearization
Exception
                    , [Linearization] -> Encoding
[Linearization] -> Value
Linearization -> Encoding
Linearization -> Value
(Linearization -> Value)
-> (Linearization -> Encoding)
-> ([Linearization] -> Value)
-> ([Linearization] -> Encoding)
-> ToJSON Linearization
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
toEncodingList :: [Linearization] -> Encoding
$ctoEncodingList :: [Linearization] -> Encoding
toJSONList :: [Linearization] -> Value
$ctoJSONList :: [Linearization] -> Value
toEncoding :: Linearization -> Encoding
$ctoEncoding :: Linearization -> Encoding
toJSON :: Linearization -> Value
$ctoJSON :: Linearization -> Value
ToJSON
                    )

instance Display Linearization where
  display :: Linearization -> Utf8Builder
display (NonLinear SparseTree
sparseTree) = Utf8Builder
"Unable to linearize IPFS result: " Utf8Builder -> Utf8Builder -> Utf8Builder
forall a. Semigroup a => a -> a -> a
<> SparseTree -> Utf8Builder
forall a. Display a => a -> Utf8Builder
display SparseTree
sparseTree