deserlize all cards
This commit is contained in:
parent
97aa161166
commit
91a56a77dc
272
Cargo.lock
generated
272
Cargo.lock
generated
@ -6,59 +6,8 @@ version = 3
|
|||||||
name = "aro"
|
name = "aro"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"crossterm",
|
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"tui",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "autocfg"
|
|
||||||
version = "1.1.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "bitflags"
|
|
||||||
version = "1.3.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "cassowary"
|
|
||||||
version = "0.3.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "cfg-if"
|
|
||||||
version = "1.0.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "crossterm"
|
|
||||||
version = "0.25.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "e64e6c0fbe2c17357405f7c758c1ef960fce08bdfb2c03d88d2a18d7e09c4b67"
|
|
||||||
dependencies = [
|
|
||||||
"bitflags",
|
|
||||||
"crossterm_winapi",
|
|
||||||
"libc",
|
|
||||||
"mio",
|
|
||||||
"parking_lot",
|
|
||||||
"signal-hook",
|
|
||||||
"signal-hook-mio",
|
|
||||||
"winapi",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "crossterm_winapi"
|
|
||||||
version = "0.9.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "2ae1b35a484aa10e07fe0638d02301c5ad24de82d310ccbd2f3693da5f09bf1c"
|
|
||||||
dependencies = [
|
|
||||||
"winapi",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -67,66 +16,6 @@ version = "1.0.4"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc"
|
checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "libc"
|
|
||||||
version = "0.2.137"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "lock_api"
|
|
||||||
version = "0.4.9"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
|
|
||||||
dependencies = [
|
|
||||||
"autocfg",
|
|
||||||
"scopeguard",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "log"
|
|
||||||
version = "0.4.17"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
|
|
||||||
dependencies = [
|
|
||||||
"cfg-if",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "mio"
|
|
||||||
version = "0.8.5"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de"
|
|
||||||
dependencies = [
|
|
||||||
"libc",
|
|
||||||
"log",
|
|
||||||
"wasi",
|
|
||||||
"windows-sys",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "parking_lot"
|
|
||||||
version = "0.12.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
|
|
||||||
dependencies = [
|
|
||||||
"lock_api",
|
|
||||||
"parking_lot_core",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "parking_lot_core"
|
|
||||||
version = "0.9.4"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "4dc9e0dc2adc1c69d09143aff38d3d30c5c3f0df0dad82e6d25547af174ebec0"
|
|
||||||
dependencies = [
|
|
||||||
"cfg-if",
|
|
||||||
"libc",
|
|
||||||
"redox_syscall",
|
|
||||||
"smallvec",
|
|
||||||
"windows-sys",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "proc-macro2"
|
name = "proc-macro2"
|
||||||
version = "1.0.47"
|
version = "1.0.47"
|
||||||
@ -145,27 +34,12 @@ dependencies = [
|
|||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "redox_syscall"
|
|
||||||
version = "0.2.16"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
|
|
||||||
dependencies = [
|
|
||||||
"bitflags",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ryu"
|
name = "ryu"
|
||||||
version = "1.0.11"
|
version = "1.0.11"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09"
|
checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "scopeguard"
|
|
||||||
version = "1.1.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde"
|
name = "serde"
|
||||||
version = "1.0.147"
|
version = "1.0.147"
|
||||||
@ -197,42 +71,6 @@ dependencies = [
|
|||||||
"serde",
|
"serde",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "signal-hook"
|
|
||||||
version = "0.3.14"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "a253b5e89e2698464fc26b545c9edceb338e18a89effeeecfea192c3025be29d"
|
|
||||||
dependencies = [
|
|
||||||
"libc",
|
|
||||||
"signal-hook-registry",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "signal-hook-mio"
|
|
||||||
version = "0.2.3"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af"
|
|
||||||
dependencies = [
|
|
||||||
"libc",
|
|
||||||
"mio",
|
|
||||||
"signal-hook",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "signal-hook-registry"
|
|
||||||
version = "1.4.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"
|
|
||||||
dependencies = [
|
|
||||||
"libc",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "smallvec"
|
|
||||||
version = "1.10.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "syn"
|
name = "syn"
|
||||||
version = "1.0.103"
|
version = "1.0.103"
|
||||||
@ -244,118 +82,8 @@ dependencies = [
|
|||||||
"unicode-ident",
|
"unicode-ident",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "tui"
|
|
||||||
version = "0.19.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "ccdd26cbd674007e649a272da4475fb666d3aa0ad0531da7136db6fab0e5bad1"
|
|
||||||
dependencies = [
|
|
||||||
"bitflags",
|
|
||||||
"cassowary",
|
|
||||||
"crossterm",
|
|
||||||
"unicode-segmentation",
|
|
||||||
"unicode-width",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unicode-ident"
|
name = "unicode-ident"
|
||||||
version = "1.0.5"
|
version = "1.0.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3"
|
checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "unicode-segmentation"
|
|
||||||
version = "1.10.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "0fdbf052a0783de01e944a6ce7a8cb939e295b1e7be835a1112c3b9a7f047a5a"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "unicode-width"
|
|
||||||
version = "0.1.10"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "wasi"
|
|
||||||
version = "0.11.0+wasi-snapshot-preview1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "winapi"
|
|
||||||
version = "0.3.9"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
|
|
||||||
dependencies = [
|
|
||||||
"winapi-i686-pc-windows-gnu",
|
|
||||||
"winapi-x86_64-pc-windows-gnu",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "winapi-i686-pc-windows-gnu"
|
|
||||||
version = "0.4.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "winapi-x86_64-pc-windows-gnu"
|
|
||||||
version = "0.4.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows-sys"
|
|
||||||
version = "0.42.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
|
|
||||||
dependencies = [
|
|
||||||
"windows_aarch64_gnullvm",
|
|
||||||
"windows_aarch64_msvc",
|
|
||||||
"windows_i686_gnu",
|
|
||||||
"windows_i686_msvc",
|
|
||||||
"windows_x86_64_gnu",
|
|
||||||
"windows_x86_64_gnullvm",
|
|
||||||
"windows_x86_64_msvc",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows_aarch64_gnullvm"
|
|
||||||
version = "0.42.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows_aarch64_msvc"
|
|
||||||
version = "0.42.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows_i686_gnu"
|
|
||||||
version = "0.42.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows_i686_msvc"
|
|
||||||
version = "0.42.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows_x86_64_gnu"
|
|
||||||
version = "0.42.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows_x86_64_gnullvm"
|
|
||||||
version = "0.42.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows_x86_64_msvc"
|
|
||||||
version = "0.42.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5"
|
|
||||||
|
@ -6,5 +6,3 @@ edition = "2021"
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
serde_json = "1.0"
|
serde_json = "1.0"
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
tui = "0.19.0"
|
|
||||||
crossterm = "0.25.0"
|
|
||||||
|
File diff suppressed because one or more lines are too long
609680
cards.json
Normal file
609680
cards.json
Normal file
File diff suppressed because it is too large
Load Diff
279
src/main.rs
279
src/main.rs
@ -1,149 +1,172 @@
|
|||||||
use crossterm::terminal::enable_raw_mode;
|
use serde::{de::Visitor, Deserialize, Deserializer};
|
||||||
use serde::Deserialize;
|
|
||||||
use std::{io, iter, time::Duration};
|
|
||||||
use tui::{
|
|
||||||
backend::CrosstermBackend,
|
|
||||||
layout,
|
|
||||||
style::{Color, Style},
|
|
||||||
text::Text,
|
|
||||||
widgets::{Block, Borders, List, ListItem, Paragraph, Widget},
|
|
||||||
};
|
|
||||||
|
|
||||||
type Terminal = tui::Terminal<CrosstermBackend<io::Stdout>>;
|
|
||||||
|
|
||||||
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
let stdout = io::stdout();
|
let cards: CardInfo =
|
||||||
enable_raw_mode()?;
|
serde_json::from_reader(std::io::BufReader::new(std::fs::File::open("cards.json")?))?;
|
||||||
let mut backend = CrosstermBackend::new(stdout);
|
println!("{} cards read", cards.data.len());
|
||||||
let mut terminal = Terminal::new(backend)?;
|
Ok(())
|
||||||
terminal.hide_cursor()?;
|
}
|
||||||
terminal.clear()?;
|
|
||||||
let all_cards= vec![
|
#[derive(Debug, Deserialize, PartialEq, Eq, Clone)]
|
||||||
Card::SpellCard {
|
struct CardInfo {
|
||||||
name: "The Cheerful Coffin".to_owned(),
|
data: Vec<Card>,
|
||||||
text: "Discard up to 3 Monster Cards from your hand to the Graveyard.".to_owned()
|
}
|
||||||
},
|
|
||||||
Card::EffectMonster {
|
#[derive(Debug, Deserialize, PartialEq, Eq, Clone)]
|
||||||
name: "Des Lacooda".to_owned(),
|
struct CardBase {
|
||||||
effect: "Once per turn: You can change this card to face-down Defense Position. When this card is Flip Summoned: Draw 1 card.".to_owned(),
|
//#[serde(rename = "type", deserialize_with = "split_types")]
|
||||||
atk: 500,
|
//card_type: Vec<String>,
|
||||||
def: 600,
|
name: String,
|
||||||
level: 3,
|
#[serde(rename = "desc")]
|
||||||
r#type: "Zombie".to_owned(),
|
text: String,
|
||||||
attribute: "EARTH".to_owned(),
|
}
|
||||||
|
|
||||||
|
fn split_types<'de, D: Deserializer<'de>>(deserializer: D) -> Result<Vec<String>, D::Error> {
|
||||||
|
struct SplittingVisitor;
|
||||||
|
|
||||||
|
impl<'de> Visitor<'de> for SplittingVisitor {
|
||||||
|
type Value = Vec<String>;
|
||||||
|
|
||||||
|
fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
|
||||||
|
formatter.write_str("a string")
|
||||||
}
|
}
|
||||||
];
|
|
||||||
let mut cards = all_cards.clone();
|
|
||||||
let mut search_text = String::new();
|
|
||||||
|
|
||||||
loop {
|
fn visit_str<E: serde::de::Error>(self, v: &str) -> Result<Self::Value, E> {
|
||||||
refresh(&mut terminal, &cards, &search_text);
|
Ok(v.split_whitespace()
|
||||||
|
.filter(|t| t != &"Card")
|
||||||
|
.map(str::to_owned)
|
||||||
|
.collect())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Ok(())
|
deserializer.deserialize_any(SplittingVisitor)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn refresh(term: &mut Terminal, cards: &Vec<Card>, search_text: &str) -> Result<(), io::Error> {
|
#[derive(Debug, Deserialize, PartialEq, Eq, Clone)]
|
||||||
let mut list = selectable_list(
|
struct Monster {
|
||||||
search_text,
|
// None for ?
|
||||||
cards
|
atk: Option<i32>,
|
||||||
.iter()
|
attribute: String,
|
||||||
.map(|c| ListItem::new(format!("{c:?}")))
|
#[serde(rename = "race")]
|
||||||
.collect::<Vec<_>>(),
|
r#type: String,
|
||||||
None,
|
// None for ? or link monsters
|
||||||
);
|
def: Option<i32>,
|
||||||
term.draw(|mut frame| {
|
// also includes rank
|
||||||
frame.render_widget(list, frame.size());
|
level: Option<u8>,
|
||||||
})?;
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn selectable_list<'a>(
|
|
||||||
title: &'a str,
|
|
||||||
content: Vec<ListItem<'a>>,
|
|
||||||
selected: Option<usize>,
|
|
||||||
) -> List<'a> {
|
|
||||||
List::new(content)
|
|
||||||
.block(
|
|
||||||
Block::default()
|
|
||||||
.title(title)
|
|
||||||
.borders(Borders::TOP | Borders::RIGHT | Borders::LEFT),
|
|
||||||
)
|
|
||||||
.highlight_style(Style::default().fg(Color::LightGreen))
|
|
||||||
.highlight_symbol(">")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Deserialize, PartialEq, Eq, Clone)]
|
#[derive(Debug, Deserialize, PartialEq, Eq, Clone)]
|
||||||
#[serde(tag = "type")]
|
#[serde(tag = "type")]
|
||||||
enum Card {
|
enum Card {
|
||||||
#[serde(rename = "Spell Card")]
|
#[serde(alias = "Spell Card", alias = "Trap Card")]
|
||||||
SpellCard {
|
Backrow {
|
||||||
name: String,
|
#[serde(flatten)]
|
||||||
#[serde(rename = "desc")]
|
base: CardBase,
|
||||||
text: String,
|
},
|
||||||
|
#[serde(rename = "Skill Card")]
|
||||||
|
Skill {
|
||||||
|
#[serde(flatten)]
|
||||||
|
base: CardBase,
|
||||||
},
|
},
|
||||||
#[serde(
|
#[serde(
|
||||||
rename = "Effect Monster",
|
alias = "Effect Monster",
|
||||||
alias = "Flip Effect Monster",
|
alias = "Flip Effect Monster",
|
||||||
alias = "Union Effect Monster"
|
alias = "Fusion Monster",
|
||||||
|
alias = "Gemini Monster",
|
||||||
|
alias = "Link Monster",
|
||||||
|
alias = "Normal Monster",
|
||||||
|
alias = "Normal Tuner Monster",
|
||||||
|
alias = "Pendulum Effect Fusion Monster",
|
||||||
|
alias = "Pendulum Effect Monster",
|
||||||
|
alias = "Pendulum Effect Ritual Monster",
|
||||||
|
alias = "Pendulum Flip Effect Monster",
|
||||||
|
alias = "Pendulum Normal Monster",
|
||||||
|
alias = "Pendulum Tuner Effect Monster",
|
||||||
|
alias = "Ritual Effect Monster",
|
||||||
|
alias = "Ritual Monster",
|
||||||
|
alias = "Spirit Monster",
|
||||||
|
alias = "Synchro Monster",
|
||||||
|
alias = "Synchro Pendulum Effect Monster",
|
||||||
|
alias = "Synchro Tuner Monster",
|
||||||
|
alias = "Token",
|
||||||
|
alias = "Toon Monster",
|
||||||
|
alias = "Tuner Monster",
|
||||||
|
alias = "Union Effect Monster",
|
||||||
|
alias = "XYZ Monster",
|
||||||
|
alias = "XYZ Pendulum Effect Monster"
|
||||||
)]
|
)]
|
||||||
EffectMonster {
|
Monster {
|
||||||
name: String,
|
#[serde(flatten)]
|
||||||
#[serde(rename = "desc")]
|
base: CardBase,
|
||||||
effect: String,
|
#[serde(flatten)]
|
||||||
atk: i32,
|
monster: Monster,
|
||||||
def: i32,
|
#[serde(default, rename = "linkval")]
|
||||||
level: i32,
|
link_rating: u8,
|
||||||
attribute: String,
|
#[serde(default)]
|
||||||
#[serde(rename = "race")]
|
linkmarkers: Vec<String>,
|
||||||
r#type: String,
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[cfg(test)]
|
||||||
fn test_spell() {
|
mod tests {
|
||||||
let s = r#"
|
use super::*;
|
||||||
{
|
|
||||||
"id": 41142615,
|
|
||||||
"name": "The Cheerful Coffin",
|
|
||||||
"type": "Spell Card",
|
|
||||||
"desc": "Discard up to 3 Monster Cards from your hand to the Graveyard.",
|
|
||||||
"race": "Normal"
|
|
||||||
}"#;
|
|
||||||
let coffin: Card = serde_json::from_str(s).unwrap();
|
|
||||||
assert_eq!(
|
|
||||||
coffin,
|
|
||||||
Card::SpellCard {
|
|
||||||
name: "The Cheerful Coffin".to_owned(),
|
|
||||||
text: "Discard up to 3 Monster Cards from your hand to the Graveyard.".to_owned()
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_monster() {
|
fn test_spell() {
|
||||||
let s = r#"
|
let s = r#"
|
||||||
{
|
{
|
||||||
"id": 2326738,
|
"id": 41142615,
|
||||||
"name": "Des Lacooda",
|
"name": "The Cheerful Coffin",
|
||||||
"type": "Effect Monster",
|
"type": "Spell Card",
|
||||||
"desc": "Once per turn: You can change this card to face-down Defense Position. When this card is Flip Summoned: Draw 1 card.",
|
"desc": "Discard up to 3 Monster Cards from your hand to the Graveyard.",
|
||||||
"atk": 500,
|
"race": "Normal"
|
||||||
"def": 600,
|
}"#;
|
||||||
"level": 3,
|
let coffin: Card = serde_json::from_str(s).unwrap();
|
||||||
"race": "Zombie",
|
assert_eq!(
|
||||||
"attribute": "EARTH"
|
coffin,
|
||||||
}"#;
|
Card::Backrow {
|
||||||
let munch: Card = serde_json::from_str(s).unwrap();
|
base: CardBase {
|
||||||
assert_eq!(
|
card_type: vec!["Spell".to_owned()],
|
||||||
munch,
|
name: "The Cheerful Coffin".to_owned(),
|
||||||
Card::EffectMonster {
|
text: "Discard up to 3 Monster Cards from your hand to the Graveyard."
|
||||||
name: "Des Lacooda".to_owned(),
|
.to_owned()
|
||||||
effect: "Once per turn: You can change this card to face-down Defense Position. When this card is Flip Summoned: Draw 1 card.".to_owned(),
|
}
|
||||||
atk: 500,
|
}
|
||||||
def: 600,
|
)
|
||||||
level: 3,
|
}
|
||||||
r#type: "Zombie".to_owned(),
|
|
||||||
attribute: "EARTH".to_owned(),
|
#[test]
|
||||||
}
|
fn test_monster() {
|
||||||
)
|
let s = r#"
|
||||||
|
{
|
||||||
|
"id": 2326738,
|
||||||
|
"name": "Des Lacooda",
|
||||||
|
"type": "Effect Monster",
|
||||||
|
"desc": "Once per turn: You can change this card to face-down Defense Position. When this card is Flip Summoned: Draw 1 card.",
|
||||||
|
"atk": 500,
|
||||||
|
"def": 600,
|
||||||
|
"level": 3,
|
||||||
|
"race": "Zombie",
|
||||||
|
"attribute": "EARTH"
|
||||||
|
}"#;
|
||||||
|
let munch: Card = serde_json::from_str(s).unwrap();
|
||||||
|
assert_eq!(
|
||||||
|
munch,
|
||||||
|
Card::Monster {
|
||||||
|
base: CardBase {
|
||||||
|
card_type: vec!["Effect".to_owned(), "Monster".to_owned()],
|
||||||
|
name: "Des Lacooda".to_owned(),
|
||||||
|
text: "Once per turn: You can change this card to face-down Defense Position. When this card is Flip Summoned: Draw 1 card.".to_owned(),
|
||||||
|
},
|
||||||
|
monster: Monster {
|
||||||
|
atk: Some(500),
|
||||||
|
def: Some(600),
|
||||||
|
level: Some(3),
|
||||||
|
r#type: "Zombie".to_owned(),
|
||||||
|
attribute: "EARTH".to_owned(),
|
||||||
|
},
|
||||||
|
link_rating: 0,
|
||||||
|
linkmarkers: vec![]
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user