{-# 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