* The map endpoints return an HTTP 404 error in case of unknown or
out-of-bound locations
* The forecast endpoint with an address returns an HTTP 404 with error
JSON in case geocoding fails
* The forecast endpoints return the errors per metric in the `errors`
field of the forecast
* Implement `Display` for `Metric`
* Use a `BTreeMap` to have an ordered `errors` field/object
* Also log the errors to the console
* Update the tests
* Document the errors that can occur
* Add dependency on the `thiserror` crate
* Add a global `Error` type, but also `maps::Error` and
`providers::combined::MergeError` for convenience
* Add matching `Result` types that default to the respective `Error`
type
* Refactor code to yield all kinds of error variants
* Add FIXMEs where library errors still need to be handled
* Remove documentation that explained why `None` was returned, this is
captured in the error now
The `RetrievedMaps` struct captures the image and its metadata:
the last modification time and the base timestamp for the maps.
* No longer store the last modification time, called "stamp" before,
separately in the `Maps` struct
* Update methods on `Maps` to use the `RetrievedMaps` structs and
the timestamp base in particular for sampling and map marking
* Update the `MapsRefresh` implemention to use the last modification
time
* Rename some variables from `map` to `image` in the helper functions
for consistency
* Update tests and documentation
For example, if there are 24 valid pollen samples and 20 valid air
quality items, the maximum pollen sample could be de 23th, but the
resulting combined series will only cover 20 items. So, it is should not
return that, but only look in the first 20 pollen samples for the
maximum sample.
If the sample/item series are empty, the function already returns
`None`, so the tuple values are always `Some(_)` which makes the
`Option` type redundant.
* Check that merging fails if the samples/items are too far apart
* Check that nothing is returned if either of the lists is empty
* Check that if either series is shifted, they are merged correctly
* Make the combined provider keep track of the AQI and pollen maximum
value
* Extend the `Forecast` struct with the `aqi_max` and `pollen_max`
fields
* Fill the `aqi_max` and `pollen_max` fields when the PAQI metric is
selected
* Update the documentation
* Extend the tests