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 在 数据库接口
每月 121 下载
110KB
2.5K SLoC
libpobsd
PlayOnBSD 数据库是一个人类可读的数据库,列出了可以在 OpenBSD 上玩的游戏。
有关更多信息,请参阅 文档。
lib.rs
:
PlayOnBSD 数据库是一个人类可读的数据库,列出了可以在 OpenBSD 上玩的游戏。目前,每个游戏由 17 行表示(每行代表一个字段),以下顺序
- 游戏:字符串,以 "A " 或 "The " 开头的字符串在字母排序时被特殊处理
- 封面:封面艺术图像文件的路径(
.png
,.jpg
) - 引擎:有效的引擎条目字符串
- 设置:字符串(包、命令、文本)
- 运行时:字符串;应对应于包中的可执行文件
- 商店:URL 字符串,空格分隔
- 提示:字符串
- 类型:字符串,以逗号分隔
- 标签:字符串,以逗号分隔
- 年份:整数(发布年份)
- 开发:字符串(开发者),以逗号分隔
- 发布:字符串(发布者),以逗号分隔
- 版本:版本号/字符串
- 状态:数值状态,括号内为在 -current 上测试的日期(不适用于与 OpenBSD 平台无关的上游错误);注意最高数值描述达到的级别
- 0 = 无法运行
- 1 = 游戏启动(没有足够的信息对状态进行有意义的评论,除了启动游戏之外)
- 2 = 主要错误:可能破坏游戏,使完成游戏变得不可能或很麻烦;与其他平台相比,明显降低了游戏乐趣
- 3 = 中度影响错误:明显,但不是破坏性的
- 4 = 小错误:几乎不明显,或与核心游戏无关
- 5 = 可完成的:游戏可以玩到结束画面,没有主要错误(类别 2);(不一定)包括可选的额外内容,DLC,可选多人游戏,成就等。
- 6 = 100%:包括可选内容如 DLC、支线任务、多人游戏在内的完整游戏可以享受
- 添加:条目添加的日期(ISO 8601 格式),信息不可用时为 EPOCH
- 更新时间:条目最后更新日期(ISO 8601 格式)
- IgdbId:在IGDB数据库中游戏的id
libpobsd 提供了一个Parser
来解析 PlayOnBSD 数据库,以及一个GameDataBase
来查询 PlayOnBSD 数据库。根据查询性质,GameDataBase
查询的结果将以QueryResult
的形式返回Item
或Game
。也可以使用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