ipfs 1.3.1 → 1.3.2
raw patch · 11 files changed
+93/−27 lines, 11 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Network.IPFS.Add.Error: instance Data.Aeson.Types.ToJSON.ToJSON Network.IPFS.Add.Error.Error
- Network.IPFS.Error: instance Data.Aeson.Types.ToJSON.ToJSON Network.IPFS.Error.Error
- Network.IPFS.Get.Error: instance Data.Aeson.Types.ToJSON.ToJSON Network.IPFS.Get.Error.Error
+ Network.IPFS.Get.Error: SizeError :: OverflowDetected -> Error
+ Network.IPFS.Get.Error: WebError :: ClientError -> Error
+ Network.IPFS.Prelude: openFile :: MonadIO m => FilePath -> IOMode -> m Handle
+ Network.IPFS.Remote.Error: SizeError :: OverflowDetected -> StatError
+ Network.IPFS.Remote.Error: WebError :: ClientError -> StatError
+ Network.IPFS.Remote.Error: data StatError
+ Network.IPFS.Remote.Error: instance GHC.Classes.Eq Network.IPFS.Remote.Error.StatError
+ Network.IPFS.Remote.Error: instance GHC.Show.Show Network.IPFS.Remote.Error.StatError
+ Network.IPFS.Stat.Error: OverflowDetected :: OverflowDetected
+ Network.IPFS.Stat.Error: data OverflowDetected
+ Network.IPFS.Stat.Error: instance Data.Aeson.Types.FromJSON.FromJSON Network.IPFS.Stat.Error.OverflowDetected
+ Network.IPFS.Stat.Error: instance Data.Aeson.Types.ToJSON.ToJSON Network.IPFS.Stat.Error.OverflowDetected
+ Network.IPFS.Stat.Error: instance GHC.Classes.Eq Network.IPFS.Stat.Error.OverflowDetected
+ Network.IPFS.Stat.Error: instance GHC.Show.Show Network.IPFS.Stat.Error.OverflowDetected
+ Network.IPFS.Stat.Error: instance RIO.Prelude.Display.Display Network.IPFS.Stat.Error.OverflowDetected
- Network.IPFS.Client: stat :: CID -> ClientM Stat
+ Network.IPFS.Client: stat :: CID -> ClientM (Either OverflowDetected Stat)
- Network.IPFS.Client.Stat: type API = "stat" :> CID' :> Post '[JSON] Stat
+ Network.IPFS.Client.Stat: type API = "stat" :> CID' :> Post '[JSON] (Either OverflowDetected Stat)
- Network.IPFS.Remote.Class: ipfsStat :: MonadRemoteIPFS m => CID -> m (Either ClientError Stat)
+ Network.IPFS.Remote.Class: ipfsStat :: MonadRemoteIPFS m => CID -> m (Either StatError Stat)
- Network.IPFS.Stat.Types: Stat :: Bytes -> Bytes -> Bytes -> Text -> Bytes -> Natural -> Stat
+ Network.IPFS.Stat.Types: Stat :: Either OverflowDetected Bytes -> Either OverflowDetected Bytes -> Either OverflowDetected Bytes -> Text -> Bytes -> Natural -> Stat
- Network.IPFS.Stat.Types: [$sel:blockSize:Stat] :: Stat -> Bytes
+ Network.IPFS.Stat.Types: [$sel:blockSize:Stat] :: Stat -> Either OverflowDetected Bytes
- Network.IPFS.Stat.Types: [$sel:cumulativeSize:Stat] :: Stat -> Bytes
+ Network.IPFS.Stat.Types: [$sel:cumulativeSize:Stat] :: Stat -> Either OverflowDetected Bytes
- Network.IPFS.Stat.Types: [$sel:dataSize:Stat] :: Stat -> Bytes
+ Network.IPFS.Stat.Types: [$sel:dataSize:Stat] :: Stat -> Either OverflowDetected Bytes
- Network.IPFS.Types: Stat :: Bytes -> Bytes -> Bytes -> Text -> Bytes -> Natural -> Stat
+ Network.IPFS.Types: Stat :: Either OverflowDetected Bytes -> Either OverflowDetected Bytes -> Either OverflowDetected Bytes -> Text -> Bytes -> Natural -> Stat
- Network.IPFS.Types: [$sel:blockSize:Stat] :: Stat -> Bytes
+ Network.IPFS.Types: [$sel:blockSize:Stat] :: Stat -> Either OverflowDetected Bytes
- Network.IPFS.Types: [$sel:cumulativeSize:Stat] :: Stat -> Bytes
+ Network.IPFS.Types: [$sel:cumulativeSize:Stat] :: Stat -> Either OverflowDetected Bytes
- Network.IPFS.Types: [$sel:dataSize:Stat] :: Stat -> Bytes
+ Network.IPFS.Types: [$sel:dataSize:Stat] :: Stat -> Either OverflowDetected Bytes
Files
- ipfs.cabal +5/−3
- library/Network/IPFS/Add/Error.hs +1/−2
- library/Network/IPFS/Client.hs +1/−1
- library/Network/IPFS/Client/Stat.hs +3/−1
- library/Network/IPFS/Error.hs +0/−1
- library/Network/IPFS/Get/Error.hs +12/−1
- library/Network/IPFS/Remote/Class.hs +14/−7
- library/Network/IPFS/Remote/Error.hs +12/−0
- library/Network/IPFS/Stat.hs +11/−4
- library/Network/IPFS/Stat/Error.hs +21/−0
- library/Network/IPFS/Stat/Types.hs +13/−7
ipfs.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack name: ipfs-version: 1.3.1+version: 1.3.2 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@@ -24,7 +24,7 @@ license-file: LICENSE build-type: Simple tested-with:- GHC==8.10.4+ GHC==8.10.7 extra-source-files: README.md @@ -79,9 +79,11 @@ Network.IPFS.Process.Error Network.IPFS.Process.Types Network.IPFS.Remote.Class+ Network.IPFS.Remote.Error Network.IPFS.SparseTree Network.IPFS.SparseTree.Types Network.IPFS.Stat+ Network.IPFS.Stat.Error Network.IPFS.Stat.Types Network.IPFS.Timeout.Types Network.IPFS.Types@@ -209,7 +211,7 @@ TemplateHaskell TypeOperators ViewPatterns- ghc-options: -Wall -Wcompat -Widentities -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-export-lists -Wpartial-fields -Wredundant-constraints -fhide-source-paths -threaded -rtsopts -with-rtsopts=-N+ ghc-options: -Wall -Wcompat -Widentities -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-export-lists -Wpartial-fields -Wredundant-constraints -fhide-source-paths build-depends: Glob , QuickCheck
library/Network/IPFS/Add/Error.hs view
@@ -1,7 +1,7 @@ module Network.IPFS.Add.Error (Error (..)) where -import Network.IPFS.Prelude import qualified Network.IPFS.Get.Error as Get+import Network.IPFS.Prelude data Error = InvalidFile@@ -13,7 +13,6 @@ , Eq , Generic , Show- , ToJSON ) instance Display Error where
library/Network/IPFS/Client.hs view
@@ -41,7 +41,7 @@ :<|> "pin" :> Pin.API cat :: CID -> ClientM File.Serialized-stat :: CID -> ClientM Stat+stat :: CID -> ClientM (Either OverflowDetected Stat) pin :: CID -> ClientM Pin.Response unpin :: CID -> Bool -> ClientM Pin.Response dagPut :: Bool -> (Lazy.ByteString, File.Form) -> ClientM DAG.Put.Response
library/Network/IPFS/Client/Stat.hs view
@@ -2,6 +2,8 @@ import Servant +import Network.IPFS.Prelude+ import qualified Network.IPFS.Client.Param as Param import Network.IPFS.Stat.Types @@ -9,4 +11,4 @@ -- https://docs.ipfs.io/recent-releases/go-ipfs-0-5/#breaking-changes-upgrade-notes type API = "stat" :> Param.CID'- :> Post '[JSON] Stat+ :> Post '[JSON] (Either OverflowDetected Stat)
library/Network/IPFS/Error.hs view
@@ -17,7 +17,6 @@ , Eq , Generic , Show- , ToJSON ) -- NOTE Will not stay as a newtype in the long term
library/Network/IPFS/Get/Error.hs view
@@ -1,18 +1,23 @@ module Network.IPFS.Get.Error (Error (..)) where +import Servant.Client+ import Network.IPFS.Prelude++import Network.IPFS.Stat.Error import Network.IPFS.Types data Error = InvalidCID Text | TimedOut CID Natural+ | WebError ClientError+ | SizeError OverflowDetected | UnexpectedOutput Text | UnknownErr Text deriving ( Exception , Eq , Generic , Show- , ToJSON ) instance Display Error where@@ -28,6 +33,12 @@ , display sec , " seconds." ]++ WebError err ->+ "WebError: " <> displayShow err++ SizeError err ->+ "SizeError: " <> display err UnexpectedOutput raw -> "Unexpected IPFS output: " <> display raw
library/Network/IPFS/Remote/Class.hs view
@@ -10,26 +10,33 @@ import Network.IPFS.Prelude -import qualified RIO.ByteString.Lazy as Lazy+import qualified RIO.ByteString.Lazy as Lazy import Servant.Client -import Network.IPFS.Types as IPFS+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 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 ClientError Stat)+ ipfsStat :: CID -> m (Either StatError 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 = runRemote $ IPFS.Client.cat cid- ipfsStat cid = runRemote $ IPFS.Client.stat cid ipfsPin cid = runRemote $ IPFS.Client.pin cid ipfsUnpin cid recursive = runRemote $ IPFS.Client.unpin cid recursive++ ipfsStat cid =+ runRemote (IPFS.Client.stat cid) >>= \case+ Left clientErr -> return . Left $ WebError clientErr+ Right (Left sizeErr) -> return . Left $ SizeError sizeErr+ Right (Right payload) -> return $ Right payload
+ library/Network/IPFS/Remote/Error.hs view
@@ -0,0 +1,12 @@+module Network.IPFS.Remote.Error (StatError (..)) where++import Servant.Client++import Network.IPFS.Prelude++import Network.IPFS.Stat.Error++data StatError+ = WebError ClientError+ | SizeError OverflowDetected+ deriving (Show, Eq)
library/Network/IPFS/Stat.hs view
@@ -19,20 +19,27 @@ import qualified Network.IPFS.Process.Error as Process import Network.IPFS.Bytes.Types+import qualified Network.IPFS.Remote.Error as Remote import Network.IPFS.Stat.Types import Network.IPFS.Types as IPFS 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+ Right statPayload -> return $ Right statPayload+ Left (Remote.WebError err) -> return . Left $ IPFS.Get.WebError err+ Left (Remote.SizeError err) -> return . Left $ IPFS.Get.SizeError err 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+ Left err ->+ return $ Left err++ Right Stat {cumulativeSize} ->+ case cumulativeSize of+ Left err -> return $ Left $ IPFS.Get.SizeError err+ Right size -> return $ Right size getSize :: MonadLocalIPFS m => IPFS.CID -> m (Either IPFS.Get.Error Integer) getSize cid@(CID hash) = IPFS.runLocal ["object", "stat"] (Lazy.fromStrict <| encodeUtf8 hash) >>= \case
+ library/Network/IPFS/Stat/Error.hs view
@@ -0,0 +1,21 @@+module Network.IPFS.Stat.Error (OverflowDetected (..)) where++import qualified RIO.Text as Text++import Network.IPFS.Prelude++data OverflowDetected = OverflowDetected+ deriving (Eq, Show)++instance Display OverflowDetected where+ display OverflowDetected = "OverflowDetected"++instance ToJSON OverflowDetected where+ toJSON OverflowDetected = String "OverflowDetected"++instance FromJSON OverflowDetected where+ parseJSON =+ withText "OverflowDetected" \txt ->+ if "-" `Text.isPrefixOf` txt+ then return OverflowDetected+ else fail "Not an overflow"
library/Network/IPFS/Stat/Types.hs view
@@ -1,13 +1,17 @@-module Network.IPFS.Stat.Types (Stat(..)) where+module Network.IPFS.Stat.Types+ ( Stat (..)+ , module Network.IPFS.Stat.Error+ ) where -import Network.IPFS.Prelude-import Network.IPFS.Bytes.Types+import Network.IPFS.Bytes.Types+import Network.IPFS.Stat.Error +import Network.IPFS.Prelude -data Stat = Stat - { blockSize :: Bytes- , cumulativeSize :: Bytes- , dataSize :: Bytes+data Stat = Stat+ { blockSize :: Either OverflowDetected Bytes+ , cumulativeSize :: Either OverflowDetected Bytes+ , dataSize :: Either OverflowDetected Bytes , hash :: Text , linksSize :: Bytes , numLinks :: Natural@@ -18,8 +22,10 @@ blockSize <- obj .: "BlockSize" cumulativeSize <- obj .: "CumulativeSize" dataSize <- obj .: "DataSize"+ hash <- obj .: "Hash" linksSize <- obj .: "LinksSize" numLinks <- obj .: "NumLinks" return Stat {..}+