7 个版本

0.3.1 2024年7月23日
0.3.0 2024年6月2日
0.2.0 2024年3月13日
0.1.3 2024年1月21日
0.1.1 2023年4月15日

#551数据库接口

Download history 146/week @ 2024-05-31 20/week @ 2024-06-07 3/week @ 2024-06-14 103/week @ 2024-07-19 18/week @ 2024-07-26

每月 121 下载

MIT 许可证

110KB
2.5K SLoC

check test codecov Crates.io (latest) Docs.rs

libpobsd

PlayOnBSD 数据库是一个人类可读的数据库,列出了可以在 OpenBSD 上玩的游戏。

有关更多信息,请参阅 文档


lib.rs:

PlayOnBSD 数据库是一个人类可读的数据库,列出了可以在 OpenBSD 上玩的游戏。目前,每个游戏由 17 行表示(每行代表一个字段),以下顺序

  1. 游戏:字符串,以 "A " 或 "The " 开头的字符串在字母排序时被特殊处理
  2. 封面:封面艺术图像文件的路径(.png.jpg
  3. 引擎:有效的引擎条目字符串
  4. 设置:字符串(包、命令、文本)
  5. 运行时:字符串;应对应于包中的可执行文件
  6. 商店:URL 字符串,空格分隔
  7. 提示:字符串
  8. 类型:字符串,以逗号分隔
  9. 标签:字符串,以逗号分隔
  10. 年份:整数(发布年份)
  11. 开发:字符串(开发者),以逗号分隔
  12. 发布:字符串(发布者),以逗号分隔
  13. 版本:版本号/字符串
  14. 状态:数值状态,括号内为在 -current 上测试的日期(不适用于与 OpenBSD 平台无关的上游错误);注意最高数值描述达到的级别
  • 0 = 无法运行
  • 1 = 游戏启动(没有足够的信息对状态进行有意义的评论,除了启动游戏之外)
  • 2 = 主要错误:可能破坏游戏,使完成游戏变得不可能或很麻烦;与其他平台相比,明显降低了游戏乐趣
  • 3 = 中度影响错误:明显,但不是破坏性的
  • 4 = 小错误:几乎不明显,或与核心游戏无关
  • 5 = 可完成的:游戏可以玩到结束画面,没有主要错误(类别 2);(不一定)包括可选的额外内容,DLC,可选多人游戏,成就等。
  • 6 = 100%:包括可选内容如 DLC、支线任务、多人游戏在内的完整游戏可以享受
  1. 添加:条目添加的日期(ISO 8601 格式),信息不可用时为 EPOCH
  2. 更新时间:条目最后更新日期(ISO 8601 格式)
  3. IgdbId:在IGDB数据库中游戏的id

libpobsd 提供了一个Parser来解析 PlayOnBSD 数据库,以及一个GameDataBase来查询 PlayOnBSD 数据库。根据查询性质,GameDataBase查询的结果将以QueryResult的形式返回ItemGame。也可以使用GameFilter来过滤Game集合。

示例

在向量中加载 PlayOnBSD 数据库中列出的游戏

use libpobsd::{Parser, ParserResult, Game};

let games: Vec<Game> = match Parser::default()
           .load_from_file("openbsd-games.db")
           .expect("Failed to load database") {
    ParserResult::WithoutError(games) => games,
    ParserResult::WithError(games, _) => games,
};

加载 PlayOnBSD 数据库中列出的游戏到GameDataBase,无需处理解析错误(如果有的话)

use libpobsd::{Parser, ParserResult, GameDataBase, Game};
let games: Vec<Game> = match Parser::default()
           .load_from_file("openbsd-games.db")
           .expect("Failed to load database") {
    ParserResult::WithoutError(games) => games,
    ParserResult::WithError(games, _) => games,
};
let db = GameDataBase::new(games);

使用GameDataBase通过名称对游戏进行非大小写敏感的搜索,查询结果以QueryResult的形式返回

let db = GameDataBase::new(games);
let st = SearchType::CaseSensitive;
let games: QueryResult<&Game> = db.search_games_by_name("Barrow", &st);

通过年份过滤查询结果(由QueryResult结构表示)

let db = GameDataBase::new(games);
let st = SearchType::CaseSensitive;
let games = db.search_games_by_name("Barrow", &st);
let games = games.filter_games_by_year("2018", &st);

列出查询结果的游戏

let db = GameDataBase::new(games);
let st = SearchType::CaseSensitive;
let games = db.search_games_by_name("Barrow", &st);
for game in games.into_inner() {
    println!("Game: {}", game.name);
}

每个模块的文档中都有更多示例。

依赖

~3.5–5.5MB
~96K SLoC