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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
//! msq is a rust library implementation of the legacy [Master Server Query Protocol](https://developer.valvesoftware.com/wiki/Master_Server_Query_Protocol).
//!
//! # Usage
//! Add this to your `Cargo.toml`:
//! ```toml
//! [dependencies]
//! msq = "0.2"
//! ```
//! If you want to get straight from the latest master branch:
//! ```toml
//! [dependencies]
//! msq = { git = "https://github.com/nullsystem/msq-rs.git" }
//! ```
//!
//! To get started using msq, see the [Quick Start](#quick-start) section below.
//!
//! ## Features
//! By default, both async [`MSQClient`] and non-async/blocking [`MSQClientBlock`] are included.
//! However, if you want to include either only async or only non-async, you could do the following:
//!
//! * For async/[`MSQClient`] **only**:
//! ```toml
//! [dependencies]
//! msq = { version = "0.2", default-features = false, features = ["async"] }
//! ```
//! * For non-async/[`MSQClientBlock`] **only**:
//! ```toml
//! [dependencies]
//! msq = { version = "0.2", default-features = false, features = ["non-async"] }
//! ```
//!
//! # Quick Start
//! The following example covers the primary functionalities of this library
//! and should be quick on understanding how to use the library.
//!
//! ## Async version
//! ```rust
//! use msq::{MSQClient, Region, Filter};
//! use std::io::Result;
//!
//! #[tokio::main]
//! async fn main() -> Result<()> {
//! // Startup the client
//! let mut client = MSQClient::new().await?;
//!
//! // Connect to the master server
//! client.connect("hl2master.steampowered.com:27011").await?;
//!
//! // Maximum amount of servers we wanted to query
//! client.max_servers_on_query(256);
//!
//! let servers = client
//! .query(Region::Europe, // Restrict query to Europe region
//! Filter::new() // Create a Filter builder
//! .appid(240) // appid of 240 (CS:S)
//! .nand() // Start of NAND special filter
//! .map("de_dust2") // Map is de_dust2
//! .empty(true) // Server is empty
//! .end() // End of NAND special filter
//! .gametype(&vec!["friendlyfire", "alltalk"])).await?;
//!
//! // nand filter excludes servers that has de_dust2 as
//! // its map and is empty
//!
//! // nand and nor are both special filters, both closed by
//! // using the end method
//!
//! Ok(())
//! }
//! ```
//!
//! ## Blocking/Non-Async version
//! If you don't want to use async, then a blocking version is available.
//! The methods functionalities and names should matches its async
//! counterpart.
//! ```rust
//! use msq::{MSQClientBlock, Region, Filter};
//! use std::io::Result;
//!
//! fn main() -> Result<()> {
//! let mut client = MSQClientBlock::new()?;
//! client.connect("hl2master.steampowered.com:27011")?;
//! client.max_servers_on_query(256);
//!
//! let servers = client
//! .query(Region::Europe, // Restrict query to Europe region
//! Filter::new() // Create a Filter builder
//! .appid(240) // appid of 240 (CS:S)
//! .nand() // Start of NAND special filter
//! .map("de_dust2") // Map is de_dust2
//! .empty(true) // Server is empty
//! .end() // End of NAND special filter
//! .gametype(&vec!["friendlyfire", "alltalk"]))?;
//! Ok(())
//! }
//! ```
pub use crateFilter;
pub use crateRegion;
pub use crateMSQClient;
pub use crateMSQClientBlock;