#openbsd #parser #play-on-bsd #struct #enums #error

pobsd-parser

PlayOnBSD数据库的简单解析器

7个不稳定版本 (3个重大变更)

0.4.1 2023年3月29日
0.4.0 2023年3月27日
0.3.1 2023年3月27日
0.2.0 2023年3月15日
0.1.1 2023年3月6日

数据库接口类别中排名第1330


4 个 Crate使用

MIT 许可证

49KB
1K SLoC

Build Clippy Crates.io (latest) Docs.rs

pobsd-parser

pobsd-parser是一个用于解析PlayOnBSD数据库的解析库。

此库提供

  • Parser 结构体,用于处理解析
  • ParsingMode 枚举,用于在严格或宽松解析模式之间进行选择
  • ParserResult 结构体,用于处理带错误和不带错误的解析
  • Game 结构体,表示数据库中的一个游戏

示例

以下是一个加载文件的第一个示例(默认为宽松模式)。

extern crate pobsd_parser;
use pobsd_parser::{Parser, ParserResult};
// Create a parser
let parser = Parser::default();
// Load the database
let parser_result = parser.load_from_file("/path/to/games.db")
       .expect("Problem trying to open the file");
let games = match parser_result {
       ParserResult::WithoutError(games) => games,
       ParserResult::WithError(games, _) => games,
};

解析器还可以使用严格模式,在遇到解析错误时停止,并返回已处理的游戏。

extern crate pobsd_parser;
use pobsd_parser::{Parser, ParserResult, ParsingMode};

// Create a paser in strict mode
let parser = Parser::new(ParsingMode::Strict);
// Load the database
let parser_result = parser.load_from_file("/path/to/games.db")
       .expect("Problem trying to open the file");
let games = match parser_result {
    ParserResult::WithoutError(games) => games,
    ParserResult::WithError(games, _) => games,
};

解析器还可以从 &str 或 String 加载。

extern crate pobsd_parser;
use pobsd_parser::{Parser, ParserResult, ParsingMode};

let games = r#"Game	AaaaaAAaaaAAAaaAAAAaAAAAA!!! for the Awesome
Cover	AaaaaA_for_the_Awesome_Cover.jpg
Engine
Setup
Runtime	HumblePlay
Store	https://www.humblebundle.com/store/aaaaaaaaaaaaaaaaaaaaaaaaa-for-the-awesome
Hints	Demo on HumbleBundle store page
Genre
Tags
Year	2011
Dev
Pub
Version
Status
Added	1970-01-01
Updated	1970-01-01
IgdbId	12
Game	The Adventures of Mr. Hat
Cover
Engine	godot
Setup
Runtime	godot
Store	https://store.steampowered.com/app/1869200/The_Adventures_of_Mr_Hat/
Hints
Genre	Puzzle Platformer
Tags	indie
Year
Dev	AX-GAME
Pub	Fun Quarter
Version	Early Access
Status	runs (2022-05-13)
Added	2022-05-13
Updated	2022-05-13
IgdbId	13"#;

let parser = Parser::default();
let games = match parser.load_from_string(games) {
    ParserResult::WithoutError(games) => games,
    // Should not panic since the data are fine
    ParserResult::WithError(_, _) => panic!(),
};

依赖关系

~2.8–4.5MB
~87K SLoC