scryfall 0.25.0

A wrapper around the scryfall magic the gathering api
Documentation
#![deny(unreachable_patterns)]

use scryfall::{
    card::{Finishes, FrameEffect, Layout, PromoType, SecurityStamp},
    format::Format,
    set::SetType,
};

use static_assertions as sa;

sa::assert_impl_all!(Format: Copy);
sa::assert_impl_all!(FrameEffect: Copy);
sa::assert_impl_all!(Layout: Copy);
sa::assert_impl_all!(SetType: Copy);
sa::assert_impl_all!(PromoType: Copy);
sa::assert_impl_all!(SecurityStamp: Copy);

sa::assert_eq_size!(Format, u8);
sa::assert_eq_size!(FrameEffect, u8);
sa::assert_eq_size!(Layout, u8);
sa::assert_eq_size!(SetType, u8);
sa::assert_eq_size!(PromoType, u8);
sa::assert_eq_size!(SecurityStamp, u8);

#[allow(dead_code)]
fn match_on_frame_effect(f: FrameEffect) {
    match f {
        FrameEffect::BoosterFun => todo!(),
        FrameEffect::Wanted => todo!(),
        FrameEffect::Legendary => todo!(),
        FrameEffect::Miracle => todo!(),
        FrameEffect::Nyxtouched => todo!(),
        FrameEffect::Draft => todo!(),
        FrameEffect::Devoid => todo!(),
        FrameEffect::Tombstone => todo!(),
        FrameEffect::Colorshifted => todo!(),
        FrameEffect::Inverted => todo!(),
        FrameEffect::SunMoonDfc => todo!(),
        FrameEffect::CompassLandDfc => todo!(),
        FrameEffect::OriginPwDfc => todo!(),
        FrameEffect::MoonEldraziDfc => todo!(),
        FrameEffect::WaxingAndWaningMoonDfc => todo!(),
        FrameEffect::Showcase => todo!(),
        FrameEffect::ExtendedArt => todo!(),
        FrameEffect::Companion => todo!(),
        FrameEffect::Etched => todo!(),
        FrameEffect::Snow => todo!(),
        FrameEffect::Lesson => todo!(),
        FrameEffect::ShatteredGlass => todo!(),
        FrameEffect::ConvertDfc => todo!(),
        FrameEffect::FanDfc => todo!(),
        FrameEffect::UpsideDownDfc => todo!(),
        FrameEffect::MoonReverseMoonDfc => todo!(),
        FrameEffect::FullArt => todo!(),
        FrameEffect::Nyxborn => todo!(),
        FrameEffect::Booster => todo!(),
        FrameEffect::Textless => todo!(),
        FrameEffect::StorySpotlight => todo!(),
        FrameEffect::Thick => todo!(),
        FrameEffect::Borderless => todo!(),
        FrameEffect::Vehicle => todo!(),
        FrameEffect::Spree => todo!(),
        _ => todo!(),
    }
}
#[allow(dead_code)]
fn match_on_layout(f: Layout) {
    match f {
        Layout::Normal => todo!(),
        Layout::Split => todo!(),
        Layout::Flip => todo!(),
        Layout::Transform => todo!(),
        Layout::ModalDfc => todo!(),
        Layout::Meld => todo!(),
        Layout::Leveler => todo!(),
        Layout::Class => todo!(),
        Layout::Saga => todo!(),
        Layout::Adventure => todo!(),
        Layout::Planar => todo!(),
        Layout::Scheme => todo!(),
        Layout::Vanguard => todo!(),
        Layout::Token => todo!(),
        Layout::DoubleFacedToken => todo!(),
        Layout::Emblem => todo!(),
        Layout::Augment => todo!(),
        Layout::Host => todo!(),
        Layout::ArtSeries => todo!(),
        Layout::ReversibleCard => todo!(),
        Layout::Prototype => todo!(),
        Layout::Mutate => todo!(),
        Layout::Case => todo!(),
        _ => todo!(),
    }
}

#[allow(dead_code)]
fn match_on_set_type(f: SetType) {
    match f {
        SetType::Core => todo!(),
        SetType::Eternal => todo!(),
        SetType::Expansion => todo!(),
        SetType::Masters => todo!(),
        SetType::Masterpiece => todo!(),
        SetType::FromTheVault => todo!(),
        SetType::Spellbook => todo!(),
        SetType::PremiumDeck => todo!(),
        SetType::DuelDeck => todo!(),
        SetType::DraftInnovation => todo!(),
        SetType::TreasureChest => todo!(),
        SetType::Commander => todo!(),
        SetType::Planechase => todo!(),
        SetType::Archenemy => todo!(),
        SetType::Vanguard => todo!(),
        SetType::Funny => todo!(),
        SetType::Starter => todo!(),
        SetType::GiftBox => todo!(),
        SetType::Promo => todo!(),
        SetType::Token => todo!(),
        SetType::Memorabilia => todo!(),
        SetType::Alchemy => todo!(),
        SetType::Arsenal => todo!(),
        SetType::Minigame => todo!(),
        _ => todo!(),
    }
}

