diff --git a/scryfall_deser/Cargo.toml b/scryfall_deser/Cargo.toml index 2ed93bd..644410b 100644 --- a/scryfall_deser/Cargo.toml +++ b/scryfall_deser/Cargo.toml @@ -6,6 +6,7 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +chrono = { version = "0.4.39", features = ["serde"] } serde = { version = "1.0", features = ["derive"] } serde_json = "1.0.138" uuid = { version = "1.12.1", features = ["v4", "serde"] } diff --git a/scryfall_deser/src/lib.rs b/scryfall_deser/src/lib.rs index 7239ec4..8de8193 100644 --- a/scryfall_deser/src/lib.rs +++ b/scryfall_deser/src/lib.rs @@ -1,5 +1,7 @@ use serde::Deserialize; +use serde_json::Value; use uuid::Uuid; +use chrono::NaiveDate; // Info from here: // https://scryfall.com/docs/api/cards @@ -86,10 +88,32 @@ struct ScryfallCard { pub printed_text: Option, pub printed_type_line: Option, pub promo: bool, - pub promo_types: Option>, // TODO: Check what types exist - could be a enumeratable selection - //pub purchase_uris: Option>, // FIXME + pub promo_types: Option>, // TODO enum? + pub purchase_uris: Option, pub rarity: Rarity, - // TODO - the rest (and the purachase URIs above) + pub related_uris: Value, // TODO: - list all the URIs? Maybe? Who cares? + pub released_at: NaiveDate, + pub reprint: bool, + pub scryfall_set_uri: String, // URI + pub set_name: String, + pub set_search_uri: String, // URI + pub set_type: String, // TODO: Enum? + pub set_uri: String, // URI + pub set: String, + pub set_id: Uuid, + pub story_spotlight: bool, + pub textless: bool, + pub variation: bool, + pub variation_of: Option, + pub security_stamp: Option, + pub watermark: Option, + #[serde(rename = "preview.previewed_at")] + pub preview_previewed_at: Option, + #[serde(rename = "preview.source_uri")] + pub preview_source_uri: Option, // URI + #[serde(rename = "preview.source")] + pub preview_source: Option + } // https://scryfall.com/docs/api/cards#card-face-objects @@ -106,7 +130,23 @@ struct ScryfallCardFaceObject { #[serde(rename = "colors")] pub colours: Option>, pub defence: Option, - // TODO: Complete + pub flavour_text: Option, + pub illustration_id: Option, + pub image_uris: ImageURIs, + pub layout: Option, + pub loyalty: Option, + pub mana_cost: Option, + pub name: String, + pub object: String, + pub oracle_id: Option, + pub oracle_text: Option, + pub power: Option, + pub printed_name: Option, + pub printed_text: Option, + pub printed_type_line: Option, + pub toughness: Option, + pub type_line: Option, + pub watermark: Option } // https://scryfall.com/docs/api/cards#related-card-objects @@ -115,7 +155,7 @@ struct ScryfallCardFaceObject { struct ScryfallRelatedCardObject { pub id: Uuid, pub object: String, // Always "related_card" - pub component: String, // One of token, meld_part, meld_result, combo_piece + pub component: Component, pub name: String, pub type_line: String, pub uri: String // URI @@ -214,7 +254,7 @@ enum Frame { #[serde(rename = "2003")] OhThree, #[serde(rename = "2015")] - OhFifteen, + Fifteen, #[serde(rename = "future")] Future } @@ -336,6 +376,44 @@ enum Rarity { Bonus } +#[allow(dead_code)] +#[derive(Deserialize, Debug)] +struct PurchaseUris { + tcgplayer: String, // Option? + cardmarket: String, + cardhoarder: String, +} + +#[allow(dead_code)] +#[derive(Deserialize, Debug)] +enum SecurityStamp { + #[serde(rename = "oval")] + Oval, + #[serde(rename = "triangle")] + Triangle, + #[serde(rename = "acorn")] + Acorn, + #[serde(rename = "circle")] + Circle, + #[serde(rename = "arena")] + Arena, + #[serde(rename = "heart")] + Heart +} + +#[allow(dead_code)] +#[derive(Deserialize, Debug)] +enum Component { + #[serde(rename = "token")] + Token, + #[serde(rename = "meld_part")] + MeldPart, + #[serde(rename = "meld_result")] + MeldResult, + #[serde(rename = "combo_piece")] + ComboPiece, +} + #[cfg(test)] mod tests { use super::*;