packages feed

ipfs-1.2.0.0: library/Network/IPFS/Client/Streaming/Pin.hs

module Network.IPFS.Client.Streaming.Pin
  ( PinComplete
  , PinStatus (..)
  ) where

import           Servant.API

import           Network.IPFS.Prelude

import           Network.IPFS.CID.Types
import qualified Network.IPFS.Client.Param as Param

type PinComplete
  =  "api"
  :> "v0"
  :> "pin"
  :> "add"
  :> Param.CID'
  :> QueryParam "progress" Bool
  :> StreamPost NewlineFraming JSON (SourceIO PinStatus)

data PinStatus = PinStatus
  { pins     :: [CID]
  , progress :: Maybe Natural
  }
  deriving (Eq, Show)

instance Display PinStatus where
  display status = displayShow status

instance FromJSON PinStatus where
  parseJSON = withObject "IPFS.PinStatus" \obj -> do
    pins     <- obj .:? "Pins"     .!= []
    progress <- obj .:? "Progress"
    return PinStatus {..}