#[allow(dead_code)]
fn match_on_promo_type(f: PromoType) {
    match f {
        PromoType::Alchemy => todo!(),
        PromoType::Arenaleague => todo!(),
        PromoType::Boosterfun => todo!(),
        PromoType::Boxtopper => todo!(),
        PromoType::Brawldeck => todo!(),
        PromoType::Bringafriend => todo!(),
        PromoType::Bundle => todo!(),
        PromoType::Buyabox => todo!(),
        PromoType::ChocoboTrackFoil => todo!(),
        PromoType::Commanderparty => todo!(),
        PromoType::Commanderpromo => todo!(),
        PromoType::Concept => todo!(),
        PromoType::Confettifoil => todo!(),
        PromoType::Convention => todo!(),
        PromoType::Cosmicfoil => todo!(),
        PromoType::Datestamped => todo!(),
        PromoType::Dossier => todo!(),
        PromoType::Doubleexposure => todo!(),
        PromoType::Doublerainbow => todo!(),
        PromoType::Draculaseries => todo!(),
        PromoType::Draftweekend => todo!(),
        PromoType::Duels => todo!(),
        PromoType::Embossed => todo!(),
        PromoType::Event => todo!(),
        PromoType::FFI => todo!(),
        PromoType::FFII => todo!(),
        PromoType::FFIII => todo!(),
        PromoType::FFIV => todo!(),
        PromoType::FFV => todo!(),
        PromoType::FFVI => todo!(),
        PromoType::FFVII => todo!(),
        PromoType::FFVIII => todo!(),
        PromoType::FFIX => todo!(),
        PromoType::FFX => todo!(),
        PromoType::FFXI => todo!(),
        PromoType::FFXII => todo!(),
        PromoType::FFXIII => todo!(),
        PromoType::FFXIV => todo!(),
        PromoType::FFXV => todo!(),
        PromoType::FFXVI => todo!(),
        PromoType::FirstPlaceFoil => todo!(),
        PromoType::Fnm => todo!(),
        PromoType::Fracturefoil => todo!(),
        PromoType::Galaxyfoil => todo!(),
        PromoType::Gameday => todo!(),
        PromoType::Giftbox => todo!(),
        PromoType::Gilded => todo!(),
        PromoType::Glossy => todo!(),
        PromoType::Godzillaseries => todo!(),
        PromoType::Halofoil => todo!(),
        PromoType::Headliner => todo!(),
        PromoType::Imagine => todo!(),
        PromoType::Instore => todo!(),
        PromoType::Intropack => todo!(),
        PromoType::Invisibleink => todo!(),
        PromoType::Jpwalker => todo!(),
        PromoType::Judgegift => todo!(),
        PromoType::League => todo!(),
        PromoType::Magnified => todo!(),
        PromoType::Mediainsert => todo!(),
        PromoType::Metal => todo!(),
        PromoType::Moonlitland => todo!(),
        PromoType::Neonink => todo!(),
        PromoType::Oilslick => todo!(),
        PromoType::Openhouse => todo!(),
        PromoType::Planeswalkerdeck => todo!(),
        PromoType::Plastic => todo!(),
        PromoType::Playerrewards => todo!(),
        PromoType::Playpromo => todo!(),
        PromoType::Playtest => todo!(),
        PromoType::Portrait => todo!(),
        PromoType::Poster => todo!(),
        PromoType::Premiereshop => todo!(),
        PromoType::Prerelease => todo!(),
        PromoType::Promopack => todo!(),
        PromoType::Rainbowfoil => todo!(),
        PromoType::Raisedfoil => todo!(),
        PromoType::Ravnicacity => todo!(),
        PromoType::Rebalanced => todo!(),
        PromoType::Release => todo!(),
        PromoType::Ripplefoil => todo!(),
        PromoType::Schinesealtart => todo!(),
        PromoType::Scroll => todo!(),
        PromoType::Serialized => todo!(),
        PromoType::Setextension => todo!(),
        PromoType::Setpromo => todo!(),
        PromoType::Silverfoil => todo!(),
        PromoType::Singularityfoil => todo!(),
        PromoType::Stamped => todo!(),
        PromoType::Starterdeck => todo!(),
        PromoType::Stepandcompleat => todo!(),
        PromoType::Storechampionship => todo!(),
        PromoType::Surgefoil => todo!(),
        PromoType::Textured => todo!(),
        PromoType::Themepack => todo!(),
        PromoType::Thick => todo!(),
        PromoType::Tourney => todo!(),
        PromoType::UniversesBeyond => todo!(),
        PromoType::UpsideDown => todo!(),
        PromoType::UpsideDownBack => todo!(),
        PromoType::Vault => todo!(),
        PromoType::Wizardsplaynetwork => todo!(),
        PromoType::DragonScaleFoil => todo!(),
        _ => todo!(),
    }
}

#[allow(dead_code)]
fn match_on_security_stamp(s: SecurityStamp) {
    match s {
        SecurityStamp::Oval => todo!(),
        SecurityStamp::Triangle => todo!(),
        SecurityStamp::Acorn => todo!(),
        SecurityStamp::Circle => todo!(),
        SecurityStamp::Arena => todo!(),
        SecurityStamp::Heart => todo!(),
        _ => todo!(),
    }
}

#[allow(dead_code)]
fn match_on_finishes(f: Finishes) {
    match f {
        Finishes::Nonfoil => todo!(),
        Finishes::Foil => todo!(),
        Finishes::Etched => todo!(),
        _ => todo!(),
    }
}

#[test]
fn deserialize() {
    assert!(serde_json::from_str::<FrameEffect>(r#""foo""#).is_err());
    assert!(serde_json::from_str::<Layout>(r#""foo""#).is_err());
    assert!(serde_json::from_str::<SetType>(r#""foo""#).is_err());
    assert!(serde_json::from_str::<PromoType>(r#""foo""#).is_err());
    assert!(serde_json::from_str::<SecurityStamp>(r#""foo""#).is_err());
    assert!(serde_json::from_str::<Finishes>(r#""foo""#).is_err());
}