use serde::{Deserialize, Serialize};
use url::Url;
use crate::HttpResource;
use crate::resources::ResourceKind;
pub struct CardSymbolsResource;
pub struct ManaCostResource<'a>(pub &'a str);
impl HttpResource<CardSymbolList> for CardSymbolsResource {
fn path(&self) -> String {
"symbology".into()
}
}
impl<'a> HttpResource<ManaCost> for ManaCostResource<'a> {
fn path(&self) -> String {
format!("symbology/parse-mana?cost={}", self.0)
}
}
#[derive(Serialize, Deserialize, Debug, PartialEq)]
pub struct CardSymbolList {
#[serde(rename = "object")]
pub kind: ResourceKind,
pub has_more: bool,
pub data: Vec<CardSymbol>,
}
#[derive(Serialize, Deserialize, Debug, PartialEq)]
pub struct CardSymbol {
#[serde(rename = "object")]
pub kind: ResourceKind,
pub symbol: String,
pub svg_uri: Url,
pub loose_variant: Option<String>,
pub english: String,
pub transposable: bool,
pub represents_mana: bool,
pub appears_in_mana_costs: bool,
pub cmc: Option<f64>,
pub funny: bool,
pub colors: Vec<ColorSymbol>,
pub gatherer_alternates: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Debug, PartialEq)]
pub struct ManaCost {
#[serde(rename = "object")]
pub kind: ResourceKind,
pub cost: String,
pub colors: Vec<ColorSymbol>,
pub cmc: i64,
pub colorless: bool,
pub monocolored: bool,
pub multicolored: bool,
}
#[derive(Serialize, Deserialize, Debug, PartialEq)]
pub enum ColorSymbol {
B,
G,
R,
U,
W,
}
#[cfg(test)]
mod tests {
use super::*;
use reqwest::Method;
#[test]
fn mana_cost_resource_should_return_path_and_method() {
let resource = ManaCostResource("test");
assert_eq!("symbology/parse-mana?cost=test", resource.path());
assert_eq!(Method::GET, resource.method());
}
}