#primary-key #database-table #enums #proc-macro #key-value

symbols-models

从数据库数据中填充枚举的过程宏工具(共享特性)

16 个版本 (1 个稳定版)

1.0.0 2024 年 8 月 8 日
0.12.0 2023 年 8 月 18 日
0.11.0 2023 年 2 月 7 日
0.10.5 2022 年 12 月 2 日
0.1.4 2022 年 5 月 10 日

数据库接口 中排名 745

Download history 1/week @ 2024-06-03 3/week @ 2024-07-01 129/week @ 2024-08-05 9/week @ 2024-08-12

每月下载量 138
symbols 中使用

WTFPL 许可证

43KB

Symbols

这是什么?

What the Fuck Did You Just Bring Upon This Cursed Land

这是一个工具,用于构建一个连接到数据库的过程宏,从指定的表中检索数据,并将主键值填充到枚举变体中。
它还为每个非主键字段生成一个方法,当存在多个主键时,为每个可能的主键子集生成一个构造函数。

替换

替换使用注解参数完成。
基本替换的形式为 #[macro(field = "enum")]#[macro(field(type = "enum"))],我们告诉将 field 中的字符串值替换为枚举 enum 的变体,变体名称将是字段值的驼峰式版本。
高级替换以以下形式进行 #[macro(field(type = "bar", fn = "foo"))],其中我们指示用来自 field 的字符串值替换为对结构体/枚举 bar 中的方法 foo 的调用,期望方法输出类型为 bar
警告:由于所有生成的方法都是 const,因此通过这种方式传递的方法也必须是 const

缓存

为了避免数据库请求过多,启用宏运行时间,并能够离线工作,数据缓存文件以 <table>.cache 的名称存储在临时文件夹中。
删除它的快速方法是运行

find /tmp -name *.cache -delete

示例

您可以在 示例 文件夹中找到一个基本示例,它使用 mariadb 容器来加载数据库,您可以使用以下命令运行它:

docker-compose run rust

示例代码

#[example::example(
    table = "best_selling_video_games",
    platforms(type = "Platforms", fn = "from_str"),
    developer = "Developer",
    publisher(type = "Publisher", fn = "from_str")
)]
pub enum BestSellingVideoGame {}

将展开为

pub enum BestSellingVideoGame {
    AnimalCrossingNewHorizons,
    Borderlands2,
    CallOfDutyBlackOps,
    CallOfDutyBlackOpsIi,
    CallOfDutyModernWarfare,
    CallOfDutyModernWarfare2,
    CallOfDutyModernWarfare3,
    DiabloIiiReaperOfSouls,
    DuckHunt,
    Fifa18,
    GrandTheftAutoIv,
    GrandTheftAutoV,
    GrandTheftAutoSanAndreas,
    HumanFallFlat,
    KinectAdventures,
    MarioKart8Deluxe,
    MarioKartDs,
    MarioKartWii,
    Minecraft,
    NewSuperMarioBros,
    NewSuperMarioBrosUDeluxeLuigiU,
    NewSuperMarioBrosWii,
    Nintendogs,
    PacMan,
    PokemonDiamondPearlPlatinum,
    PokemonGoldSilverCrystal,
    PokemonRedGreenBlueYellow,
    PokemonRubySapphireEmerald,
    PokemonSunMoonUltraSunUltraMoon,
    PokemonSwordShield,
    PubgBattlegrounds,
    RedDeadRedemption,
    RedDeadRedemption2,
    SonicTheHedgehog,
    SuperMario64Ds,
    SuperMarioBros,
    SuperMarioBros3,
    SuperMarioOdyssey,
    SuperMarioWorld,
    SuperSmashBrosUltimate,
    Terraria,
    TetrisEa,
    TetrisNintendo,
    TheElderScrollsVSkyrim,
    TheLegendOfZeldaBreathOfTheWild,
    TheWitcher3HeartsOfStoneBloodAndWine,
    WiiFitPlus,
    WiiPlay,
    WiiSports,
    WiiSportsResort,
}

