use serde::Deserialize;
use crate::classic::WorldOfWarcraftClassicConnector;
use crate::documents::Links;
use crate::errors::BubbleHearthResult;
#[derive(Default, Debug, Clone, PartialEq, Deserialize)]
pub struct RegionsIndex {
#[serde(rename = "_links")]
pub links: Links,
pub regions: Vec<Region>,
}
#[derive(Default, Debug, Clone, PartialEq, Deserialize)]
pub struct Region {
pub href: Option<String>,
pub id: Option<u32>,
pub name: Option<String>,
pub tag: Option<String>,
}
impl<'a> WorldOfWarcraftClassicConnector<'a> {
pub async fn get_regions(&self) -> BubbleHearthResult<RegionsIndex> {
let url = format!(
"https://{}.api.blizzard.com/data/wow/region/index?locale={}",
self.client.region.get_region_abbreviation(),
self.client.locale.get_normalized_locale(),
);
let regions = self
.client
.send_request_and_deserialize::<RegionsIndex>(url)
.await?;
Ok(regions)
}
pub async fn get_region(&self, region_id: u32) -> BubbleHearthResult<Option<Region>> {
let url = format!(
"https://{}.api.blizzard.com/data/wow/region/{region_id}?locale={}",
self.client.region.get_region_abbreviation(),
self.client.locale.get_normalized_locale(),
);
let region = self
.client
.send_request_and_optionally_deserialize::<Region>(url)
.await?;
Ok(region)
}
}