{-# LANGUAGE DataKinds        #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeOperators    #-}

module Bitcoin.Core.RPC.Control
    ( stop
    , uptime
    ) where

import           Data.Proxy       (Proxy (..))
import           Data.Word        (Word32)
import           Servant.API      ((:<|>) (..))

import           Servant.Bitcoind (BitcoindClient, BitcoindEndpoint, C, CX,
                                   toBitcoindClient)


type ControlRpc
    =    BitcoindEndpoint "stop" CX
    :<|> BitcoindEndpoint "uptime" (C Word32)


-- | Request a graceful shutdown of Bitcoin Core.
stop :: BitcoindClient ()


-- | Returns the total uptime of the server (in seconds)
uptime :: BitcoindClient Word32


stop :<|> uptime = toBitcoindClient $ Proxy @ControlRpc