mirror of
https://github.com/tribufu/rust-gamedig
synced 2026-05-06 15:27:28 +00:00
* Add rich error type with source and backtrace
Adds a rich error type that will take a backtrace and allow capturing
the source of the error. The best way to use this is with the included
helpers that will automatically capture the backtrace and convert the
source error:
```
GDRichError::packet_bad_from_into("Reason packet was bad")
```
* [Crate] Bump MSRV to 1.65.0
This is required for backtraces in rich errors.
* Remove leftover debug logging
* [Errors] Replace variant overloads with single .rich method on kind enum
This overhaul replaces the exhaustive impls of each variant as multiple
methods on the rich error type with a singular .rich() method on the
kind enum. This consumes the variant and converts it to a rich error
with a source (.into() can be used if a source is not needed).
I also took the liberty of replacing all usages with the this new method
as I saw fit (adding various error messages) and converting a few
PacketBad errors to TypeParse errors when they are the result of parse
failing.
* Fix problem with rustdoc
* Remove BadGame's owned string
* Rename GDError to GDErrorKind
* Rename GDRichError to GDError
* Remove error impl from GDErrorKind
* Fix tests not passing
* Use error context everywhere map_err is used
* Improve GDError display formatter
* Add tests for new error type
68 lines
3 KiB
Markdown
68 lines
3 KiB
Markdown
# rust-GameDig [](https://github.com/gamedig/rust-gamedig/actions) [](https://crates.io/crates/gamedig) [](https://crates.io/crates/gamedig) [](LICENSE.md)
|
|
|
|
**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](https://github.com/gamedig/node-gamedig)** does, to pure Rust!
|
|
|
|
## Community
|
|
Checkout the GameDig Community Discord Server [here](https://discord.gg/NVCMn3tnxH).
|
|
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.65.0` and the code is cross-platform.
|
|
|
|
Pick a game/service/protocol (check the [GAMES](GAMES.md), [SERVICES](SERVICES.md) and [PROTOCOLS](PROTOCOLS.md) 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](https://store.steampowered.com/app/440/Team_Fortress_2/) query example:
|
|
```rust
|
|
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):
|
|
```json5
|
|
{
|
|
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](examples) folder.
|
|
|
|
## Documentation
|
|
The documentation is available at [docs.rs](https://docs.rs/gamedig/latest/gamedig/).
|
|
Curious about the history and what changed between versions? Everything is in the [CHANGELOG](CHANGELOG.md) 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)!
|