coinbase-pro-0.5.0.0: src/lib/CoinbasePro/Unauthenticated/API.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeOperators #-}
module CoinbasePro.Unauthenticated.API
( products
, aggregateOrderBook
, fullOrderBook
, trades
, candles
, stats
, time
) where
import Data.Proxy (Proxy (..))
import Data.Time.Clock (UTCTime)
import Servant.API ((:<|>) (..), (:>),
Capture, QueryParam,
QueryParam',
Required)
import Servant.Client (client)
import CoinbasePro.MarketData.AggregateOrderBook (AggregateOrderBook)
import CoinbasePro.MarketData.FullOrderBook (FullOrderBook)
import CoinbasePro.MarketData.Types (AggregateBookLevel (..),
CBTime,
FullBookLevel (..),
Product, Trade)
import CoinbasePro.Request (CBGet, CBRequest)
import CoinbasePro.Types (Candle,
CandleGranularity,
ProductId,
TwentyFourHourStats)
type Products = "products" :> CBGet [Product]
type ProductAggregateOrderBook = "products"
:> Capture "product" ProductId
:> "book"
:> QueryParam "level" AggregateBookLevel
:> CBGet AggregateOrderBook
type ProductFullOrderBook = "products"
:> Capture "product" ProductId
:> "book"
:> QueryParam "level" FullBookLevel
:> CBGet FullOrderBook
type Trades = "products"
:> Capture "product" ProductId
:> "trades"
:> CBGet [Trade]
type Candles = "products"
:> Capture "product" ProductId
:> "candles"
:> QueryParam "start" UTCTime
:> QueryParam "end" UTCTime
:> QueryParam' '[Required] "granularity" CandleGranularity
:> CBGet [Candle]
type Stats = "products"
:> Capture "product" ProductId
:> "stats"
:> CBGet TwentyFourHourStats
type Time = "time" :> CBGet CBTime
type API = Products
:<|> ProductAggregateOrderBook
:<|> ProductFullOrderBook
:<|> Trades
:<|> Candles
:<|> Stats
:<|> Time
api :: Proxy API
api = Proxy
products :: CBRequest [Product]
aggregateOrderBook :: ProductId -> Maybe AggregateBookLevel -> CBRequest AggregateOrderBook
fullOrderBook :: ProductId -> Maybe FullBookLevel -> CBRequest FullOrderBook
trades :: ProductId -> CBRequest [Trade]
candles :: ProductId -> Maybe UTCTime -> Maybe UTCTime -> CandleGranularity -> CBRequest [Candle]
stats :: ProductId -> CBRequest TwentyFourHourStats
time :: CBRequest CBTime
products :<|> aggregateOrderBook :<|> fullOrderBook :<|> trades :<|> candles :<|> stats :<|> time = client api