-- |
-- Module      :  Network.Ipfs.Api.Cid
-- Copyright   :  Alexander Krupenkin 2016
-- License     :  BSD3
--
-- Maintainer  :  mail@akru.me
-- Stability   :  experimental
-- Portability :  unknown
--
-- Api calls with `cid` prefix.
--

module Network.Ipfs.Api.Cid where

import           Control.Monad.IO.Class         (MonadIO)
import           Data.Text                      (Text)

import           Network.Ipfs.Api.Internal      (_cidBase32, _cidBases,
                                                 _cidCodecs, _cidFormat,
                                                 _cidHashes)
import           Network.Ipfs.Api.Internal.Call (call)
import           Network.Ipfs.Api.Types         (CidBasesObj, CidCodecsObj,
                                                 CidHashesObj, CidObj)
import           Network.Ipfs.Client            (IpfsT)

-- | List available multibase encodings.
bases :: MonadIO m => IpfsT m [CidBasesObj]
bases = call _cidBases

-- | List available CID codecs.
codecs :: MonadIO m => IpfsT m [CidCodecsObj]
codecs = call _cidCodecs

-- | List available multihashes.
hashes :: MonadIO m => IpfsT m [CidHashesObj]
hashes = call _cidHashes

-- | Convert CIDs to Base32 CID version 1.
base32 :: MonadIO m => Text -> IpfsT m CidObj
base32 = call . _cidBase32

-- | Format and convert a CID in various useful ways.
format :: MonadIO m => Text -> IpfsT m CidObj
format = call . _cidFormat