ipfs 1.0.3 → 1.1.0
raw patch · 9 files changed
+110/−16 lines, 9 files
Files
- README.md +0/−2
- ipfs.cabal +5/−2
- library/Network/IPFS/Bytes/Types.hs +13/−0
- library/Network/IPFS/Client.hs +14/−7
- library/Network/IPFS/Client/Stat.hs +10/−0
- library/Network/IPFS/Remote/Class.hs +6/−2
- library/Network/IPFS/Stat.hs +33/−3
- library/Network/IPFS/Stat/Types.hs +25/−0
- library/Network/IPFS/Types.hs +4/−0
README.md view
@@ -1,5 +1,3 @@-- # ipfs-haskell [](https://travis-ci.org/fission-suite/ipfs-haskell)
ipfs.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: 9ed6b01b56d1d0c1aa8f9fe456f538e8fe6bec8bc9bad95f54741a0b89025112+-- hash: 284ab00afa21672d9c0d28245f1677069ac516cab3572cffcbc7dd5a92867875 name: ipfs-version: 1.0.3+version: 1.1.0 synopsis: Access IPFS locally and remotely description: Interact with the IPFS network by shelling out to a local IPFS node or communicating via the HTTP interface of a remote IPFS node. category: Network@@ -37,6 +37,7 @@ Network.IPFS.Add Network.IPFS.Add.Error Network.IPFS.BinPath.Types+ Network.IPFS.Bytes.Types Network.IPFS.CID.Types Network.IPFS.Client Network.IPFS.Client.Add@@ -44,6 +45,7 @@ Network.IPFS.Client.Error.Types Network.IPFS.Client.Param Network.IPFS.Client.Pin+ Network.IPFS.Client.Stat Network.IPFS.DAG Network.IPFS.DAG.Link Network.IPFS.DAG.Link.Types@@ -74,6 +76,7 @@ Network.IPFS.SparseTree Network.IPFS.SparseTree.Types Network.IPFS.Stat+ Network.IPFS.Stat.Types Network.IPFS.Timeout.Types Network.IPFS.Types Network.IPFS.URL.Types
+ library/Network/IPFS/Bytes/Types.hs view
@@ -0,0 +1,13 @@+module Network.IPFS.Bytes.Types (Bytes(..)) where++import Network.IPFS.Prelude++newtype Bytes = Bytes { unBytes :: Natural }+ deriving newtype ( Eq+ , Show+ )++instance FromJSON Bytes where+ parseJSON val = do+ nat <- parseJSON val+ return <| Bytes nat
library/Network/IPFS/Client.hs view
@@ -2,6 +2,7 @@ ( API , add , cat+ , stat , pin , unpin ) where@@ -15,25 +16,31 @@ import qualified Network.IPFS.File.Types as File import Network.IPFS.CID.Types+import Network.IPFS.Stat.Types -import qualified Network.IPFS.Client.Add as Add-import qualified Network.IPFS.Client.Cat as Cat-import qualified Network.IPFS.Client.Pin as Pin+import qualified Network.IPFS.Client.Add as Add+import qualified Network.IPFS.Client.Cat as Cat+import qualified Network.IPFS.Client.Pin as Pin+import qualified Network.IPFS.Client.Stat as Stat type API = "api" :> "v0" :> V0API -type V0API = "add" :> Add.API- :<|> "cat" :> Cat.API- :<|> "pin" :> Pin.API+type V0API = "add" :> Add.API+ :<|> "cat" :> Cat.API+ :<|> "stat" :> Stat.API+ :<|> "pin" :> Pin.API add :: Lazy.ByteString -> ClientM CID cat :: Text -> ClientM File.Serialized+stat :: Text -> ClientM Stat pin :: Text -> ClientM Pin.Response unpin :: Text -> Bool -> ClientM Pin.Response add :<|> cat+ :<|> stat :<|> pin- :<|> unpin = client <| Proxy @API+ :<|> unpin + = client <| Proxy @API
+ library/Network/IPFS/Client/Stat.hs view
@@ -0,0 +1,10 @@+module Network.IPFS.Client.Stat (API) where++import Servant++import Network.IPFS.Stat.Types+import qualified Network.IPFS.Client.Param as Param++type API = "stat"+ :> Param.CID+ :> Get '[JSON] Stat
library/Network/IPFS/Remote/Class.hs view
@@ -3,6 +3,7 @@ , runRemote , ipfsAdd , ipfsCat+ , ipfsStat , ipfsPin , ipfsUnpin ) where@@ -18,15 +19,18 @@ import qualified Network.IPFS.Client.Pin as Pin import qualified Network.IPFS.File.Types as File + 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 ClientError Stat) ipfsPin :: CID -> m (Either ClientError Pin.Response) ipfsUnpin :: CID -> Bool -> m (Either ClientError Pin.Response) -- defaults ipfsAdd raw = runRemote <| IPFS.Client.add raw- ipfsCat (CID cid) = runRemote <| IPFS.Client.cat cid- ipfsPin (CID cid) = runRemote <| IPFS.Client.pin cid+ ipfsCat (CID cid) = runRemote <| IPFS.Client.cat cid+ ipfsStat (CID cid) = runRemote <| IPFS.Client.stat cid+ ipfsPin (CID cid) = runRemote <| IPFS.Client.pin cid ipfsUnpin (CID cid) recursive = runRemote <| IPFS.Client.unpin cid recursive
library/Network/IPFS/Stat.hs view
@@ -1,4 +1,9 @@-module Network.IPFS.Stat (getSize) where+module Network.IPFS.Stat + ( getStatRemote+ , getSizeRemote+ , getSize+ , module Network.IPFS.Stat.Types+ ) where import Data.ByteString.Lazy.Char8 as CL import Data.List as List@@ -7,11 +12,36 @@ import Network.IPFS.Prelude import Network.IPFS.Local.Class as IPFS+import Network.IPFS.Remote.Class as Remote import qualified Network.IPFS.Internal.UTF8 as UTF8 -import Network.IPFS.Get.Error as IPFS.Get+import Network.IPFS.Get.Error as IPFS.Get import qualified Network.IPFS.Process.Error as Process-import Network.IPFS.Types as IPFS++import Network.IPFS.Types as IPFS+import Network.IPFS.Stat.Types +import Network.IPFS.Bytes.Types ++getStatRemote :: + MonadRemoteIPFS m+ => IPFS.CID + -> m (Either IPFS.Get.Error Stat)+getStatRemote cid = + Remote.ipfsStat cid >>= \case+ Left err -> + return . Left . UnexpectedOutput <| UTF8.textShow err++ Right stat -> + return <| Right stat++getSizeRemote :: + MonadRemoteIPFS m+ => IPFS.CID + -> m (Either IPFS.Get.Error Bytes)+getSizeRemote cid = + getStatRemote cid >>= \case+ Left err -> return <| Left err+ Right stat -> return . Right <| cumulativeSize stat getSize :: MonadLocalIPFS m
+ library/Network/IPFS/Stat/Types.hs view
@@ -0,0 +1,25 @@+module Network.IPFS.Stat.Types (Stat(..)) where++import Network.IPFS.Prelude+import Network.IPFS.Bytes.Types+++data Stat = Stat + { blockSize :: Bytes+ , cumulativeSize :: Bytes+ , dataSize :: Bytes+ , hash :: Text+ , linksSize :: Bytes+ , numLinks :: Natural+ }++instance FromJSON Stat where+ parseJSON = withObject "Stat" \obj -> do+ blockSize <- obj .: "BlockSize"+ cumulativeSize <- obj .: "CumulativeSize"+ dataSize <- obj .: "DataSize"+ hash <- obj .: "Hash"+ linksSize <- obj .: "LinksSize"+ numLinks <- obj .: "NumLinks"++ return Stat {..}
library/Network/IPFS/Types.hs view
@@ -16,6 +16,8 @@ , Ignored , Gateway (..) , ErrorBody (..)+ , Stat (..)+ , Bytes (..) ) where import Network.IPFS.BinPath.Types@@ -30,3 +32,5 @@ import Network.IPFS.Ignored.Types import Network.IPFS.Gateway.Types import Network.IPFS.Client.Error.Types+import Network.IPFS.Stat.Types+import Network.IPFS.Bytes.Types