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