module Network.IPFS.Remote.Class
( MonadRemoteIPFS
, runRemote
, ipfsAdd
, ipfsCat
, ipfsStat
, ipfsPin
, ipfsUnpin
) where
import Network.IPFS.Prelude
import qualified RIO.ByteString.Lazy as Lazy
import Servant.Client
import Network.IPFS.Types as IPFS
import qualified Network.IPFS.Client as IPFS.Client
import qualified Network.IPFS.Client.Pin as Pin
import qualified Network.IPFS.File.Types as File
import Network.IPFS.Remote.Error
class MonadIO m => MonadRemoteIPFS m where
runRemote :: ClientM a -> m (Either ClientError a)
ipfsAdd :: Lazy.ByteString -> m (Either ClientError CID)
ipfsCat :: CID -> m (Either ClientError File.Serialized)
ipfsStat :: CID -> m (Either StatError Stat)
ipfsPin :: CID -> m (Either ClientError Pin.Response)
ipfsUnpin :: CID -> Bool -> m (Either ClientError Pin.Response)
ipfsAdd ByteString
raw = ClientM CID -> m (Either ClientError CID)
forall (m :: * -> *) a.
MonadRemoteIPFS m =>
ClientM a -> m (Either ClientError a)
runRemote (ClientM CID -> m (Either ClientError CID))
-> ClientM CID -> m (Either ClientError CID)
forall a b. (a -> b) -> a -> b
$ ByteString -> ClientM CID
IPFS.Client.add ByteString
raw
ipfsCat CID
cid = ClientM Serialized -> m (Either ClientError Serialized)
forall (m :: * -> *) a.
MonadRemoteIPFS m =>
ClientM a -> m (Either ClientError a)
runRemote (ClientM Serialized -> m (Either ClientError Serialized))
-> ClientM Serialized -> m (Either ClientError Serialized)
forall a b. (a -> b) -> a -> b
$ CID -> ClientM Serialized
IPFS.Client.cat CID
cid
ipfsPin CID
cid = ClientM Response -> m (Either ClientError Response)
forall (m :: * -> *) a.
MonadRemoteIPFS m =>
ClientM a -> m (Either ClientError a)
runRemote (ClientM Response -> m (Either ClientError Response))
-> ClientM Response -> m (Either ClientError Response)
forall a b. (a -> b) -> a -> b
$ CID -> ClientM Response
IPFS.Client.pin CID
cid
ipfsUnpin CID
cid Bool
recursive = ClientM Response -> m (Either ClientError Response)
forall (m :: * -> *) a.
MonadRemoteIPFS m =>
ClientM a -> m (Either ClientError a)
runRemote (ClientM Response -> m (Either ClientError Response))
-> ClientM Response -> m (Either ClientError Response)
forall a b. (a -> b) -> a -> b
$ CID -> Bool -> ClientM Response
IPFS.Client.unpin CID
cid Bool
recursive
ipfsStat CID
cid =
ClientM (Either OverflowDetected Stat)
-> m (Either ClientError (Either OverflowDetected Stat))
forall (m :: * -> *) a.
MonadRemoteIPFS m =>
ClientM a -> m (Either ClientError a)
runRemote (CID -> ClientM (Either OverflowDetected Stat)
IPFS.Client.stat CID
cid) m (Either ClientError (Either OverflowDetected Stat))
-> (Either ClientError (Either OverflowDetected Stat)
-> m (Either StatError Stat))
-> m (Either StatError Stat)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \case
Left ClientError
clientErr -> Either StatError Stat -> m (Either StatError Stat)
forall (m :: * -> *) a. Monad m => a -> m a
return (Either StatError Stat -> m (Either StatError Stat))
-> (StatError -> Either StatError Stat)
-> StatError
-> m (Either StatError Stat)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. StatError -> Either StatError Stat
forall a b. a -> Either a b
Left (StatError -> m (Either StatError Stat))
-> StatError -> m (Either StatError Stat)
forall a b. (a -> b) -> a -> b
$ ClientError -> StatError
WebError ClientError
clientErr
Right (Left OverflowDetected
sizeErr) -> Either StatError Stat -> m (Either StatError Stat)
forall (m :: * -> *) a. Monad m => a -> m a
return (Either StatError Stat -> m (Either StatError Stat))
-> (StatError -> Either StatError Stat)
-> StatError
-> m (Either StatError Stat)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. StatError -> Either StatError Stat
forall a b. a -> Either a b
Left (StatError -> m (Either StatError Stat))
-> StatError -> m (Either StatError Stat)
forall a b. (a -> b) -> a -> b
$ OverflowDetected -> StatError
SizeError OverflowDetected
sizeErr
Right (Right Stat
payload) -> Either StatError Stat -> m (Either StatError Stat)
forall (m :: * -> *) a. Monad m => a -> m a
return (Either StatError Stat -> m (Either StatError Stat))
-> Either StatError Stat -> m (Either StatError Stat)
forall a b. (a -> b) -> a -> b
$ Stat -> Either StatError Stat
forall a b. b -> Either a b
Right Stat
payload