use dax_core::fetcher::{FetchedData, ProofFetchError};
pub use url::Url;
pub struct HttpFetcher {}
impl HttpFetcher {
pub fn fetch_text(&self, url: Url) -> Result<FetchedData, dax_core::fetcher::ProofFetchError> {
let result = ureq::get(url.as_str())
.set(
"User-Agent",
format!("{}/{}", env!("CARGO_PKG_NAME"), env!("CARGO_PKG_VERSION")).as_str(),
)
.call();
let response = match result {
Ok(res) => res,
Err(err) => match err {
ureq::Error::Status(status, _) => return Err(ProofFetchError::HttpStatus(status)),
ureq::Error::Transport(_) => return Err(ProofFetchError::Transport),
},
};
let data = response.into_string()?;
Ok(FetchedData::String(data))
}
pub fn fetch_json(&self, url: Url) -> Result<FetchedData, dax_core::fetcher::ProofFetchError> {
let result = ureq::get(url.as_str())
.set("Accept", "application/json")
.set(
"User-Agent",
format!("{}/{}", env!("CARGO_PKG_NAME"), env!("CARGO_PKG_VERSION")).as_str(),
)
.call();
let response = match result {
Ok(res) => res,
Err(err) => match err {
ureq::Error::Status(status, _) => return Err(ProofFetchError::HttpStatus(status)),
ureq::Error::Transport(_) => return Err(ProofFetchError::Transport),
},
};
let data = response.into_json()?;
Ok(FetchedData::Json(data))
}
}