This commit adds support for alternative Listenbrainz hosts.
L10 defines the most used official host for Listenbrainz.
I have refactored the Client struct to have the `api_root_url` field.
This is automatically set to the value L10 defines, when a Client is
instantiated with `new()`. On the invocation of `client_with_url(url:
&str)`, the `api_root_url` field is set to the Listenbrainz instance
API root URL passed to the function.
The 1:1 functions <-> API methods have been modified to use
`self.api_root_url` as the base of the `format!()` macro invoked, rather
than the global constant of `API_ROOT_URL`.
This commit has been tested with the examples, and appears to be
functional.
Fixes#2.
Signed-off-by: Dom Rodriguez <shymega@shymega.org.uk>
Add the `rate_limit` field to all response types,
which contains rate limiting information such as
maximum and remaining requests in the current
time frame, as well as when the next time frame
starts.
All response types now also implement the `ResponseType`
trait (internal for now). Currently this trait allows
converting from `ureq::Response` to the response type,
by extracting rate limiting information from the response
headers and deserializing the response body into the
response type.
The ListenBrainz struct is a more ergonomic client
than raw::Client. It supports authentication using
a ListenBrainz token. Currently, it allows submitting
"listened" and "now playing" requests to the API
in a more convenient way than manually creating all
request data.
The ListenBrainz API returns 204 and an empty document
when there are no statistics, which can't be parsed as
JSON. Therefore the return types of statistics endpoints
now includes an Option to reflect this.