module Network.IPFS.DAG.Link (create) where

import           Network.IPFS.Prelude
import           Network.IPFS.Local.Class

import           Network.IPFS.Get.Error      as IPFS.Get
import           Network.IPFS.Types          as IPFS
import           Network.IPFS.DAG.Link.Types as DAG
import qualified Network.IPFS.Stat           as Stat

create ::
  MonadLocalIPFS m
  => IPFS.CID
  -> IPFS.Name
  -> m (Either IPFS.Get.Error Link)
create :: CID -> Name -> m (Either Error Link)
create CID
cid Name
name = CID -> m (Either Error Integer)
forall (m :: * -> *).
MonadLocalIPFS m =>
CID -> m (Either Error Integer)
Stat.getSize CID
cid m (Either Error Integer)
-> (Either Error Integer -> m (Either Error Link))
-> m (Either Error Link)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \case
  Left Error
err -> Either Error Link -> m (Either Error Link)
forall (m :: * -> *) a. Monad m => a -> m a
return (Either Error Link -> m (Either Error Link))
-> Either Error Link -> m (Either Error Link)
forall a b. (a -> b) -> a -> b
<| Error -> Either Error Link
forall a b. a -> Either a b
Left Error
err
  Right Integer
size -> Either Error Link -> m (Either Error Link)
forall (m :: * -> *) a. Monad m => a -> m a
return (Either Error Link -> m (Either Error Link))
-> (Link -> Either Error Link) -> Link -> m (Either Error Link)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Link -> Either Error Link
forall a b. b -> Either a b
Right (Link -> m (Either Error Link)) -> Link -> m (Either Error Link)
forall a b. (a -> b) -> a -> b
<| Link :: CID -> Name -> Integer -> Link
Link
    { $sel:cid:Link :: CID
cid = CID
cid
    , $sel:name:Link :: Name
name = Name
name
    , $sel:size:Link :: Integer
size = Integer
size
    }