packages feed

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 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 {..}+