* tidy: Move TimeoutSettings out of protocol types
* tidy: Move game type to a types file
* tidy: Move generic query functions to own file
* tidy: Move ExtraRequestSettings to game types
* tidy: Move generic query functions into games module
* Revert "tidy: Move ExtraRequestSettings to game types"
This reverts commit aa0d23fc2acc12d68f03265a9caff6f98bf25054.
* Revert "tidy: Move TimeoutSettings out of protocol types"
This reverts commit 7ee10711ed11f17cc06565d4cc9102040d53a319.
* tidy: Re-export types needed for query at the root
* Add/Update badge
---------
Co-authored-by: GitHub Action <action@github.com>
* [Test] Add best effort test to validate game ID rules
An attempt to implement the rules specified in #108 as a programmatic
test.
* [Test] Refactor ID rules to check if a mod exists after - in game name
This allows fivem to pass the check following rule 8, but could also
cause a false pass in some cases.
* [Test] Add unit tests for ID rule checker
Adds unit tests based on the examples in CONTRIBUTING.md to confirm in
those cases we would allow ID to pass. However these tests don't check
any error cases.
* test/id: Correctly extract protocol names
* games/defs: Fix unreal tournament IDs
* tests: Require game definitions to run ID tests
* tests: Improve comments on ID tests
* tests/id: Combine - seperated numbers
* games/defs: Fix darkest hour ID
* Add/Update badge
---------
Co-authored-by: GitHub Action <action@github.com>
* protocols: Fix building without the "games" feature
* crate/lib: Add required features for examples
This prevents cargo from running the examples if the required features
aren't enabled.
* ci: Run if ANY Cargo.toml files are changed
* ci: Make sure to run unit tests
* ci: Separate checks for library and CLI
* ci: Add slightly better comments
* ci: Only run deeper tests for CLI or LIB when their files were changed
* ci: Improve act arguments for testing actions locally
* ci: Fix pre-commit not running tests
* ci: Only update shared cache after the initial build
* ci: Make sure that rustup downloads get cached
* tidy: Clean up file formatting
* ci: Fix issue with audit
* ci: Update node coverage badge to work without games.txt
Fixes#155 using a new node script that should be more robust than the
old shell script.
* ci: Change badge cron time to less common time
By doing at a less common time we should reduce action time usage as
the runners will be under less load.
* Add/Update badge
* ci: Improve node-badge script
Co-Authored-By: CosminPerRam <cosmin.p@live.com>
* ci: Run node badge action if script changes
* ci: Update node badge path for workspaces
* ci: Revert loading games from index in node badge script
---------
Co-authored-by: GitHub Action <action@github.com>
Co-authored-by: CosminPerRam <cosmin.p@live.com>
* WIP: Add unreal2 protocol
* Add/Update badge
* protocols/unreal2: Update doc comments and TODOs
* protocols/unreal2: Don't pre-allocate as many bot players
* protocols/unreal2: Use "encoding-rs" for decoding unreal2 strings
* Add/Update badge
* protocols/unreal2: Add constants for player pre-allocation.
Also improve some doc comments and update PACKET_SIZE.
* protocols/unreal2: Early break when enough players have been parsed
Add a fast-path to avoid waiting for packet timeout when we have parsed
as many players as specified in the server info packet.
* protocols/unreal2: Use HashSet to store mutators
* protocols/unreal2: Handle server sending multiple values for a rule
* protocols/unreal2: Add GatheringSettings to control what to query
GatheringSettings allows skipping querying rules and/or players which
can make the query return much faster. This also required moving each
individual query into its own helper.
* protocols/unreal2: Add more derives to types
* protocols/unreal2: Simplify ServerInfo::parse()
Co-Authored-By: CosminPerRam <cosmin.p@live.com>
* Docs: Add unreal2 protocol documentation
I used a website to generate the markdown RESPONSES table, the save file
from this website is included to make updating the table easier in the
future.
https://www.tablesgenerator.com/markdown_tables
* Add/Update badge
* protocols/unreal2: Use the correct encoding for UCS2 strings
* Docs: Remove unnecessary TGN file
---------
Co-authored-by: GitHub Action <action@github.com>
Co-authored-by: CosminPerRam <cosmin.p@live.com>
* Fix wrongly named game ids of l4d, l4d2 and q3a
* Specify how edition/protocol names are appended to games, rule 7
* Clarify rule 6 regarding numbers
* Add/Update badge
* Fix rule 7 misswording
* Fix 7 Days to Die
* List id changes in the changelog
* Forgot to fix test
* Apply Douile suggestion regarding rule 6
Co-authored-by: Tom <25043847+Douile@users.noreply.github.com>
* Fix typo on rule 6 and wrap text
* Clarify further rule 7
---------
Co-authored-by: GitHub Action <action@github.com>
Co-authored-by: Tom <25043847+Douile@users.noreply.github.com>
* Apply new id naming
* Fix failing CI on all features
* Update changelog
* Rename tf2 example to teamfortress2
* Fix typo in steamapp game names
* Rename minecraft legacy versions
* Apply CI node badge fix by Douile
* Add/Update badge
---------
Co-authored-by: GitHub Action <action@github.com>
* [CI] Fix permissions on guest prs
* Revert last commit
* Revert last commit
* Don't specify branch name in pr target
* Properly space on line
* Specify branch
* Add quotes to labeler points
* Remove the quotes on files in labeler.yml
* 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
* [CI] Improve checks
- Adds .actrc so CI actions can be tested locally
- Adds testing for variants of features so changes that break feature
sets like disabling games can be caught
- Adds more of the CI tests to pre-commit
* [CI] Add more feature sets to test
* [CI] Check github actions before comitting
Requires act: https://github.com/nektos/act
* [CI] Add caching between builds
* [CI] Add caching everywhere
* [CI] Add more feature tests
* [CI] Add YAML schemas
* [CI] Disable audit when running locally
This is needed because the audit action requires a GITHUB_TOKEN which we
don't have when running locally.
* [CI] Move clippy to own job and use action that annotates PRs
Using actions-rs/clippy-check means that PRs will problems will
automatically have the relevant lines annotated
* [CI] Don't unnecessarily cache targets for fmt