impl BestSellingVideoGame {
    pub const fn initial_release_date(&self) -> &'static str {
        match self {
            BestSellingVideoGame::AnimalCrossingNewHorizons => "March 20, 2020",
            BestSellingVideoGame::Borderlands2 => "September 18, 2012",
            BestSellingVideoGame::CallOfDutyBlackOps => "November 9, 2010",
            BestSellingVideoGame::CallOfDutyBlackOpsIi => "November 12, 2012",
            BestSellingVideoGame::CallOfDutyModernWarfare => "October 25, 2019",
            BestSellingVideoGame::CallOfDutyModernWarfare2 => "November 10, 2009",
            BestSellingVideoGame::CallOfDutyModernWarfare3 => "November 8, 2011",
            BestSellingVideoGame::DiabloIiiReaperOfSouls => "May 16, 2012",
            BestSellingVideoGame::DuckHunt => "April 21, 1984",
            BestSellingVideoGame::Fifa18 => "September 29, 2017",
            BestSellingVideoGame::GrandTheftAutoIv => "April 29, 2008",
            BestSellingVideoGame::GrandTheftAutoV => "September 17, 2013",
            BestSellingVideoGame::GrandTheftAutoSanAndreas => "October 26, 2004",
            BestSellingVideoGame::HumanFallFlat => "July 22, 2016",
            BestSellingVideoGame::KinectAdventures => "November 4, 2010",
            BestSellingVideoGame::MarioKart8Deluxe => "May 29, 2014",
            BestSellingVideoGame::MarioKartDs => "November 14, 2005",
            BestSellingVideoGame::MarioKartWii => "April 10, 2008",
            BestSellingVideoGame::Minecraft => "November 18, 2011",
            BestSellingVideoGame::NewSuperMarioBros => "May 15, 2006",
            BestSellingVideoGame::NewSuperMarioBrosUDeluxeLuigiU => "November 18, 2012",
            BestSellingVideoGame::NewSuperMarioBrosWii => "November 11, 2009",
            BestSellingVideoGame::Nintendogs => "April 21, 2005",
            BestSellingVideoGame::PacMan => "May 22, 1980",
            BestSellingVideoGame::PokemonDiamondPearlPlatinum => "September 28, 2006",
            BestSellingVideoGame::PokemonGoldSilverCrystal => "November 21, 1999",
            BestSellingVideoGame::PokemonRedGreenBlueYellow => "February 27, 1996",
            BestSellingVideoGame::PokemonRubySapphireEmerald => "November 21, 2002",
            BestSellingVideoGame::PokemonSunMoonUltraSunUltraMoon => "November 18, 2016",
            BestSellingVideoGame::PokemonSwordShield => "November 15, 2019",
            BestSellingVideoGame::PubgBattlegrounds => "December 20, 2017",
            BestSellingVideoGame::RedDeadRedemption => "May 18, 2010",
            BestSellingVideoGame::RedDeadRedemption2 => "October 26, 2018",
            BestSellingVideoGame::SonicTheHedgehog => "June 23, 1991",
            BestSellingVideoGame::SuperMario64Ds => "June 23, 1996",
            BestSellingVideoGame::SuperMarioBros => "September 13, 1985",
            BestSellingVideoGame::SuperMarioBros3 => "October 23, 1988",
            BestSellingVideoGame::SuperMarioOdyssey => "October 27, 2017",
            BestSellingVideoGame::SuperMarioWorld => "November 21, 1990",
            BestSellingVideoGame::SuperSmashBrosUltimate => "December 7, 2018",
            BestSellingVideoGame::Terraria => "May 16, 2011",
            BestSellingVideoGame::TetrisEa => "September 12, 2006",
            BestSellingVideoGame::TetrisNintendo => "June 14, 1989",
            BestSellingVideoGame::TheElderScrollsVSkyrim => "November 11, 2011",
            BestSellingVideoGame::TheLegendOfZeldaBreathOfTheWild => "March 3, 2017",
            BestSellingVideoGame::TheWitcher3HeartsOfStoneBloodAndWine => "May 19, 2015",
            BestSellingVideoGame::WiiFitPlus => "December 1, 2007",
            BestSellingVideoGame::WiiPlay => "December 2, 2006",
            BestSellingVideoGame::WiiSports => "November 19, 2006",
            BestSellingVideoGame::WiiSportsResort => "June 25, 2009",
        }
    }
    pub const fn rank(&self) -> i8 {
        match self {
            BestSellingVideoGame::AnimalCrossingNewHorizons => 15,
            BestSellingVideoGame::Borderlands2 => 33,
            BestSellingVideoGame::CallOfDutyBlackOps => 32,
            BestSellingVideoGame::CallOfDutyBlackOpsIi => 38,
            BestSellingVideoGame::CallOfDutyModernWarfare => 20,
            BestSellingVideoGame::CallOfDutyModernWarfare2 => 48,
            BestSellingVideoGame::CallOfDutyModernWarfare3 => 31,
            BestSellingVideoGame::DiabloIiiReaperOfSouls => 20,
            BestSellingVideoGame::DuckHunt => 25,
            BestSellingVideoGame::Fifa18 => 39,
            BestSellingVideoGame::GrandTheftAutoIv => 35,
            BestSellingVideoGame::GrandTheftAutoV => 2,
            BestSellingVideoGame::GrandTheftAutoSanAndreas => 27,
            BestSellingVideoGame::HumanFallFlat => 20,
            BestSellingVideoGame::KinectAdventures => 39,
            BestSellingVideoGame::MarioKart8Deluxe => 7,
            BestSellingVideoGame::MarioKartDs => 44,
            BestSellingVideoGame::MarioKartWii => 16,
            BestSellingVideoGame::Minecraft => 1,
            BestSellingVideoGame::NewSuperMarioBros => 18,
            BestSellingVideoGame::NewSuperMarioBrosUDeluxeLuigiU => 50,
            BestSellingVideoGame::NewSuperMarioBrosWii => 19,
            BestSellingVideoGame::Nintendogs => 42,
            BestSellingVideoGame::PacMan => 13,
            BestSellingVideoGame::PokemonDiamondPearlPlatinum => 36,
            BestSellingVideoGame::PokemonGoldSilverCrystal => 24,
            BestSellingVideoGame::PokemonRedGreenBlueYellow => 8,
            BestSellingVideoGame::PokemonRubySapphireEmerald => 49,
            BestSellingVideoGame::PokemonSunMoonUltraSunUltraMoon => 34,
            BestSellingVideoGame::PokemonSwordShield => 43,
            BestSellingVideoGame::PubgBattlegrounds => 5,
            BestSellingVideoGame::RedDeadRedemption => 46,
            BestSellingVideoGame::RedDeadRedemption2 => 11,
            BestSellingVideoGame::SonicTheHedgehog => 41,
            BestSellingVideoGame::SuperMario64Ds => 47,
            BestSellingVideoGame::SuperMarioBros => 6,
            BestSellingVideoGame::SuperMarioBros3 => 37,
            BestSellingVideoGame::SuperMarioOdyssey => 45,
            BestSellingVideoGame::SuperMarioWorld => 30,
            BestSellingVideoGame::SuperSmashBrosUltimate => 29,
            BestSellingVideoGame::Terraria => 9,
            BestSellingVideoGame::TetrisEa => 3,
            BestSellingVideoGame::TetrisNintendo => 11,
            BestSellingVideoGame::TheElderScrollsVSkyrim => 20,
            BestSellingVideoGame::TheLegendOfZeldaBreathOfTheWild => 28,
            BestSellingVideoGame::TheWitcher3HeartsOfStoneBloodAndWine => 14,
            BestSellingVideoGame::WiiFitPlus => 10,
            BestSellingVideoGame::WiiPlay => 26,
            BestSellingVideoGame::WiiSports => 4,
            BestSellingVideoGame::WiiSportsResort => 17,
        }
    }
    pub const fn sales(&self) -> &'static str {
        match self {
            BestSellingVideoGame::AnimalCrossingNewHorizons => "37,620,000",
            BestSellingVideoGame::Borderlands2 => "26,000,000",
            BestSellingVideoGame::CallOfDutyBlackOps => "26,200,000",
            BestSellingVideoGame::CallOfDutyBlackOpsIi => "24,200,000",
            BestSellingVideoGame::CallOfDutyModernWarfare => "30,000,000",
            BestSellingVideoGame::CallOfDutyModernWarfare2 => "22,700,000",
            BestSellingVideoGame::CallOfDutyModernWarfare3 => "26,500,000",
            BestSellingVideoGame::DiabloIiiReaperOfSouls => "30,000,000",
            BestSellingVideoGame::DuckHunt => "28,300,000",
            BestSellingVideoGame::Fifa18 => "24,000,000",
            BestSellingVideoGame::GrandTheftAutoIv => "25,000,000",
            BestSellingVideoGame::GrandTheftAutoV => "160,000,000",
            BestSellingVideoGame::GrandTheftAutoSanAndreas => "27,500,000",
            BestSellingVideoGame::HumanFallFlat => "30,000,000",
            BestSellingVideoGame::KinectAdventures => "24,000,000",
            BestSellingVideoGame::MarioKart8Deluxe => "51,810,000",
            BestSellingVideoGame::MarioKartDs => "23,600,000",
            BestSellingVideoGame::MarioKartWii => "37,380,000",
            BestSellingVideoGame::Minecraft => "238,000,000",
            BestSellingVideoGame::NewSuperMarioBros => "30,800,000",
            BestSellingVideoGame::NewSuperMarioBrosUDeluxeLuigiU => "21,600,000",
            BestSellingVideoGame::NewSuperMarioBrosWii => "30,320,000",
            BestSellingVideoGame::Nintendogs => "23,960,000",
            BestSellingVideoGame::PacMan => "42,071,635",
            BestSellingVideoGame::PokemonDiamondPearlPlatinum => "24,730,000",
            BestSellingVideoGame::PokemonGoldSilverCrystal => "29,490,000",
            BestSellingVideoGame::PokemonRedGreenBlueYellow => "47,520,000",
            BestSellingVideoGame::PokemonRubySapphireEmerald => "22,540,000",
            BestSellingVideoGame::PokemonSunMoonUltraSunUltraMoon => "25,310,000",
            BestSellingVideoGame::PokemonSwordShield => "23,900,000",
            BestSellingVideoGame::PubgBattlegrounds => "75,000,000",
            BestSellingVideoGame::RedDeadRedemption => "23,000,000",
            BestSellingVideoGame::RedDeadRedemption2 => "43,000,000",
            BestSellingVideoGame::SonicTheHedgehog => "23,982,960",
            BestSellingVideoGame::SuperMario64Ds => "22,960,000",
            BestSellingVideoGame::SuperMarioBros => "58,000,000",
            BestSellingVideoGame::SuperMarioBros3 => "24,430,000",
            BestSellingVideoGame::SuperMarioOdyssey => "23,020,000",
            BestSellingVideoGame::SuperMarioWorld => "26,662,500",
            BestSellingVideoGame::SuperSmashBrosUltimate => "27,400,000",
            BestSellingVideoGame::Terraria => "44,000,000",
            BestSellingVideoGame::TetrisEa => "100,000,000",
            BestSellingVideoGame::TetrisNintendo => "43,000,000",
            BestSellingVideoGame::TheElderScrollsVSkyrim => "30,000,000",
            BestSellingVideoGame::TheLegendOfZeldaBreathOfTheWild => "27,490,000",
            BestSellingVideoGame::TheWitcher3HeartsOfStoneBloodAndWine => "40,000,000",
            BestSellingVideoGame::WiiFitPlus => "43,800,000",
            BestSellingVideoGame::WiiPlay => "28,020,000",
            BestSellingVideoGame::WiiSports => "82,900,000",
            BestSellingVideoGame::WiiSportsResort => "33,140,000",
        }
    }
    pub const fn as_str(&self) -> &'static str {
        match self {
            BestSellingVideoGame::AnimalCrossingNewHorizons => "Animal Crossing: New Horizons",
            BestSellingVideoGame::Borderlands2 => "Borderlands 2",
            BestSellingVideoGame::CallOfDutyBlackOps => "Call of Duty: Black Ops",
            BestSellingVideoGame::CallOfDutyBlackOpsIi => "Call of Duty: Black Ops II",
            BestSellingVideoGame::CallOfDutyModernWarfare => "Call of Duty: Modern Warfare",
            BestSellingVideoGame::CallOfDutyModernWarfare2 => "Call of Duty: Modern Warfare 2",
            BestSellingVideoGame::CallOfDutyModernWarfare3 => "Call of Duty: Modern Warfare 3",
            BestSellingVideoGame::DiabloIiiReaperOfSouls => "Diablo III / Reaper of Souls",
            BestSellingVideoGame::DuckHunt => "Duck Hunt",
            BestSellingVideoGame::Fifa18 => "FIFA 18",
            BestSellingVideoGame::GrandTheftAutoIv => "Grand Theft Auto IV",
            BestSellingVideoGame::GrandTheftAutoV => "Grand Theft Auto V",
            BestSellingVideoGame::GrandTheftAutoSanAndreas => "Grand Theft Auto: San Andreas",
            BestSellingVideoGame::HumanFallFlat => "Human: Fall Flat",
            BestSellingVideoGame::KinectAdventures => "Kinect Adventures!",
            BestSellingVideoGame::MarioKart8Deluxe => "Mario Kart 8 / Deluxe",
            BestSellingVideoGame::MarioKartDs => "Mario Kart DS",
            BestSellingVideoGame::MarioKartWii => "Mario Kart Wii",
            BestSellingVideoGame::Minecraft => "Minecraft",
            BestSellingVideoGame::NewSuperMarioBros => "New Super Mario Bros.",
            BestSellingVideoGame::NewSuperMarioBrosUDeluxeLuigiU => {
                "New Super Mario Bros. U / Deluxe / Luigi U"
            }
            BestSellingVideoGame::NewSuperMarioBrosWii => "New Super Mario Bros. Wii",
            BestSellingVideoGame::Nintendogs => "Nintendogs",
            BestSellingVideoGame::PacMan => "Pac-Man",
            BestSellingVideoGame::PokemonDiamondPearlPlatinum => {
                "Pokemon Diamond / Pearl / Platinum"
            }
            BestSellingVideoGame::PokemonGoldSilverCrystal => "Pokemon Gold / Silver / Crystal",
            BestSellingVideoGame::PokemonRedGreenBlueYellow => {
                "Pokemon Red / Green / Blue / Yellow"
            }
            BestSellingVideoGame::PokemonRubySapphireEmerald => "Pokemon Ruby / Sapphire / Emerald",
            BestSellingVideoGame::PokemonSunMoonUltraSunUltraMoon => {
                "Pokemon Sun / Moon / Ultra Sun / Ultra Moon"
            }
            BestSellingVideoGame::PokemonSwordShield => "Pokemon Sword / Shield",
            BestSellingVideoGame::PubgBattlegrounds => "PUBG: Battlegrounds",
            BestSellingVideoGame::RedDeadRedemption => "Red Dead Redemption",
            BestSellingVideoGame::RedDeadRedemption2 => "Red Dead Redemption 2",
            BestSellingVideoGame::SonicTheHedgehog => "Sonic the Hedgehog",
            BestSellingVideoGame::SuperMario64Ds => "Super Mario 64 / DS",
            BestSellingVideoGame::SuperMarioBros => "Super Mario Bros.",
            BestSellingVideoGame::SuperMarioBros3 => "Super Mario Bros. 3",
            BestSellingVideoGame::SuperMarioOdyssey => "Super Mario Odyssey",
            BestSellingVideoGame::SuperMarioWorld => "Super Mario World",
            BestSellingVideoGame::SuperSmashBrosUltimate => "Super Smash Bros. Ultimate",
            BestSellingVideoGame::Terraria => "Terraria",
            BestSellingVideoGame::TetrisEa => "Tetris (EA)",
            BestSellingVideoGame::TetrisNintendo => "Tetris (Nintendo)",
            BestSellingVideoGame::TheElderScrollsVSkyrim => "The Elder Scrolls V: Skyrim",
            BestSellingVideoGame::TheLegendOfZeldaBreathOfTheWild => {
                "The Legend of Zelda: Breath of the Wild"
            }
            BestSellingVideoGame::TheWitcher3HeartsOfStoneBloodAndWine => {
                "The Witcher 3 / Hearts of Stone / Blood and Wine"
            }
            BestSellingVideoGame::WiiFitPlus => "Wii Fit / Plus",
            BestSellingVideoGame::WiiPlay => "Wii Play",
            BestSellingVideoGame::WiiSports => "Wii Sports",
            BestSellingVideoGame::WiiSportsResort => "Wii Sports Resort",
        }
    }
    pub const fn series(&self) -> &'static str {
        match self {
            BestSellingVideoGame::AnimalCrossingNewHorizons => "Animal Crossing",
            BestSellingVideoGame::Borderlands2 => "Borderlands",
            BestSellingVideoGame::CallOfDutyBlackOps => "Call of Duty",
            BestSellingVideoGame::CallOfDutyBlackOpsIi => "Call of Duty",
            BestSellingVideoGame::CallOfDutyModernWarfare => "Call of Duty",
            BestSellingVideoGame::CallOfDutyModernWarfare2 => "Call of Duty",
            BestSellingVideoGame::CallOfDutyModernWarfare3 => "Call of Duty",
            BestSellingVideoGame::DiabloIiiReaperOfSouls => "Diablo",
            BestSellingVideoGame::DuckHunt => "None",
            BestSellingVideoGame::Fifa18 => "FIFA",
            BestSellingVideoGame::GrandTheftAutoIv => "Grand Theft Auto",
            BestSellingVideoGame::GrandTheftAutoV => "Grand Theft Auto",
            BestSellingVideoGame::GrandTheftAutoSanAndreas => "Grand Theft Auto",
            BestSellingVideoGame::HumanFallFlat => "None",
            BestSellingVideoGame::KinectAdventures => "None",
            BestSellingVideoGame::MarioKart8Deluxe => "Mario Kart",
            BestSellingVideoGame::MarioKartDs => "Mario Kart",
            BestSellingVideoGame::MarioKartWii => "Mario Kart",
            BestSellingVideoGame::Minecraft => "Minecraft",
            BestSellingVideoGame::NewSuperMarioBros => "Super Mario",
            BestSellingVideoGame::NewSuperMarioBrosUDeluxeLuigiU => "Super Mario",
            BestSellingVideoGame::NewSuperMarioBrosWii => "Super Mario",
            BestSellingVideoGame::Nintendogs => "None",
            BestSellingVideoGame::PacMan => "Pac-Man",
            BestSellingVideoGame::PokemonDiamondPearlPlatinum => "Pokemon",
            BestSellingVideoGame::PokemonGoldSilverCrystal => "Pokemon",
            BestSellingVideoGame::PokemonRedGreenBlueYellow => "Pokemon",
            BestSellingVideoGame::PokemonRubySapphireEmerald => "Pokemon",
            BestSellingVideoGame::PokemonSunMoonUltraSunUltraMoon => "Pokemon",
            BestSellingVideoGame::PokemonSwordShield => "Pokemon",
            BestSellingVideoGame::PubgBattlegrounds => "PUBG Universe",
            BestSellingVideoGame::RedDeadRedemption => "Red Dead",
            BestSellingVideoGame::RedDeadRedemption2 => "Red Dead",
            BestSellingVideoGame::SonicTheHedgehog => "Sonic the Hedgehog",
            BestSellingVideoGame::SuperMario64Ds => "Super Mario",
            BestSellingVideoGame::SuperMarioBros => "Super Mario",
            BestSellingVideoGame::SuperMarioBros3 => "Super Mario",
            BestSellingVideoGame::SuperMarioOdyssey => "Super Mario",
            BestSellingVideoGame::SuperMarioWorld => "Super Mario",
            BestSellingVideoGame::SuperSmashBrosUltimate => "Super Smash Bros.",
            BestSellingVideoGame::Terraria => "None",
            BestSellingVideoGame::TetrisEa => "Tetris",
            BestSellingVideoGame::TetrisNintendo => "Tetris",
            BestSellingVideoGame::TheElderScrollsVSkyrim => "The Elder Scrolls",
            BestSellingVideoGame::TheLegendOfZeldaBreathOfTheWild => "The Legend of Zelda",
            BestSellingVideoGame::TheWitcher3HeartsOfStoneBloodAndWine => "The Witcher",
            BestSellingVideoGame::WiiFitPlus => "Wii",
            BestSellingVideoGame::WiiPlay => "Wii",
            BestSellingVideoGame::WiiSports => "Wii",
            BestSellingVideoGame::WiiSportsResort => "Wii",
        }
    }
    pub const fn platforms(&self) -> Platforms {
        match self {
            BestSellingVideoGame::AnimalCrossingNewHorizons => {
                Platforms::from_str("Nintendo Switch")
            }
            BestSellingVideoGame::Borderlands2 => Platforms::from_str("Multi-platform"),
            BestSellingVideoGame::CallOfDutyBlackOps => Platforms::from_str("Multi-platform"),
            BestSellingVideoGame::CallOfDutyBlackOpsIi => Platforms::from_str("Multi-platform"),
            BestSellingVideoGame::CallOfDutyModernWarfare => Platforms::from_str("Multi-platform"),
            BestSellingVideoGame::CallOfDutyModernWarfare2 => Platforms::from_str("Multi-platform"),
            BestSellingVideoGame::CallOfDutyModernWarfare3 => Platforms::from_str("Multi-platform"),
            BestSellingVideoGame::DiabloIiiReaperOfSouls => Platforms::from_str("Multi-platform"),
            BestSellingVideoGame::DuckHunt => Platforms::from_str("NES"),
            BestSellingVideoGame::Fifa18 => Platforms::from_str("Multi-platform"),
            BestSellingVideoGame::GrandTheftAutoIv => Platforms::from_str("Multi-platform"),
            BestSellingVideoGame::GrandTheftAutoV => Platforms::from_str("Multi-platform"),
            BestSellingVideoGame::GrandTheftAutoSanAndreas => Platforms::from_str("Multi-platform"),
            BestSellingVideoGame::HumanFallFlat => Platforms::from_str("Multi-platform"),
            BestSellingVideoGame::KinectAdventures => Platforms::from_str("Xbox 360"),
            BestSellingVideoGame::MarioKart8Deluxe => Platforms::from_str("Wii U / Switch"),
            BestSellingVideoGame::MarioKartDs => Platforms::from_str("Nintendo DS"),
            BestSellingVideoGame::MarioKartWii => Platforms::from_str("Wii"),
            BestSellingVideoGame::Minecraft => Platforms::from_str("Multi-platform"),
            BestSellingVideoGame::NewSuperMarioBros => Platforms::from_str("Nintendo DS"),
            BestSellingVideoGame::NewSuperMarioBrosUDeluxeLuigiU => {
                Platforms::from_str("Wii U / Nintendo Switch")
            }
            BestSellingVideoGame::NewSuperMarioBrosWii => Platforms::from_str("Wii"),
            BestSellingVideoGame::Nintendogs => Platforms::from_str("Nintendo DS"),
            BestSellingVideoGame::PacMan => Platforms::from_str("Multi-platform"),
            BestSellingVideoGame::PokemonDiamondPearlPlatinum => Platforms::from_str("Nintendo DS"),
            BestSellingVideoGame::PokemonGoldSilverCrystal => Platforms::from_str("Game Boy Color"),
            BestSellingVideoGame::PokemonRedGreenBlueYellow => {
                Platforms::from_str("Game Boy / Color")
            }
            BestSellingVideoGame::PokemonRubySapphireEmerald => {
                Platforms::from_str("Game Boy Advance")
            }
            BestSellingVideoGame::PokemonSunMoonUltraSunUltraMoon => {
                Platforms::from_str("Nintendo 3DS")
            }
            BestSellingVideoGame::PokemonSwordShield => Platforms::from_str("Nintendo Switch"),
            BestSellingVideoGame::PubgBattlegrounds => Platforms::from_str("Multi-platform"),
            BestSellingVideoGame::RedDeadRedemption => Platforms::from_str("PS3 / Xbox 360"),
            BestSellingVideoGame::RedDeadRedemption2 => Platforms::from_str("Multi-platform"),
            BestSellingVideoGame::SonicTheHedgehog => Platforms::from_str("Multi-platform"),
            BestSellingVideoGame::SuperMario64Ds => Platforms::from_str("Nintendo 64 / DS"),
            BestSellingVideoGame::SuperMarioBros => Platforms::from_str("Multi-platform"),
            BestSellingVideoGame::SuperMarioBros3 => Platforms::from_str("Multi-platform"),
            BestSellingVideoGame::SuperMarioOdyssey => Platforms::from_str("Nintendo Switch"),
            BestSellingVideoGame::SuperMarioWorld => Platforms::from_str("Multi-platform"),
            BestSellingVideoGame::SuperSmashBrosUltimate => Platforms::from_str("Nintendo Switch"),
            BestSellingVideoGame::Terraria => Platforms::from_str("Multi-platform"),
            BestSellingVideoGame::TetrisEa => Platforms::from_str("Multi-platform"),
            BestSellingVideoGame::TetrisNintendo => Platforms::from_str("Game Boy / NES"),
            BestSellingVideoGame::TheElderScrollsVSkyrim => Platforms::from_str("Multi-platform"),
            BestSellingVideoGame::TheLegendOfZeldaBreathOfTheWild => {
                Platforms::from_str("Wii U / Switch")
            }
            BestSellingVideoGame::TheWitcher3HeartsOfStoneBloodAndWine => {
                Platforms::from_str("Multi-platform")
            }
            BestSellingVideoGame::WiiFitPlus => Platforms::from_str("Wii"),
            BestSellingVideoGame::WiiPlay => Platforms::from_str("Wii"),
            BestSellingVideoGame::WiiSports => Platforms::from_str("Wii"),
            BestSellingVideoGame::WiiSportsResort => Platforms::from_str("Wii"),
        }
    }
    pub const fn publisher(&self) -> Publisher {
        match self {
            BestSellingVideoGame::AnimalCrossingNewHorizons => Publisher::from_str("Nintendo"),
            BestSellingVideoGame::Borderlands2 => Publisher::from_str("2K Games"),
            BestSellingVideoGame::CallOfDutyBlackOps => Publisher::from_str("Activision"),
            BestSellingVideoGame::CallOfDutyBlackOpsIi => Publisher::from_str("Activision"),
            BestSellingVideoGame::CallOfDutyModernWarfare => Publisher::from_str("Activision"),
            BestSellingVideoGame::CallOfDutyModernWarfare2 => Publisher::from_str("Activision"),
            BestSellingVideoGame::CallOfDutyModernWarfare3 => Publisher::from_str("Activision"),
            BestSellingVideoGame::DiabloIiiReaperOfSouls => {
                Publisher::from_str("Blizzard Entertainment")
            }
            BestSellingVideoGame::DuckHunt => Publisher::from_str("Nintendo"),
            BestSellingVideoGame::Fifa18 => Publisher::from_str("EA Sports"),
            BestSellingVideoGame::GrandTheftAutoIv => Publisher::from_str("Rockstar Games"),
            BestSellingVideoGame::GrandTheftAutoV => Publisher::from_str("Rockstar Games"),
            BestSellingVideoGame::GrandTheftAutoSanAndreas => Publisher::from_str("Rockstar Games"),
            BestSellingVideoGame::HumanFallFlat => Publisher::from_str("Curve Digital"),
            BestSellingVideoGame::KinectAdventures => Publisher::from_str("Xbox Game Studios"),
            BestSellingVideoGame::MarioKart8Deluxe => Publisher::from_str("Nintendo"),
            BestSellingVideoGame::MarioKartDs => Publisher::from_str("Nintendo"),
            BestSellingVideoGame::MarioKartWii => Publisher::from_str("Nintendo"),
            BestSellingVideoGame::Minecraft => Publisher::from_str("Xbox Game Studios"),
            BestSellingVideoGame::NewSuperMarioBros => Publisher::from_str("Nintendo"),
            BestSellingVideoGame::NewSuperMarioBrosUDeluxeLuigiU => Publisher::from_str("Nintendo"),
            BestSellingVideoGame::NewSuperMarioBrosWii => Publisher::from_str("Nintendo"),
            BestSellingVideoGame::Nintendogs => Publisher::from_str("Nintendo"),
            BestSellingVideoGame::PacMan => Publisher::from_str("Namco"),
            BestSellingVideoGame::PokemonDiamondPearlPlatinum => {
                Publisher::from_str("Nintendo / The Pokemon Company")
            }
            BestSellingVideoGame::PokemonGoldSilverCrystal => Publisher::from_str("Nintendo"),
            BestSellingVideoGame::PokemonRedGreenBlueYellow => Publisher::from_str("Nintendo"),
            BestSellingVideoGame::PokemonRubySapphireEmerald => {
                Publisher::from_str("Nintendo / The Pokemon Company")
            }
            BestSellingVideoGame::PokemonSunMoonUltraSunUltraMoon => {
                Publisher::from_str("Nintendo / The Pokemon Company")
            }
            BestSellingVideoGame::PokemonSwordShield => {
                Publisher::from_str("Nintendo / The Pokemon Company")
            }
            BestSellingVideoGame::PubgBattlegrounds => Publisher::from_str("PUBG Corporation"),
            BestSellingVideoGame::RedDeadRedemption => Publisher::from_str("Rockstar Games"),
            BestSellingVideoGame::RedDeadRedemption2 => Publisher::from_str("Rockstar Games"),
            BestSellingVideoGame::SonicTheHedgehog => Publisher::from_str("Sega"),
            BestSellingVideoGame::SuperMario64Ds => Publisher::from_str("Nintendo"),
            BestSellingVideoGame::SuperMarioBros => Publisher::from_str("Nintendo"),
            BestSellingVideoGame::SuperMarioBros3 => Publisher::from_str("Nintendo"),
            BestSellingVideoGame::SuperMarioOdyssey => Publisher::from_str("Nintendo"),
            BestSellingVideoGame::SuperMarioWorld => Publisher::from_str("Nintendo"),
            BestSellingVideoGame::SuperSmashBrosUltimate => Publisher::from_str("Nintendo"),
            BestSellingVideoGame::Terraria => Publisher::from_str("Re-Logic / 505 Games"),
            BestSellingVideoGame::TetrisEa => Publisher::from_str("Electronic Arts"),
            BestSellingVideoGame::TetrisNintendo => Publisher::from_str("Nintendo"),
            BestSellingVideoGame::TheElderScrollsVSkyrim => {
                Publisher::from_str("Bethesda Softworks")
            }
            BestSellingVideoGame::TheLegendOfZeldaBreathOfTheWild => {
                Publisher::from_str("Nintendo")
            }
            BestSellingVideoGame::TheWitcher3HeartsOfStoneBloodAndWine => {
                Publisher::from_str("CD Projekt")
            }
            BestSellingVideoGame::WiiFitPlus => Publisher::from_str("Nintendo"),
            BestSellingVideoGame::WiiPlay => Publisher::from_str("Nintendo"),
            BestSellingVideoGame::WiiSports => Publisher::from_str("Nintendo"),
            BestSellingVideoGame::WiiSportsResort => Publisher::from_str("Nintendo"),
        }
    }
    pub const fn developer(&self) -> Developer {
        match self {
            BestSellingVideoGame::AnimalCrossingNewHorizons => Developer::NintendoEpd,
            BestSellingVideoGame::Borderlands2 => Developer::GearboxSoftware,
            BestSellingVideoGame::CallOfDutyBlackOps => Developer::Treyarch,
            BestSellingVideoGame::CallOfDutyBlackOpsIi => Developer::Treyarch,
            BestSellingVideoGame::CallOfDutyModernWarfare => Developer::InfinityWard,
            BestSellingVideoGame::CallOfDutyModernWarfare2 => Developer::InfinityWard,
            BestSellingVideoGame::CallOfDutyModernWarfare3 => Developer::InfinityWardSledgehammer,
            BestSellingVideoGame::DiabloIiiReaperOfSouls => Developer::BlizzardEntertainment,
            BestSellingVideoGame::DuckHunt => Developer::NintendoRD1,
            BestSellingVideoGame::Fifa18 => Developer::EaVancouver,
            BestSellingVideoGame::GrandTheftAutoIv => Developer::RockstarNorth,
            BestSellingVideoGame::GrandTheftAutoV => Developer::RockstarNorth,
            BestSellingVideoGame::GrandTheftAutoSanAndreas => Developer::RockstarNorth,
            BestSellingVideoGame::HumanFallFlat => Developer::NoBrakesGames,
            BestSellingVideoGame::KinectAdventures => Developer::GoodScienceStudio,
            BestSellingVideoGame::MarioKart8Deluxe => Developer::NintendoEad,
            BestSellingVideoGame::MarioKartDs => Developer::NintendoEad,
            BestSellingVideoGame::MarioKartWii => Developer::NintendoEad,
            BestSellingVideoGame::Minecraft => Developer::MojangStudios,
            BestSellingVideoGame::NewSuperMarioBros => Developer::NintendoEad,
            BestSellingVideoGame::NewSuperMarioBrosUDeluxeLuigiU => Developer::NintendoEad,
            BestSellingVideoGame::NewSuperMarioBrosWii => Developer::NintendoEad,
            BestSellingVideoGame::Nintendogs => Developer::NintendoEad,
            BestSellingVideoGame::PacMan => Developer::Namco,
            BestSellingVideoGame::PokemonDiamondPearlPlatinum => Developer::GameFreak,
            BestSellingVideoGame::PokemonGoldSilverCrystal => Developer::GameFreak,
            BestSellingVideoGame::PokemonRedGreenBlueYellow => Developer::GameFreak,
            BestSellingVideoGame::PokemonRubySapphireEmerald => Developer::GameFreak,
            BestSellingVideoGame::PokemonSunMoonUltraSunUltraMoon => Developer::GameFreak,
            BestSellingVideoGame::PokemonSwordShield => Developer::GameFreak,
            BestSellingVideoGame::PubgBattlegrounds => Developer::PubgCorporation,
            BestSellingVideoGame::RedDeadRedemption => Developer::RockstarSanDiego,
            BestSellingVideoGame::RedDeadRedemption2 => Developer::RockstarStudios,
            BestSellingVideoGame::SonicTheHedgehog => Developer::SonicTeam,
            BestSellingVideoGame::SuperMario64Ds => Developer::NintendoEad,
            BestSellingVideoGame::SuperMarioBros => Developer::NintendoRD4,
            BestSellingVideoGame::SuperMarioBros3 => Developer::NintendoEad,
            BestSellingVideoGame::SuperMarioOdyssey => Developer::NintendoEpd,
            BestSellingVideoGame::SuperMarioWorld => Developer::NintendoEad,
            BestSellingVideoGame::SuperSmashBrosUltimate => Developer::BandaiNamcoStudiosSoraLtd,
            BestSellingVideoGame::Terraria => Developer::ReLogic,
            BestSellingVideoGame::TetrisEa => Developer::EaMobile,
            BestSellingVideoGame::TetrisNintendo => Developer::NintendoRD1,
            BestSellingVideoGame::TheElderScrollsVSkyrim => Developer::BethesdaGameStudios,
            BestSellingVideoGame::TheLegendOfZeldaBreathOfTheWild => Developer::NintendoEpd,
            BestSellingVideoGame::TheWitcher3HeartsOfStoneBloodAndWine => Developer::CdProjektRed,
            BestSellingVideoGame::WiiFitPlus => Developer::NintendoEad,
            BestSellingVideoGame::WiiPlay => Developer::NintendoEad,
            BestSellingVideoGame::WiiSports => Developer::NintendoEad,
            BestSellingVideoGame::WiiSportsResort => Developer::NintendoEad,
        }
    }
}

