use super::{
fetch,
models::{ApiParams, Klines}
};
use crate::utils::{data_from_json, data_to_json};
use serde_json::from_str;
use std::error::Error;
use reqwest::Url;
#[allow(dead_code)]
pub fn remote_to_file(api_params: ApiParams) -> Result<Vec<Klines>, Box<dyn Error>> {
let mut folder_path= api_params.base_url.to_string();
let symbol= api_params.params.get("symbol").ok_or("Symbol parameter not found")?;
let response = fetch::data(api_params)?;
let klines = response.text()?;
let parsed_url = Url::parse(folder_path.as_str()).unwrap();
if let Some(domain) = parsed_url.domain() {
folder_path = format!("klines/{}/", domain);
}
let klines_res: Vec<Klines> = from_str(&klines)?;
data_to_json(folder_path.as_str(), symbol, klines.as_str()).expect("TODO: panic message");
Ok(klines_res)
}
#[allow(dead_code)]
pub fn klines(source: &str, api_params: ApiParams) -> Result<Vec<Klines>, Box<dyn Error>> {
match source {
"api" => {
let response = fetch::data(api_params)?;
let klines: Vec<Klines> = response.json()?;
Ok(klines)
}
"file" => {
let mut folder_path= api_params.base_url.to_string();
let symbol= api_params.params.get("symbol").ok_or("Symbol parameter not found")?;
let parsed_url = Url::parse(folder_path.as_str()).unwrap();
if let Some(domain) = parsed_url.domain() {
folder_path = format!("klines/{}/",domain);
}
let data = data_from_json(folder_path.as_str(), symbol)?;
let klines: Vec<Klines> = from_str(&data)?;
Ok(klines)
}
_ => Err("Invalid source".into()),
}
}