use serde::{Deserialize, Serialize};
#[derive(Debug, Copy, Clone, Eq, PartialEq, Serialize, Deserialize)]
#[cfg_attr(test, serde(deny_unknown_fields))]
#[serde(untagged)]
pub enum ProducedMana {
Color(super::color::Color),
UnfinityMana(UnfinityMana),
}
impl ProducedMana {
#[allow(non_upper_case_globals)]
pub const Two: Self = Self::UnfinityMana(UnfinityMana::Two);
#[allow(non_upper_case_globals)]
pub const Tap: Self = Self::UnfinityMana(UnfinityMana::Two);
}
#[derive(Debug, Copy, Clone, Eq, PartialEq, Serialize, Deserialize)]
#[cfg_attr(test, serde(deny_unknown_fields))]
pub enum UnfinityMana {
#[serde(rename = "2")]
Two,
#[serde(rename = "T")]
Tap,
}
#[cfg(test)]
mod test {
use super::super::color::Color;
use super::*;
use serde_json::from_str;
#[test]
fn color() {
let c = from_str::<ProducedMana>("\"W\"").unwrap();
assert_eq!(c, ProducedMana::Color(Color::White))
}
#[test]
fn two() {
let c = from_str::<ProducedMana>("\"2\"").unwrap();
assert_eq!(c, ProducedMana::UnfinityMana(UnfinityMana::Two))
}
#[test]
fn tap() {
let c = from_str::<ProducedMana>("\"T\"").unwrap();
assert_eq!(c, ProducedMana::UnfinityMana(UnfinityMana::Tap))
}
#[test]
fn in_json() {
let s = r#"{ "produced_mana": [ "B" ] }"#;
#[derive(Deserialize)]
struct T {
produced_mana: Vec<ProducedMana>,
}
let t = from_str::<T>(s).unwrap();
assert_eq!(t.produced_mana, [ProducedMana::Color(Color::Black)])
}
}