#magic #api-bindings #mtg #api-wrapper #api

bin+lib scryfall

Scryfall 魔法游戏 API 的封装

44 个版本

新版本 0.17.9 2024 年 8 月 23 日
0.17.2 2024 年 7 月 29 日
0.16.1 2024 年 2 月 1 日
0.14.2 2023 年 12 月 5 日
0.4.0 2019 年 7 月 26 日

69游戏开发 类别中

Download history 4/week @ 2024-05-05 7/week @ 2024-05-12 26/week @ 2024-05-19 24/week @ 2024-05-26 21/week @ 2024-06-02 9/week @ 2024-06-09 10/week @ 2024-06-16 7/week @ 2024-06-23 103/week @ 2024-06-30 16/week @ 2024-07-07 189/week @ 2024-07-14 1/week @ 2024-07-21 139/week @ 2024-07-28 7/week @ 2024-08-04 790/week @ 2024-08-18

936 每月下载量
用于 daily_scry

MIT 许可证

235KB
4K SLoC

scryfall-rs

Scryfall 魔法游戏 API 的封装

Crates.io Documentation License Rust

尽可能紧密地封装 Scryfall API,并尝试保持其最新状态

卡片

从该 API 获取卡片的主要方式是使用 Card 结构体。

这允许您使用 Scryfall 所有的 RESTful API 获取卡片

use scryfall::card::Card;
match Card::named_fuzzy("Light Bolt") {
    Ok(card) => assert_eq!(card.name, "Lightning Bolt"),
    Err(e) => panic!(format!("{:?}", e))
}

集合

您还可以获取卡片集的信息。

可用于此的可用路由可以在 Set 中查看

use scryfall::set::Set;
assert_eq!(Set::code("mmq").unwrap().name, "Mercadian Masques")

处理破坏性更改

Scryfall 做了很多破坏性 API 更改,主要是因为魔法游戏有很多破坏性更改 😅。由于此包的强类型,这意味着有时某一天工作正常的代码第二天可能会失败。例如,有一个 PromoType 枚举。在反序列化时,该枚举将严格拒绝它不认识的任何格式。这意味着每次巫师添加新格式时,Scryfall 都将从其 API 返回该新格式,这将使您的代码在运行时失败。

为了应对这种情况,我添加了一个名为 unknown_variants 的功能。此功能为这些麻烦的枚举添加了一个名为 Unknown 的变体,该变体包含未知格式的字符串表示。

这有几个优点和缺点

  • 优点
    • 您的代码不太可能在一天之内停止工作。
    • 您可以对枚举进行穷举匹配
  • 缺点
    • 枚举的大小现在是 24 字节,而不是 1
    • 它不再是 Copy
    • 如果您曾经依赖通过未知变体传递的变体,当新变体被添加到枚举中时,它将不再在未知变体中显示。例如,如果明天巫师添加了一个名为“透明”的促销类型,并且您启用了 unknown_variants,则 "transparent" 将开始出现在 PromoType::Unknown 变体中。但在下一个版本的此 crate 中,我将添加 PromoType::Transparent,这意味着如果您升级对该 crate 的依赖,则 "transparent" 将不再出现在 PromoType::Unknown 变体中。如果您依赖这种行为,它将被视为重大更改。

如果您想要拥有未知变体但又不想支付24字节的成本,您可以选择 unknown_variants_slim 功能,该功能将简单地添加一个空的 Unknown 变体。

这两个功能不兼容,如果两者都存在,则 unknown_variants 将优先。

依赖项

~5–17MB
~243K SLoC