Half of ScryfallDeser fields added
Very non-atomic - and I'm not even sure if it's half. I think I might stop here and actually try the derserialisation stuff
This commit is contained in:
14
scryfall_deser/.gitignore
vendored
Normal file
14
scryfall_deser/.gitignore
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
# Generated by Cargo
|
||||
# will have compiled files and executables
|
||||
debug/
|
||||
target/
|
||||
|
||||
# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries
|
||||
# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html
|
||||
Cargo.lock
|
||||
|
||||
# These are backup files generated by rustfmt
|
||||
**/*.rs.bk
|
||||
|
||||
# MSVC Windows builds of rustc generate these, which store debugging information
|
||||
*.pdb
|
||||
9
scryfall_deser/Cargo.toml
Normal file
9
scryfall_deser/Cargo.toml
Normal file
@@ -0,0 +1,9 @@
|
||||
[package]
|
||||
name = "scryfall_deser"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
serde = { version = "1.0", features = ["derive"] }
|
||||
84
scryfall_deser/src/lib.rs
Normal file
84
scryfall_deser/src/lib.rs
Normal file
@@ -0,0 +1,84 @@
|
||||
use serde::Deserialize;
|
||||
|
||||
// Info from here:
|
||||
// https://scryfall.com/docs/api/cards
|
||||
#[derive(Deserialize)]
|
||||
struct ScryfallCard {
|
||||
// Core Card Fields
|
||||
pub arena_id: Option<u64>,
|
||||
pub id: String, // UUID - internal for Scryfall
|
||||
pub lang: String,
|
||||
pub mtgo: Option<u64>,
|
||||
pub mtgo_foil_id: Option<u64>,
|
||||
pub multiverse_ids: Option<Vec<u64>>,
|
||||
pub tcgplayer_id: Option<u64>,
|
||||
pub tcgplayer_etched_id: Option<u64>,
|
||||
pub cardmarket_id: Option<u64>,
|
||||
pub object: String,
|
||||
pub layout: String, // Perhaps some kind of enum of these: https://scryfall.com/docs/api/layouts?
|
||||
pub oracle_id: Option<String>, // UUID
|
||||
pub prints_search_uri: String, // URI
|
||||
pub rulings_uri: String, // URI
|
||||
pub scryfall_uri: String, // URI
|
||||
pub uri: String, //URI
|
||||
|
||||
// Gameplay Fields
|
||||
pub all_parts: Option<Vec<ScryfallRelatedCardObject>>,
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
// https://scryfall.com/docs/api/cards#card-face-objects
|
||||
#[derive(Deserialize)]
|
||||
struct ScryfallCardFaceObject {
|
||||
pub artist: Option<String>,
|
||||
pub artist_id: Option<String>, // UUID
|
||||
pub cmc: Option<f64>, // TODO: Make this a proper Decimal - see "Little Girl" card for example of cmc of 0.5
|
||||
pub colour_identity: Vec<Colour>,
|
||||
pub colour_indicator: Option<Vec<Colour>>,
|
||||
pub colours: Option<Vec<Colour>>,
|
||||
pub defence: Option<String>,
|
||||
pub edhrec_rank: Option<u64>,
|
||||
}
|
||||
|
||||
// https://scryfall.com/docs/api/cards#related-card-objects
|
||||
#[derive(Deserialize)]
|
||||
struct ScryfallRelatedCardObject {
|
||||
pub id: String, // UUID
|
||||
pub object: String, // Always "related_card"
|
||||
pub component: String, // One of token, meld_part, meld_result, combo_piece
|
||||
pub name: String,
|
||||
pub type_line: String,
|
||||
pub uri: String // URI
|
||||
}
|
||||
|
||||
#[derive(Deserialize, PartialEq)]
|
||||
enum Colour {
|
||||
White,
|
||||
Blue,
|
||||
Black,
|
||||
Red,
|
||||
Green,
|
||||
Colourless
|
||||
}
|
||||
|
||||
pub fn deserialise_card(data: String) -> Card {
|
||||
|
||||
Card
|
||||
}
|
||||
|
||||
pub fn add(left: usize, right: usize) -> usize {
|
||||
left + right
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn it_works() {
|
||||
let result = add(2, 2);
|
||||
assert_eq!(result, 4);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user