use data_structures::*;
#[cfg(test)]
use mockito::SERVER_URL;
#[cfg(test)]
use super::*;
#[cfg(test)]
pub const API_URL: &'static str = mockito::SERVER_URL;
#[cfg(not(test))]
pub const API_URL: &'static str = "https://api.discogs.com";
pub const API_RATE_LIMIT: u32 = 240;
pub struct Discogs {
api_endpoint: String,
user_agent: String,
key: Option<String>,
secret: Option<String>,
rate_limit: u32,
}
impl Discogs {
pub fn new(user_agent: &str) -> Self {
Discogs {
api_endpoint: API_URL.to_owned(),
key: None,
secret: None,
user_agent: user_agent.to_owned(),
rate_limit: API_RATE_LIMIT,
}
}
pub fn key(&mut self, key: &str) -> &mut Self {
self.key = Some(key.to_owned());
self
}
pub fn secret(&mut self, secret: &str) -> &mut Self {
self.secret = Some(secret.to_owned());
self
}
pub fn artist(&mut self, id: u32) -> ArtistQueryBuilder {
ArtistQueryBuilder::new(id,
self.api_endpoint.clone(),
self.user_agent.clone(),
self.key.clone(),
self.secret.clone())
}
pub fn label(&mut self, id: u32) -> LabelQueryBuilder {
LabelQueryBuilder::new(id,
self.api_endpoint.clone(),
self.user_agent.clone(),
self.key.clone(),
self.secret.clone())
}
pub fn release(&mut self, id: u32) -> ReleaseQueryBuilder {
ReleaseQueryBuilder::new(id,
self.api_endpoint.clone(),
self.user_agent.clone(),
self.key.clone(),
self.secret.clone())
}
pub fn master(&mut self, id: u32) -> MasterQueryBuilder {
MasterQueryBuilder::new(id,
self.api_endpoint.clone(),
self.user_agent.clone(),
self.key.clone(),
self.secret.clone())
}
pub fn search(&mut self) -> SearchQueryBuilder {
SearchQueryBuilder::new(self.api_endpoint.clone(),
self.user_agent.clone(),
self.key.clone(),
self.secret.clone())
}
}
#[cfg(test)]
mod tests {
use discogs::Discogs;
#[test]
fn user_agent_test() {
let client = Discogs::new("USER_AGENT");
assert_eq!(client.user_agent, "USER_AGENT".to_string());
}
#[test]
fn key_test() {
let mut client = Discogs::new("USER_AGENT");
client.key("CLIENT_KEY");
assert_eq!(client.user_agent, "USER_AGENT".to_string());
assert_eq!(client.key, Some("CLIENT_KEY".to_string()));
}
#[test]
fn secret_test() {
let mut client = Discogs::new("USER_AGENT");
client.secret("CLIENT_STRING");
assert_eq!(client.user_agent, "USER_AGENT".to_string());
assert_eq!(client.secret, Some("CLIENT_STRING".to_string()));
}
}