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}