diff --git a/examples/README.md b/examples/README.md index 2cf75fc..9ac751d 100644 --- a/examples/README.md +++ b/examples/README.md @@ -8,3 +8,15 @@ cargo run --release --example "candle" ```bash cargo run --release --example "fundingrate" ``` + +```bash +cargo run --release --example "forex" +``` + +```bash +cargo run --release --example "naver" +``` + +```bash +cargo run --release --example "google" +``` diff --git a/examples/forex.rs b/examples/forex.rs new file mode 100644 index 0000000..a687b3c --- /dev/null +++ b/examples/forex.rs @@ -0,0 +1,15 @@ +use datamaxi::{api::Datamaxi, forex::*}; + +fn main() { + let api_key: &str = "API_KEY"; + let forex: Forex = Datamaxi::new(api_key.to_string()); + + match forex.symbols() { + Ok(answer) => println!("{:?}", answer), + Err(e) => println!("Error: {}", e), + } + match forex.get() { + Ok(answer) => println!("{:?}", answer), + Err(e) => println!("Error: {}", e), + } +} diff --git a/examples/google.rs b/examples/google.rs new file mode 100644 index 0000000..59bc8cd --- /dev/null +++ b/examples/google.rs @@ -0,0 +1,15 @@ +use datamaxi::{api::Datamaxi, google::*}; + +fn main() { + let api_key: &str = "API_KEY"; + let google: GoogleTrend = Datamaxi::new(api_key.to_string()); + + match google.keywords() { + Ok(answer) => println!("{:?}", answer), + Err(e) => println!("Error: {}", e), + } + match google.get("Bitcoin") { + Ok(answer) => println!("{:?}", answer), + Err(e) => println!("Error: {}", e), + } +} diff --git a/examples/naver.rs b/examples/naver.rs new file mode 100644 index 0000000..ddaccce --- /dev/null +++ b/examples/naver.rs @@ -0,0 +1,15 @@ +use datamaxi::{api::Datamaxi, naver::*}; + +fn main() { + let api_key: &str = "API_KEY"; + let naver: NaverTrend = Datamaxi::new(api_key.to_string()); + + match naver.symbols() { + Ok(answer) => println!("{:?}", answer), + Err(e) => println!("Error: {}", e), + } + match naver.get("AAVE") { + Ok(answer) => println!("{:?}", answer), + Err(e) => println!("Error: {}", e), + } +} diff --git a/src/api.rs b/src/api.rs index f497e09..cf01e62 100644 --- a/src/api.rs +++ b/src/api.rs @@ -1,9 +1,16 @@ use crate::candle::Candle; use crate::client::Client; +use crate::forex::Forex; use crate::fundingrate::FundingRate; +use crate::google::GoogleTrend; +use crate::naver::NaverTrend; + pub enum API { CandleApi(CandleApi), FundingRateApi(FundingRateApi), + ForexApi(ForexApi), + NaverTrendApi(NaverTrendApi), + GoogleTrendApi(GoogleTrendApi), } pub enum CandleApi { @@ -20,6 +27,21 @@ pub enum FundingRateApi { LatestFundingRate, } +pub enum ForexApi { + Symbols, + Forex, +} + +pub enum NaverTrendApi { + Symbols, + Trend, +} + +pub enum GoogleTrendApi { + Keywords, + Trend, +} + impl From for String { fn from(item: API) -> Self { String::from(match item { @@ -35,6 +57,18 @@ impl From for String { FundingRateApi::HistoricalFundingRate => "/funding-rate", FundingRateApi::LatestFundingRate => "/funding-rate/latest", }, + API::ForexApi(route) => match route { + ForexApi::Symbols => "/forex/symbols", + ForexApi::Forex => "/forex", + }, + API::NaverTrendApi(route) => match route { + NaverTrendApi::Symbols => "/naver/symbols", + NaverTrendApi::Trend => "/naver/trend", + }, + API::GoogleTrendApi(route) => match route { + GoogleTrendApi::Keywords => "/google/keywords", + GoogleTrendApi::Trend => "/google/trend", + }, }) } } @@ -58,3 +92,27 @@ impl Datamaxi for FundingRate { } } } + +impl Datamaxi for Forex { + fn new(api_key: String) -> Forex { + Forex { + client: Client::new(api_key), + } + } +} + +impl Datamaxi for NaverTrend { + fn new(api_key: String) -> NaverTrend { + NaverTrend { + client: Client::new(api_key), + } + } +} + +impl Datamaxi for GoogleTrend { + fn new(api_key: String) -> GoogleTrend { + GoogleTrend { + client: Client::new(api_key), + } + } +} diff --git a/src/forex.rs b/src/forex.rs new file mode 100644 index 0000000..5c91740 --- /dev/null +++ b/src/forex.rs @@ -0,0 +1,23 @@ +use crate::api::ForexApi; +use crate::api::API; +use crate::client::Client; +use crate::error::Result; +use crate::models::ForexDetail; + +pub struct Forex { + pub client: Client, +} + +impl Forex { + pub fn symbols(&self) -> Result> { + let symbols: Vec = self.client.get(API::ForexApi(ForexApi::Symbols), None)?; + + Ok(symbols) + } + + pub fn get(&self) -> Result> { + let forex_data: Vec = self.client.get(API::ForexApi(ForexApi::Forex), None)?; + + Ok(forex_data) + } +} diff --git a/src/google.rs b/src/google.rs new file mode 100644 index 0000000..096a854 --- /dev/null +++ b/src/google.rs @@ -0,0 +1,34 @@ +use crate::api::GoogleTrendApi; +use crate::api::API; +use crate::client::Client; +use crate::error::Result; +use crate::utils::build_request; +use std::collections::BTreeMap; + +pub struct GoogleTrend { + pub client: Client, +} + +impl GoogleTrend { + pub fn keywords(&self) -> Result> { + let keywords: Vec = self + .client + .get(API::GoogleTrendApi(GoogleTrendApi::Keywords), None)?; + + Ok(keywords) + } + + pub fn get(&self, keyword: K) -> Result>> + where + K: Into, + { + let mut parameters: BTreeMap = BTreeMap::new(); + parameters.insert("keyword".into(), keyword.into()); + let request = build_request(parameters); + let forex_data: Vec> = self + .client + .get(API::GoogleTrendApi(GoogleTrendApi::Trend), Some(request))?; + + Ok(forex_data) + } +} diff --git a/src/lib.rs b/src/lib.rs index c5619f0..b9650e8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -3,6 +3,9 @@ pub mod client; pub mod api; pub mod candle; pub mod error; +pub mod forex; pub mod fundingrate; +pub mod google; pub mod models; +pub mod naver; pub mod utils; diff --git a/src/models.rs b/src/models.rs index 1a61ac4..ec8163b 100644 --- a/src/models.rs +++ b/src/models.rs @@ -50,3 +50,10 @@ pub struct LatestFundingRateDetail { pub q: String, pub r: f64, } + +#[derive(Deserialize, Debug)] +pub struct ForexDetail { + pub s: String, + pub d: i64, + pub r: f64, +} diff --git a/src/naver.rs b/src/naver.rs new file mode 100644 index 0000000..f65334d --- /dev/null +++ b/src/naver.rs @@ -0,0 +1,34 @@ +use crate::api::NaverTrendApi; +use crate::api::API; +use crate::client::Client; +use crate::error::Result; +use crate::utils::build_request; +use std::collections::BTreeMap; + +pub struct NaverTrend { + pub client: Client, +} + +impl NaverTrend { + pub fn symbols(&self) -> Result> { + let symbols: Vec = self + .client + .get(API::NaverTrendApi(NaverTrendApi::Symbols), None)?; + + Ok(symbols) + } + + pub fn get(&self, symbol: S) -> Result>> + where + S: Into, + { + let mut parameters: BTreeMap = BTreeMap::new(); + parameters.insert("symbol".into(), symbol.into()); + let request = build_request(parameters); + let forex_data: Vec> = self + .client + .get(API::NaverTrendApi(NaverTrendApi::Trend), Some(request))?; + + Ok(forex_data) + } +}