module Network.IPFS.Client.DAG.Put.Types (API, Response (..)) where

import           Servant.API
import           Servant.Multipart

import           Network.IPFS.Prelude

import           Network.IPFS.CID.Types
import qualified Network.IPFS.File.Form.Types as File

type API
  =  QueryParam' '[Required, Strict] "pin" Bool
  :> MultipartForm Tmp File.Form
  :> Post '[JSON] Response

newtype Response = Response CID

instance FromJSON Response where
  parseJSON :: Value -> Parser Response
parseJSON = String -> (Object -> Parser Response) -> Value -> Parser Response
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"IPFS.DAG.Response" \Object
obj -> do
    Object
cidField <- Object
obj Object -> Text -> Parser Object
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"Cid"
    CID
cid      <- Object
cidField Object -> Text -> Parser CID
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"/"
    return $ CID -> Response
Response CID
cid