impl<'a> TryFrom<&'a str> for BestSellingVideoGame {
    type Error = String;
    fn try_from(s: &'a str) -> Result<Self, Self::Error> {
        match s {
            "Animal Crossing: New Horizons" => Ok(BestSellingVideoGame::AnimalCrossingNewHorizons),
            "Borderlands 2" => Ok(BestSellingVideoGame::Borderlands2),
            "Call of Duty: Black Ops" => Ok(BestSellingVideoGame::CallOfDutyBlackOps),
            "Call of Duty: Black Ops II" => Ok(BestSellingVideoGame::CallOfDutyBlackOpsIi),
            "Call of Duty: Modern Warfare" => Ok(BestSellingVideoGame::CallOfDutyModernWarfare),
            "Call of Duty: Modern Warfare 2" => Ok(BestSellingVideoGame::CallOfDutyModernWarfare2),
            "Call of Duty: Modern Warfare 3" => Ok(BestSellingVideoGame::CallOfDutyModernWarfare3),
            "Diablo III / Reaper of Souls" => Ok(BestSellingVideoGame::DiabloIiiReaperOfSouls),
            "Duck Hunt" => Ok(BestSellingVideoGame::DuckHunt),
            "FIFA 18" => Ok(BestSellingVideoGame::Fifa18),
            "Grand Theft Auto IV" => Ok(BestSellingVideoGame::GrandTheftAutoIv),
            "Grand Theft Auto V" => Ok(BestSellingVideoGame::GrandTheftAutoV),
            "Grand Theft Auto: San Andreas" => Ok(BestSellingVideoGame::GrandTheftAutoSanAndreas),
            "Human: Fall Flat" => Ok(BestSellingVideoGame::HumanFallFlat),
            "Kinect Adventures!" => Ok(BestSellingVideoGame::KinectAdventures),
            "Mario Kart 8 / Deluxe" => Ok(BestSellingVideoGame::MarioKart8Deluxe),
            "Mario Kart DS" => Ok(BestSellingVideoGame::MarioKartDs),
            "Mario Kart Wii" => Ok(BestSellingVideoGame::MarioKartWii),
            "Minecraft" => Ok(BestSellingVideoGame::Minecraft),
            "New Super Mario Bros." => Ok(BestSellingVideoGame::NewSuperMarioBros),
            "New Super Mario Bros. U / Deluxe / Luigi U" => {
                Ok(BestSellingVideoGame::NewSuperMarioBrosUDeluxeLuigiU)
            }
            "New Super Mario Bros. Wii" => Ok(BestSellingVideoGame::NewSuperMarioBrosWii),
            "Nintendogs" => Ok(BestSellingVideoGame::Nintendogs),
            "Pac-Man" => Ok(BestSellingVideoGame::PacMan),
            "Pokemon Diamond / Pearl / Platinum" => {
                Ok(BestSellingVideoGame::PokemonDiamondPearlPlatinum)
            }
            "Pokemon Gold / Silver / Crystal" => Ok(BestSellingVideoGame::PokemonGoldSilverCrystal),
            "Pokemon Red / Green / Blue / Yellow" => {
                Ok(BestSellingVideoGame::PokemonRedGreenBlueYellow)
            }
            "Pokemon Ruby / Sapphire / Emerald" => {
                Ok(BestSellingVideoGame::PokemonRubySapphireEmerald)
            }
            "Pokemon Sun / Moon / Ultra Sun / Ultra Moon" => {
                Ok(BestSellingVideoGame::PokemonSunMoonUltraSunUltraMoon)
            }
            "Pokemon Sword / Shield" => Ok(BestSellingVideoGame::PokemonSwordShield),
            "PUBG: Battlegrounds" => Ok(BestSellingVideoGame::PubgBattlegrounds),
            "Red Dead Redemption" => Ok(BestSellingVideoGame::RedDeadRedemption),
            "Red Dead Redemption 2" => Ok(BestSellingVideoGame::RedDeadRedemption2),
            "Sonic the Hedgehog" => Ok(BestSellingVideoGame::SonicTheHedgehog),
            "Super Mario 64 / DS" => Ok(BestSellingVideoGame::SuperMario64Ds),
            "Super Mario Bros." => Ok(BestSellingVideoGame::SuperMarioBros),
            "Super Mario Bros. 3" => Ok(BestSellingVideoGame::SuperMarioBros3),
            "Super Mario Odyssey" => Ok(BestSellingVideoGame::SuperMarioOdyssey),
            "Super Mario World" => Ok(BestSellingVideoGame::SuperMarioWorld),
            "Super Smash Bros. Ultimate" => Ok(BestSellingVideoGame::SuperSmashBrosUltimate),
            "Terraria" => Ok(BestSellingVideoGame::Terraria),
            "Tetris (EA)" => Ok(BestSellingVideoGame::TetrisEa),
            "Tetris (Nintendo)" => Ok(BestSellingVideoGame::TetrisNintendo),
            "The Elder Scrolls V: Skyrim" => Ok(BestSellingVideoGame::TheElderScrollsVSkyrim),
            "The Legend of Zelda: Breath of the Wild" => {
                Ok(BestSellingVideoGame::TheLegendOfZeldaBreathOfTheWild)
            }
            "The Witcher 3 / Hearts of Stone / Blood and Wine" => {
                Ok(BestSellingVideoGame::TheWitcher3HeartsOfStoneBloodAndWine)
            }
            "Wii Fit / Plus" => Ok(BestSellingVideoGame::WiiFitPlus),
            "Wii Play" => Ok(BestSellingVideoGame::WiiPlay),
            "Wii Sports" => Ok(BestSellingVideoGame::WiiSports),
            "Wii Sports Resort" => Ok(BestSellingVideoGame::WiiSportsResort),
            _ => Err(format!("Unknown BestSellingVideoGame {}", s)),
        }
    }
}

依赖项

~7MB
~136K SLoC