use crate::http::{Request, Site};
use crate::models::pemi::do_rates_login;
use crate::models::pemi::rates_and_fees;
use crate::models::pemi::rates_and_fees::parsed::Rates;
use super::Rates as RatesArea;
use crate::{Error, Result};
impl RatesArea {
#[maybe_async::maybe_async]
pub async fn login(&self, username: &str, password: &str) -> Result<()> {
let request = Request::post(do_rates_login::PATH)
.form(&[("CustomerNumber", password), ("LocationID", username)])?
.site(Site::Rates)
.build();
let response = self
.http
.send::<do_rates_login::RatesLoginResponse>(request)
.await?;
if response.accepted() {
Ok(())
} else {
Err(Error::LoginRejected {
message: (!response.message.is_empty()).then_some(response.message),
})
}
}
#[maybe_async::maybe_async]
pub async fn rates(&self) -> Result<Rates> {
let request = Request::get(rates_and_fees::PATH).site(Site::Rates).build();
Rates::parse_page(&self.http.send_text(request).await?).ok_or(Error::RatesSessionRequired)
}
}