diff --git a/README.md b/README.md index 79b8936..f5bbc92 100644 --- a/README.md +++ b/README.md @@ -50,54 +50,37 @@ let candle_options = datamaxi::cex::CandleOptions::new(); candle.get("binance", "ETH-USDT", candle_options); ``` -#### DEX Candle +#### DEX ```rust let api_key = "my_api_key".to_string(); -let candle: datamaxi::dex::Candle = datamaxi::api::Datamaxi::new(api_key); +let dex: datamaxi::dex::Dex = datamaxi::api::Datamaxi::new(api_key); // Fetch supported intervals for DEX candle data -candle.intervals(); +dex.intervals(); -// Fetch supported exchange for DEX candle data -candle.exchanges(); +// Fetch supported exchange for DEX data +dex.exchanges(); -// Fetch supported chains for DEX candle data -candle.chains(); +// Fetch supported chains for DEX data +dex.chains(); -// Fetch supported pools for DEX candle data +// Fetch supported pools for DEX data let pools_options = datamaxi::dex::PoolsOptions::new(); -candle.pools(pools_options); +dex.pools(pools_options); // Fetch DEX candle data let params = datamaxi::dex::CandleOptions::new(); -candle.get( +dex.candle( "bsc_mainnet", "pancakeswap", "0xb24cd29e32FaCDDf9e73831d5cD1FFcd1e535423", params, ); -``` - -#### DEX Trade - -```rust -let api_key = "my_api_key".to_string(); -let trade: datamaxi::dex::Trade = datamaxi::api::Datamaxi::new(api_key); -// Fetch supported exchange for DEX trade data -trade.exchanges(); - -// Fetch supported chains for DEX trade data -trade.chains(); - -// Fetch supported pools for DEX trade data -let pools_options = datamaxi::dex::PoolsOptions::new(); -trade.pools(pools_options); - -// Fetch DEX candle data +// Fetch DEX trade data let trade_options = datamaxi::dex::TradeOptions::new().limit(5); -trade.get( +dex.trade( "bsc_mainnet", "pancakeswap", "0xb24cd29e32FaCDDf9e73831d5cD1FFcd1e535423", diff --git a/examples/dex-trade.rs b/examples/dex-trade.rs deleted file mode 100644 index fa0a58c..0000000 --- a/examples/dex-trade.rs +++ /dev/null @@ -1,46 +0,0 @@ -use std::env; - -fn main() { - dotenv::dotenv().ok(); - let api_key = env::var("DATAMAXI_API_KEY").expect("DATAMAXI_API_KEY not found"); - let trade: datamaxi::dex::Trade = datamaxi::api::Datamaxi::new(api_key); - - // DEX Trade Exchanges - match trade.exchanges() { - Ok(answer) => println!("{:?}", answer), - Err(e) => println!("Error: {}", e), - } - - // DEX Trade Chains - match trade.chains() { - Ok(answer) => println!("{:?}", answer), - Err(e) => println!("Error: {}", e), - } - - // DEX Trade Pools - let pools_options = datamaxi::dex::PoolsOptions::new(); - let pools_response = trade.pools(pools_options); - match pools_response { - Ok(answer) => match serde_json::to_string(&answer) { - Ok(json) => println!("{}", json), - Err(e) => println!("Error: {}", e), - }, - Err(e) => println!("Error: {}", e), - } - - // DEX Trade Data - let trade_options = datamaxi::dex::TradeOptions::new().limit(5); - let trade_response = trade.get( - "bsc_mainnet", - "pancakeswap", - "0xb24cd29e32FaCDDf9e73831d5cD1FFcd1e535423", - trade_options, - ); - match trade_response { - Ok(answer) => match serde_json::to_string(&answer) { - Ok(json) => println!("{}", json), - Err(e) => println!("Error: {}", e), - }, - Err(e) => println!("Error: {}", e), - } -} diff --git a/examples/dex-candle.rs b/examples/dex.rs similarity index 60% rename from examples/dex-candle.rs rename to examples/dex.rs index 718d7b0..f3466bf 100644 --- a/examples/dex-candle.rs +++ b/examples/dex.rs @@ -3,30 +3,40 @@ use std::env; fn main() { dotenv::dotenv().ok(); let api_key = env::var("DATAMAXI_API_KEY").expect("DATAMAXI_API_KEY not found"); - let candle: datamaxi::dex::Candle = datamaxi::api::Datamaxi::new(api_key); + let dex: datamaxi::dex::Dex = datamaxi::api::Datamaxi::new(api_key); - // DEX Candle Intervals - match candle.intervals() { + // DEX Exchanges + match dex.exchanges() { Ok(answer) => println!("{:?}", answer), Err(e) => println!("Error: {}", e), } - // DEX Candle Exchanges - match candle.exchanges() { + // DEX Chains + match dex.chains() { Ok(answer) => println!("{:?}", answer), Err(e) => println!("Error: {}", e), } - // DEX Candle Chains - match candle.chains() { - Ok(answer) => println!("{:?}", answer), + // DEX Trade Pools + let pools_options = datamaxi::dex::PoolsOptions::new(); + let pools_response = dex.pools(pools_options); + match pools_response { + Ok(answer) => match serde_json::to_string(&answer) { + Ok(json) => println!("{}", json), + Err(e) => println!("Error: {}", e), + }, Err(e) => println!("Error: {}", e), } - // DEX Candle Pools - let pools_options = datamaxi::dex::PoolsOptions::new(); - let pools_response = candle.pools(pools_options); - match pools_response { + // DEX Trade Data + let trade_options = datamaxi::dex::TradeOptions::new().limit(5); + let trade_response = dex.trade( + "bsc_mainnet", + "pancakeswap", + "0xb24cd29e32FaCDDf9e73831d5cD1FFcd1e535423", + trade_options, + ); + match trade_response { Ok(answer) => match serde_json::to_string(&answer) { Ok(json) => println!("{}", json), Err(e) => println!("Error: {}", e), @@ -34,9 +44,15 @@ fn main() { Err(e) => println!("Error: {}", e), } + // DEX Candle Intervals + match dex.intervals() { + Ok(answer) => println!("{:?}", answer), + Err(e) => println!("Error: {}", e), + } + // DEX Candle Data let params = datamaxi::dex::CandleOptions::new(); - let candle_response = candle.get( + let candle_response = dex.candle( "bsc_mainnet", "pancakeswap", "0xb24cd29e32FaCDDf9e73831d5cD1FFcd1e535423", diff --git a/src/cex.rs b/src/cex.rs index 81d1254..6c98644 100644 --- a/src/cex.rs +++ b/src/cex.rs @@ -112,7 +112,7 @@ impl Datamaxi for Candle { /// # Example /// ```rust /// use crate::datamaxi::api::Datamaxi; - /// let candle = datamaxi::dex::Candle::new("my_api_key".to_string()); + /// let candle = datamaxi::cex::Candle::new("my_api_key".to_string()); /// ``` fn new(api_key: String) -> Candle { let config = Config { @@ -136,7 +136,7 @@ impl Datamaxi for Candle { /// # Example /// ```rust /// use crate::datamaxi::api::Datamaxi; - /// let candle = datamaxi::dex::Candle::new_with_base_url("my_api_key".to_string(), "https://custom-api.example.com".to_string()); + /// let candle = datamaxi::cex::Candle::new_with_base_url("my_api_key".to_string(), "https://custom-api.example.com".to_string()); /// ``` fn new_with_base_url(api_key: String, base_url: String) -> Candle { let config = Config { diff --git a/src/dex.rs b/src/dex.rs index 240c1cc..84cc8af 100644 --- a/src/dex.rs +++ b/src/dex.rs @@ -5,15 +5,15 @@ use std::collections::HashMap; /// Provides methods for retrieving DEX candle data and related information. #[derive(Clone)] -pub struct Candle { +pub struct Dex { pub client: Client, } -impl Candle { +impl Dex { /// Retrieves candle data for a specified chain, exchange, and pool. Additional parameters can be /// provided to filter and sort the results. The response will contain an array of candle data /// objects, each representing a single candle with open, high, low, close, and volume values. - pub fn get( + pub fn candle( &self, chain: C, exchange: E, @@ -62,107 +62,10 @@ impl Candle { self.client.get("/dex/candle", Some(parameters)) } - /// Retrieves information about available pools, including details about the chain, exchange, - /// base and quote symbols, and pool address. Optional parameters can be provided to filter the - /// results by chain and exchange. - pub fn pools(&self, options: PoolsOptions) -> Result> { - let mut parameters = HashMap::new(); - - // optional - parameters.extend( - [ - options - .exchange - .map(|exchange| ("exchange".to_string(), exchange.to_string())), - options - .chain - .map(|chain| ("chain".to_string(), chain.to_string())), - ] - .into_iter() - .flatten(), - ); - - self.client.get("/dex/candle/pools", Some(parameters)) - } - - /// Retrieves a list of available chains for candle data. - pub fn chains(&self) -> Result> { - self.client.get("/dex/candle/chains", None) - } - - /// Retrieves a list of available exchanges for candle data. - pub fn exchanges(&self) -> Result> { - self.client.get("/dex/candle/exchanges", None) - } - - /// Retrieves a list of available intervals for candle data. - pub fn intervals(&self) -> Result> { - self.client.get("/dex/candle/intervals", None) - } -} - -/// Implements the `Datamaxi` trait for `Candle`, providing methods -/// to create new instances of `Candle` with or without a custom base URL. -impl Datamaxi for Candle { - /// Creates a new `Candle` instance with the default base URL. - /// - /// # Parameters - /// - `api_key`: A `String` representing the API key used to authenticate requests. - /// - /// # Returns - /// A new `Candle` instance configured with the default base URL and the provided `api_key`. - /// - /// # Example - /// ```rust - /// use crate::datamaxi::api::Datamaxi; - /// let candle = datamaxi::dex::Candle::new("my_api_key".to_string()); - /// ``` - fn new(api_key: String) -> Candle { - let config = Config { - base_url: None, // Default base URL will be used - api_key, // Provided API key - }; - Candle { - client: Client::new(config), // Create a new client with the provided config - } - } - - /// Creates a new `Candle` instance with a custom base URL. - /// - /// # Parameters - /// - `api_key`: A `String` representing the API key used to authenticate requests. - /// - `base_url`: A `String` representing the custom base URL for API requests. - /// - /// # Returns - /// A new `Candle` instance configured with the provided `base_url` and `api_key`. - /// - /// # Example - /// ```rust - /// use crate::datamaxi::api::Datamaxi; - /// let candle = datamaxi::dex::Candle::new_with_base_url("my_api_key".to_string(), "https://custom-api.example.com".to_string()); - /// ``` - fn new_with_base_url(api_key: String, base_url: String) -> Candle { - let config = Config { - base_url: Some(base_url), // Use the provided custom base URL - api_key, // Provided API key - }; - Candle { - client: Client::new(config), // Create a new client with the provided config - } - } -} - -/// Provides methods for retrieving DEX trade data and related information. -#[derive(Clone)] -pub struct Trade { - pub client: Client, -} - -impl Trade { /// Retrieves trade data for a specified chain, exchange, and pool. Additional parameters can be /// provided to filter and sort the results. The response will contain an array of trade data /// objects, each representing a single trade with price, amount, and timestamp values. - pub fn get( + pub fn trade( &self, chain: C, exchange: E, @@ -214,78 +117,83 @@ impl Trade { // optional parameters.extend( [ - options - .chain - .map(|chain| ("chain".to_string(), chain.to_string())), options .exchange .map(|exchange| ("exchange".to_string(), exchange.to_string())), + options + .chain + .map(|chain| ("chain".to_string(), chain.to_string())), ] .into_iter() .flatten(), ); - self.client.get("/dex/trade/pools", Some(parameters)) + self.client.get("/dex/pools", Some(parameters)) } - /// Retrieves a list of available intervals for trade data. + /// Retrieves a list of available chains for candle data. pub fn chains(&self) -> Result> { - self.client.get("/dex/trade/chains", None) + self.client.get("/dex/chains", None) } - /// Retrieves a list of available exchanges for trade data. + /// Retrieves a list of available exchanges for candle data. pub fn exchanges(&self) -> Result> { - self.client.get("/dex/trade/exchanges", None) + self.client.get("/dex/exchanges", None) + } + + /// Retrieves a list of available intervals for candle data. + pub fn intervals(&self) -> Result> { + self.client.get("/dex/intervals", None) } } -/// Implements the `Datamaxi` trait for `Trade`, providing methods -/// to create new instances of `Trade` with or without a custom base URL. -impl Datamaxi for Trade { - /// Creates a new `Trade` instance with the default base URL. +/// Implements the `Datamaxi` trait for `Dex`, providing methods +/// to create new instances of `Dex` with or without a custom base URL. +impl Datamaxi for Dex { + /// Creates a new `Dex` instance with the default base URL. /// /// # Parameters - /// - `api_key`: A `String` containing the API key to authenticate requests. + /// - `api_key`: A `String` representing the API key used to authenticate requests. /// /// # Returns - /// A new `Trade` instance configured with the default base URL and the provided `api_key`. + /// A new `Dex` instance configured with the default base URL and the provided `api_key`. /// /// # Example /// ```rust /// use crate::datamaxi::api::Datamaxi; - /// let trade = datamaxi::dex::Trade::new("my_api_key".to_string()); + /// let dex = datamaxi::dex::Dex::new("my_api_key".to_string()); /// ``` - fn new(api_key: String) -> Trade { + fn new(api_key: String) -> Dex { let config = Config { - base_url: None, // Use the default base URL + base_url: None, // Default base URL will be used api_key, // Provided API key }; - Trade { - client: Client::new(config), // Create a new client with the given config + Dex { + client: Client::new(config), // Create a new client with the provided config } } - /// Creates a new `Trade` instance with a custom base URL. + /// Creates a new `Dex` instance with a custom base URL. /// /// # Parameters - /// - `api_key`: A `String` containing the API key to authenticate requests. - /// - `base_url`: A `String` specifying the custom base URL for API requests. + /// - `api_key`: A `String` representing the API key used to authenticate requests. + /// - `base_url`: A `String` representing the custom base URL for API requests. /// /// # Returns - /// A new `Trade` instance configured with the provided `base_url` and `api_key`. + /// A new `Dex` instance configured with the provided `base_url` and `api_key`. /// /// # Example /// ```rust /// use crate::datamaxi::api::Datamaxi; - /// let trade = datamaxi::dex::Trade::new_with_base_url("my_api_key".to_string(), "https://custom-api.example.com".to_string()); + /// let dex = datamaxi::dex::Dex::new_with_base_url("my_api_key".to_string(), "https://custom-api.example.com".to_string()); /// ``` - fn new_with_base_url(api_key: String, base_url: String) -> Trade { + fn new_with_base_url(api_key: String, base_url: String) -> Dex { let config = Config { base_url: Some(base_url), // Use the provided custom base URL api_key, // Provided API key }; - Trade { - client: Client::new(config), // Create a new client with the given config + Dex { + client: Client::new(config), // Create a new client with the provided config } } } diff --git a/src/lib.rs b/src/lib.rs index e5ae484..0417af8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -50,54 +50,37 @@ //! candle.get("binance", "ETH-USDT", candle_options); //! ``` //! -//! ### DEX Candle +//! ### DEX //! //! ```rust //! let api_key = "my_api_key".to_string(); -//! let candle: datamaxi::dex::Candle = datamaxi::api::Datamaxi::new(api_key); +//! let dex: datamaxi::dex::Dex = datamaxi::api::Datamaxi::new(api_key); //! //! // Fetch supported intervals for DEX candle data -//! candle.intervals(); +//! dex.intervals(); //! -//! // Fetch supported exchange for DEX candle data -//! candle.exchanges(); +//! // Fetch supported exchange for DEX data +//! dex.exchanges(); //! -//! // Fetch supported chains for DEX candle data -//! candle.chains(); +//! // Fetch supported chains for DEX data +//! dex.chains(); //! -//! // Fetch supported pools for DEX candle data +//! // Fetch supported pools for DEX data //! let pools_options = datamaxi::dex::PoolsOptions::new(); -//! candle.pools(pools_options); +//! dex.pools(pools_options); //! //! // Fetch DEX candle data //! let params = datamaxi::dex::CandleOptions::new(); -//! candle.get( +//! dex.candle( //! "bsc_mainnet", //! "pancakeswap", //! "0xb24cd29e32FaCDDf9e73831d5cD1FFcd1e535423", //! params, //! ); -//! ``` -//! -//! ### DEX Trade -//! -//! ```rust -//! let api_key = "my_api_key".to_string(); -//! let trade: datamaxi::dex::Trade = datamaxi::api::Datamaxi::new(api_key); //! -//! // Fetch supported exchange for DEX trade data -//! trade.exchanges(); -//! -//! // Fetch supported chains for DEX trade data -//! trade.chains(); -//! -//! // Fetch supported pools for DEX trade data -//! let pools_options = datamaxi::dex::PoolsOptions::new(); -//! trade.pools(pools_options); -//! -//! // Fetch DEX candle data +//! // Fetch DEX trade data //! let trade_options = datamaxi::dex::TradeOptions::new().limit(5); -//! trade.get( +//! dex.trade( //! "bsc_mainnet", //! "pancakeswap", //! "0xb24cd29e32FaCDDf9e73831d5cD1FFcd1e535423", @@ -180,20 +163,19 @@ pub mod cex; /// api_key: "my_api_key".to_string(), /// }; /// let client = datamaxi::api::Client::new(config); -/// let candle = datamaxi::dex::Candle { client: client.clone() }; -/// let trade = datamaxi::dex::Trade { client }; +/// let dex = datamaxi::dex::Dex { client: client.clone() }; /// /// // Retrieve candle data /// let candle_options = datamaxi::dex::CandleOptions::new().interval("1h").limit(100); -/// let candle_data = candle.get("kaia_mainnet", "dragonswap", "0x...", candle_options); +/// let candle_data = dex.candle("kaia_mainnet", "dragonswap", "0x...", candle_options); /// /// // Retrieve trade data /// let trade_options = datamaxi::dex::TradeOptions::new().limit(50); -/// let trade_data = trade.get("kaia_mainnet", "dragonswap", "0x...", trade_options); +/// let trade_data = dex.trade("kaia_mainnet", "dragonswap", "0x...", trade_options); /// /// // Retrieve available pools /// let pools_options = datamaxi::dex::PoolsOptions::new().chain("kaia_mainnet"); -/// let pools = candle.pools(pools_options); +/// let pools = dex.pools(pools_options); /// ``` /// /// # Error Handling