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 { PinStatus -> [CID] pins :: [CID] , PinStatus -> Maybe Natural progress :: Maybe Natural } deriving (PinStatus -> PinStatus -> Bool (PinStatus -> PinStatus -> Bool) -> (PinStatus -> PinStatus -> Bool) -> Eq PinStatus forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: PinStatus -> PinStatus -> Bool $c/= :: PinStatus -> PinStatus -> Bool == :: PinStatus -> PinStatus -> Bool $c== :: PinStatus -> PinStatus -> Bool Eq, Int -> PinStatus -> ShowS [PinStatus] -> ShowS PinStatus -> String (Int -> PinStatus -> ShowS) -> (PinStatus -> String) -> ([PinStatus] -> ShowS) -> Show PinStatus forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [PinStatus] -> ShowS $cshowList :: [PinStatus] -> ShowS show :: PinStatus -> String $cshow :: PinStatus -> String showsPrec :: Int -> PinStatus -> ShowS $cshowsPrec :: Int -> PinStatus -> ShowS Show) instance Display PinStatus where display :: PinStatus -> Utf8Builder display PinStatus status = PinStatus -> Utf8Builder forall a. Show a => a -> Utf8Builder displayShow PinStatus status instance FromJSON PinStatus where parseJSON :: Value -> Parser PinStatus parseJSON = String -> (Object -> Parser PinStatus) -> Value -> Parser PinStatus forall a. String -> (Object -> Parser a) -> Value -> Parser a withObject String "IPFS.PinStatus" \Object obj -> do [CID] pins <- Object obj Object -> Text -> Parser (Maybe [CID]) forall a. FromJSON a => Object -> Text -> Parser (Maybe a) .:? Text "Pins" Parser (Maybe [CID]) -> [CID] -> Parser [CID] forall a. Parser (Maybe a) -> a -> Parser a .!= [] Maybe Natural progress <- Object obj Object -> Text -> Parser (Maybe Natural) forall a. FromJSON a => Object -> Text -> Parser (Maybe a) .:? Text "Progress" return PinStatus :: [CID] -> Maybe Natural -> PinStatus PinStatus {[CID] Maybe Natural progress :: Maybe Natural pins :: [CID] $sel:progress:PinStatus :: Maybe Natural $sel:pins:PinStatus :: [CID] ..}