pub struct Client { /* private fields */ }Expand description
A client that waits its turn and says who it is.
Implementations§
Source§impl Client
impl Client
Sourcepub fn new(user_agent: impl Into<String>, interval: Duration) -> Client
pub fn new(user_agent: impl Into<String>, interval: Duration) -> Client
A client for one service.
user_agent is not decoration: MusicBrainz requires a descriptive
one carrying a way to contact whoever wrote the program, and throttles
anonymous or generic callers as a single shared pool — so a library
that sent ureq/3.4 would be sharing a rate limit with every other
program that could not be bothered either. Build it with
Client::identify.
Sourcepub fn identify(name: &str, version: &str, contact: &str) -> String
pub fn identify(name: &str, version: &str, contact: &str) -> String
The User-Agent MusicBrainz asks for: name/version ( contact ).
Sourcepub fn get_json(&mut self, url: &str) -> Result<Json, Error>
pub fn get_json(&mut self, url: &str) -> Result<Json, Error>
Fetches a URL and parses the answer as JSON.
Blocks for as long as the rate requires before sending. That is the whole point: a caller that could forget to wait is a caller that will. Bodies over 32 MiB and JSON that is not UTF-8 are refused.
Sourcepub fn get_bytes(&mut self, url: &str) -> Result<Vec<u8>, Error>
pub fn get_bytes(&mut self, url: &str) -> Result<Vec<u8>, Error>
Fetches a URL and hands back the body as it came.
The one thing this client downloads that is not an answer to a question: an image. It waits its turn like everything else.
At most 32 MiB are accepted. The response reader has an explicit limit rather than relying on a dependency default; one extra byte detects oversized bodies even when the server omits their length.