use crate::error::ReturnError;
#[cfg(feature = "async_mode")]
use crate::request_async;
#[cfg(feature = "sync_mode")]
use crate::request_sync;
pub(crate) enum Function{
GetDataGroup,
GetSeriesList,
OneOfOtherFunctions,
}
pub(crate) fn check_emptiness(data: &str) -> Result<(), ReturnError> {
if data.is_empty() { return Err(ReturnError::EmptyParameter) };
Ok(())
}
fn handle_response_error(response_message: &str) -> Result<(), ReturnError> {
let mut words: Vec<&str> = response_message.split(' ').collect();
if let Some(firs_word) = words.iter().next() {
let lower_case = firs_word.to_lowercase();
if lower_case != "no" { return Ok(()); }
}
if let Some(last_word) = words.iter().next_back() {
if *last_word == "!" || *last_word == "'" || *last_word == "," || *last_word == ";" {
words.pop();
}
}
let mut output = String::from("Error: ");
for word in words {
output.push_str(word);
output.push(' ');
}
output.pop();
output.push_str(".");
let error = ReturnError::ResponseError(output);
Err(error)
}
pub(crate) fn check_response(response: &str, function: Function) -> Result<(), ReturnError> {
match function {
Function::GetDataGroup => { return handle_response_error(&response); },
Function::GetSeriesList => {
let xml_empty = "<document></document>";
let json_empty = "[]";
if response == xml_empty || response == json_empty {
return Err(ReturnError::NotFound);
}
},
Function::OneOfOtherFunctions => {}
}
if response.is_empty() {
return Err(ReturnError::EmptyResponse);
}
Ok(())
}
#[cfg(feature = "async_mode")]
fn make_request_async(url: &str, function: Function) -> Result<String, ReturnError> {
let response = request_async::do_request(&url)?;
check_response(&response, function)?;
Ok(response)
}
#[cfg(feature = "sync_mode")]
fn make_request_sync(url: &str, function: Function) -> Result<String, ReturnError> {
let response = request_sync::do_request(&url)?;
check_response(&response, function)?;
Ok(response)
}
pub(crate) fn make_request(url: &str, function: Function) -> Result<String, ReturnError> {
#[cfg(feature = "async_mode")]
return make_request_async(url, function);
#[cfg(feature = "sync_mode")]
return make_request_sync(url, function);
}