use serde::{Deserialize, Serialize};
use crate::errors::BubbleHearthResult;
use crate::hearthstone::card_search::CardSearchQuery;
use crate::hearthstone::HearthstoneConnector;
use crate::BubbleHearthId;
#[derive(Default, Debug, Clone, PartialEq, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Cards {
pub cards: Vec<Card>,
pub card_count: BubbleHearthId,
pub page_count: BubbleHearthId,
pub page: BubbleHearthId,
}
#[derive(Default, Debug, Clone, PartialEq, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Card {
pub id: BubbleHearthId,
pub collectible: BubbleHearthId,
pub slug: String,
pub class_id: BubbleHearthId,
pub multi_class_ids: Vec<BubbleHearthId>,
pub spell_school_id: Option<BubbleHearthId>,
pub card_type_id: BubbleHearthId,
pub card_set_id: BubbleHearthId,
pub rarity_id: BubbleHearthId,
pub artist_name: String,
pub mana_cost: BubbleHearthId,
pub name: String,
pub text: String,
pub image: String,
pub image_gold: String,
pub flavor_text: String,
pub crop_image: String,
pub keyword_ids: Vec<BubbleHearthId>,
pub duels: Option<Duels>,
pub copy_of_card_id: Option<BubbleHearthId>,
pub health: Option<BubbleHearthId>,
pub attack: Option<BubbleHearthId>,
pub minion_type_id: Option<BubbleHearthId>,
pub child_ids: Option<Vec<BubbleHearthId>>,
pub rune_cost: Option<RuneCost>,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Duels {
pub relevant: bool,
pub constructed: bool,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct RuneCost {
pub blood: i64,
pub frost: i64,
pub unholy: i64,
}
impl<'a> HearthstoneConnector<'a> {
pub async fn search_cards(
&self,
_query: Option<CardSearchQuery<'a>>,
) -> BubbleHearthResult<Cards> {
let cards: Cards = self
.client
.send_request_and_deserialize(format!(
"https://us.api.blizzard.com/hearthstone/cards?locale={}",
self.client.locale.get_normalized_locale()
))
.await?;
Ok(cards)
}
}