Skip to main content

kraken_api_client/spot/rest/public/
mod.rs

1//! Public REST API endpoints (no authentication required).
2
3mod types;
4
5pub use types::*;
6
7use crate::error::KrakenError;
8use crate::spot::rest::SpotRestClient;
9use crate::spot::rest::endpoints::public;
10
11impl SpotRestClient {
12    /// Get the server time.
13    ///
14    /// This is useful for synchronizing local time and checking API availability.
15    ///
16    /// # Example
17    ///
18    /// ```rust,no_run
19    /// use kraken_api_client::spot::rest::SpotRestClient;
20    ///
21    /// #[tokio::main]
22    /// async fn main() -> Result<(), Box<dyn std::error::Error>> {
23    ///     let client = SpotRestClient::new();
24    ///     let time = client.get_server_time().await?;
25    ///     println!("Server time: {} ({})", time.unixtime, time.rfc1123);
26    ///     Ok(())
27    /// }
28    /// ```
29    pub async fn get_server_time(&self) -> Result<ServerTime, KrakenError> {
30        self.public_get(public::TIME).await
31    }
32
33    /// Get the system status.
34    ///
35    /// Returns the current system status and timestamp.
36    pub async fn get_system_status(&self) -> Result<SystemStatus, KrakenError> {
37        self.public_get(public::SYSTEM_STATUS).await
38    }
39
40    /// Get asset information.
41    ///
42    /// Returns information about the assets available on Kraken.
43    ///
44    /// # Arguments
45    ///
46    /// * `request` - Optional request parameters to filter assets.
47    pub async fn get_assets(
48        &self,
49        request: Option<&AssetInfoRequest>,
50    ) -> Result<std::collections::HashMap<String, AssetInfo>, KrakenError> {
51        match request {
52            Some(req) => self.public_get_with_params(public::ASSETS, req).await,
53            None => self.public_get(public::ASSETS).await,
54        }
55    }
56
57    /// Get tradable asset pairs.
58    ///
59    /// Returns information about the trading pairs available on Kraken.
60    ///
61    /// # Arguments
62    ///
63    /// * `request` - Optional request parameters to filter pairs.
64    pub async fn get_asset_pairs(
65        &self,
66        request: Option<&AssetPairsRequest>,
67    ) -> Result<std::collections::HashMap<String, AssetPair>, KrakenError> {
68        match request {
69            Some(req) => self.public_get_with_params(public::ASSET_PAIRS, req).await,
70            None => self.public_get(public::ASSET_PAIRS).await,
71        }
72    }
73
74    /// Get ticker information for one or more pairs.
75    ///
76    /// # Arguments
77    ///
78    /// * `pairs` - Comma-separated list of pairs (e.g., "XBTUSD,ETHUSD").
79    pub async fn get_ticker(
80        &self,
81        pairs: &str,
82    ) -> Result<std::collections::HashMap<String, TickerInfo>, KrakenError> {
83        #[derive(serde::Serialize)]
84        struct Params<'a> {
85            pair: &'a str,
86        }
87        self.public_get_with_params(public::TICKER, &Params { pair: pairs })
88            .await
89    }
90
91    /// Get OHLC (candlestick) data.
92    ///
93    /// Returns up to 720 OHLC data points for the specified pair and interval.
94    ///
95    /// # Arguments
96    ///
97    /// * `request` - OHLC request parameters.
98    pub async fn get_ohlc(&self, request: &OhlcRequest) -> Result<OhlcResponse, KrakenError> {
99        self.public_get_with_params(public::OHLC, request).await
100    }
101
102    /// Get order book for a pair.
103    ///
104    /// # Arguments
105    ///
106    /// * `request` - Order book request parameters.
107    pub async fn get_order_book(
108        &self,
109        request: &OrderBookRequest,
110    ) -> Result<std::collections::HashMap<String, OrderBook>, KrakenError> {
111        self.public_get_with_params(public::DEPTH, request).await
112    }
113
114    /// Get recent trades for a pair.
115    ///
116    /// # Arguments
117    ///
118    /// * `request` - Recent trades request parameters.
119    pub async fn get_recent_trades(
120        &self,
121        request: &RecentTradesRequest,
122    ) -> Result<RecentTradesResponse, KrakenError> {
123        self.public_get_with_params(public::TRADES, request).await
124    }
125
126    /// Get recent spreads for a pair.
127    ///
128    /// # Arguments
129    ///
130    /// * `request` - Recent spreads request parameters.
131    pub async fn get_recent_spreads(
132        &self,
133        request: &RecentSpreadsRequest,
134    ) -> Result<RecentSpreadsResponse, KrakenError> {
135        self.public_get_with_params(public::SPREAD, request).await
136    }
137}