#[cfg(feature = "sync_mode")]
use curl::easy::Easy;
#[cfg(feature = "sync_mode")]
use crate::error::ReturnError;
#[cfg(feature = "sync_mode")]
pub(crate) fn do_request(url_format: &str) -> Result<String, ReturnError> {
let mut buf = Vec::new();
let mut handle = Easy::new();
if let Err(_) = handle.url(url_format) {
return Err(ReturnError::UnableToSetUrl);
}
{
let mut transfer = handle.transfer();
if let Err(_) = transfer.write_function(|data| {
buf.extend_from_slice(data);
Ok(data.len())
}) {
return Err(ReturnError::FailedToSaveReceivedData);
}
let mut perform_result;
for element in 0..3 {
perform_result = transfer.perform();
if perform_result.is_ok() { break; }
if element != 2 { continue; }
return Err(ReturnError::FailedToApplyRequest);
}
}
let response = String::from_utf8_lossy(&buf);
if response.is_empty() {
return Err(ReturnError::NotFound);
}
Ok(response.to_string())
}