{-# LANGUAGE OverloadedStrings, TemplateHaskell #-} -- | Metadata API. module Web.Mackerel.Api.Metadata (getMetadata, putMetadata, deleteMetadata, listMetadata) where import Data.Aeson (Value) import Data.Aeson.TH (deriveJSON) import qualified Data.ByteString.Char8 as BS import Data.Semigroup ((<>)) import Network.HTTP.Types (StdMethod(..)) import Web.Mackerel.Client import Web.Mackerel.Internal.Api import Web.Mackerel.Internal.TH import Web.Mackerel.Types.Metadata getMetadata :: Client -> String -> String -> IO (Either ApiError Value) getMetadata client hostId namespace = request client GET ("/api/v0/hosts/" <> BS.pack hostId <> "/metadata/" <> BS.pack namespace) [] emptyBody (createHandler id) putMetadata :: Client -> String -> String -> Value -> IO (Either ApiError ()) putMetadata client hostId namespace metadata = request client PUT ("/api/v0/hosts/" <> BS.pack hostId <> "/metadata/" <> BS.pack namespace) [] (Just metadata) (createHandler ((\_ -> ()) :: Value -> ())) deleteMetadata :: Client -> String -> String -> IO (Either ApiError ()) deleteMetadata client hostId namespace = request client DELETE ("/api/v0/hosts/" <> BS.pack hostId <> "/metadata/" <> BS.pack namespace) [] emptyBody (createHandler ((\_ -> ()) :: Value -> ())) data ListMetadataResponse = ListMetadataResponse { responseMetadata :: [Metadata] } $(deriveJSON options ''ListMetadataResponse) listMetadata :: Client -> String -> IO (Either ApiError [Metadata]) listMetadata client hostId = request client GET ("/api/v0/hosts/" <> BS.pack hostId <> "/metadata") [] emptyBody (createHandler responseMetadata)