1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
//! Povides a [`GameDataBase`], [`GameFilter`] and a [`QueryResult`] structs,
//! each struct providing a set of methods to interrogate the PlayOnBSD
//! database in a friendly manner, without having to deal with a SQL
//! database.
//!
//! The [`GameDataBase`] is created from a vector of [`models::Game`]
//! usually obtained from the PlayOnBSD database using the [`parsing::Parser`].
//!
//! ## Examples
//! Create a GameDataBase from the PlayOnBSD database.
//! ```no_run
//! use libpobsd::{GameDataBase, Game, Parser, ParserResult, ParsingMode};
//! // loading the games from the PlayOnBSD database
//! let games = match Parser::new(ParsingMode::Strict)
//! .load_from_file("games.db")
//! .expect("Could not open the file")
//! {
//! ParserResult::WithoutError(games) => games,
//! ParserResult::WithError(games, _) => games,
//! };
//! GameDataBase::new(games);
//!```
//! Get a game by name.
//! ```no_run
//! # use libpobsd::{GameDataBase, Game, Parser, ParserResult, ParsingMode};
//! # let games = match Parser::new(ParsingMode::Strict)
//! # .load_from_file("games.db")
//! # .expect("Could not open the file")
//! # {
//! # ParserResult::WithoutError(games) => games,
//! # ParserResult::WithError(games, _) => games,
//! # };
//! # let db = GameDataBase::new(games);
//! use libpobsd::SearchType;
//! let st = SearchType::CaseSensitive;
//! if let Some(game) = db.get_game_by_name("My Game", &st){
//! assert_eq!(&game.name, "My Game");
//! };
//!```
//! Get all games associated to a given tag.
//! ```no_run
//! # use libpobsd::{GameDataBase, Game, Parser, ParserResult, ParsingMode};
//! # let games = match Parser::new(ParsingMode::Strict)
//! # .load_from_file("games.db")
//! # .expect("Could not open the file")
//! # {
//! # ParserResult::WithoutError(games) => games,
//! # ParserResult::WithError(games, _) => games,
//! # };
//! # let db = GameDataBase::new(games);
//! let game_query = db.match_games_by_tag("indie");
//! // check the first element of the query
//! if let Some(game) = game_query.get(0) {
//! if let Some(tags) = &game.tags {
//! assert!(tags.join(" ").contains("indie"));
//! };
//! };
//!```
pub
pub use GameDataBase;
pub use GameFilter;
pub use QueryResult;
/// Representation of items such as pub, tags, etc.
pub type Item = String;
/// Define the type of search performed. It can be either case sensitive or
/// cas insensitive (default).