* Add retry count to TimeoutSettings
This can be used to specify how many times to re-send requests that
fail. The default value is "1" so the if the first request fails, 1 more
attempt will be made.
* Add retries to valve queries
* [Protocol] &Optional<TimeoutSettings> add get_retries_or_default
Allow fetching the number of retries or the default retries value from a
borrowed optional TimeoutSettings.
* [Protocol] Add retries to minecraft protocol
* [Protocol] Add retries to quake
* [Protocol] Add retries to gamespy
* [Protocol] Update TimeoutSettings docs, and change default retries to 0
* Remove logging from retry_on_timeout
* [Protocol] TimeoutSettings make retries non-optional
* [Protocol] Move retry logic into lower level query functions
Retries are now implemented as wrappers on the single function that
would need to be retried on timeout.
In order to avoid cloning of TimeoutSettings, Socket::apply_timeouts()
was changed to accept a borrowed TimeoutSettings. And extra helpers were
added to the TimeoutSettings impl to reduce repetition.
* [Examples] Add retries to the generic example
* Also retry on PacketSend error
Sending packets could also timeout and until error_generic_member_access
is stable we have no way of determining the type of the underlying
`std::error::Error`.
* Add retry unit tests
* [Docs] Update changelog
* 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
Replace usages of Ipv4Addr with IpAddr which allows the use of either Ipv4 or Ipv6.
This patch essentially consists of running:
"sed -i 's/Ipv4Addr/IpAddr/g' src/**/*.rs examples/*"
and fixing the errors.
* [Service] Add initial files
* [Service] Add initial request packet
* [Service] Add filters
* [Service] Some clippy improvements
* [Service] Make query a vector of ipv4addr and port
* [Service] Add complete and singular query
* [Crate] Update md files
* [Service] Add docs and clippy adjustments
* [Service] Add hasTags and fix filters
* [Service] Use let some instead of match
* [Service] Add other filters
* [Service] Add nor and nand filters
* [Service] Remove 0.0.0.0:0 from query
* [Service] Remove dev testing test
* [Service] Add valve_master_server_query example