acme-not-a-joke-0.1.0.0: src/Acme/NotAJoke/Api/Directory.hs
{-# LANGUAGE DeriveGeneric #-}
module Acme.NotAJoke.Api.Directory where
import Control.Lens hiding ((.=))
import Data.Aeson (FromJSON (..))
import Data.Coerce (coerce)
import GHC.Generics (Generic)
import qualified Network.Wreq as Wreq
import Acme.NotAJoke.Api.Endpoint
import Acme.NotAJoke.Api.Meta
{- | RFC-defined directory structure.
Mainly contains a series of endpoints.
-}
data Directory
= Directory
{ meta :: Meta
, newNonce :: Endpoint "newNonce"
, newAccount :: Endpoint "newAccount"
, newOrder :: Endpoint "newOrder"
, keyChange :: Endpoint "keyChange"
, renewalInfo :: Endpoint "renewalInfo"
, revokeCert :: Endpoint "revokeCert"
}
deriving (Show, Generic)
instance FromJSON Directory
directory :: BaseUrl -> Endpoint "directory"
directory baseUrl = coerce $ baseUrl <> "directory"
-- | Fetches the server's directory.
fetchDirectory :: Endpoint "directory" -> IO Directory
fetchDirectory ep = do
r <- Wreq.asJSON =<< get ep
pure $ r ^. Wreq.responseBody