* Implement generic response as enum * First draft of implementing into_common() * Make common response type generic * Use macros and generics to reduce repetition * [Games] Add dynamically dispatched CommonResponse trait This adds two traits: "CommonResponse", and "CommonPlayer", when the generic game query function returns a response it returns a pointer to its original response type that implements "CommonResponse". Both common traits require that "as_original()" be implemented, this returns an enum containing a pointer to the original type. Both traits have a concrete method "as_json()" that returns a struct containing data fetched from all of its methods as. This struct implements serde and can hence be serialized as required. The traits require a few other methods be implemented, those being the fields that are common across all types. All other methods have a default None implementation so that each response type only needs to implement methods for fields that it has. * [Game] Implement common traits for JCMP2 response * [Fmt] Run cargo fmt * Fix doctest failing * Run cargo fmt |
||
|---|---|---|
| .github/workflows | ||
| examples | ||
| src | ||
| .gitignore | ||
| .pre-commit-config.yaml | ||
| .rustfmt.toml | ||
| Cargo.toml | ||
| CHANGELOG.md | ||
| GAMES.md | ||
| LICENSE.md | ||
| PROTOCOLS.md | ||
| README.md | ||
| RESPONSES.md | ||
| SERVICES.md | ||
| VERSIONS.md | ||
rust-GameDig

Warning: This project goes through frequent API breaking changes and hasn't been thoroughly tested.
rust-GameDig is a game servers/services query library that fetches the availability and details of those, this library brings what node-GameDig does, to pure Rust!
Community
Checkout the GameDig Community Discord Server here.
Note that it isn't be a replacement for GitHub issues, if you have found a problem
within the library or want to request a feature, it's better to do so here rather than
on Discord.
Usage
Minimum Supported Rust Version is 1.60.0 and the code is cross-platform.
Pick a game/service/protocol (check the GAMES, SERVICES and PROTOCOLS files to see the currently supported ones), provide the ip and the port (be aware that some game servers use a separate port for the info queries, the port can also be optional if the server is running the default ports) then query on it.
Team Fortress 2 query example:
use gamedig::games::tf2;
fn main() {
let response = tf2::query(&"127.0.0.1".parse().unwrap(), None);
// None is the default port (which is 27015), could also be Some(27015)
match response { // Result type, must check what it is...
Err(error) => println!("Couldn't query, error: {}", error),
Ok(r) => println!("{:#?}", r)
}
}
Response (note that some games have a different structure):
{
protocol: 17,
name: "Team Fortress 2 Dedicated Server.",
map: "ctf_turbine",
game: "tf2",
appid: 440,
players_online: 0,
players_details: [],
players_maximum: 69,
players_bots: 0,
server_type: Dedicated,
has_password: false,
vac_secured: true,
version: "7638371",
port: Some(27015),
steam_id: Some(69753253289735296),
tv_port: None,
tv_name: None,
keywords: Some("alltalk,nocrits"),
rules: [
"mp_autoteambalance": "1",
"mp_maxrounds": "5",
//....
]
}
Want to see more examples? Checkout the examples folder.
Documentation
The documentation is available at docs.rs.
Curious about the history and what changed between versions? Everything is in the CHANGELOG file.
Contributing
If you want see your favorite game/service being supported here, open an issue, and I'll prioritize it (or do a pull request if you want to implement it yourself)!