1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#![feature(proc_macro)]
extern crate hyper;
extern crate serde_json;
#[macro_use]
extern crate serde_derive;
mod label;
mod master;
mod artist;
mod release;
mod pagination;
mod data_structures;
use label::LabelQuery;
use master::MasterQuery;
use artist::ArtistQuery;
use release::ReleaseQuery;
use hyper::Client;
use hyper::client::Response;
use hyper::header::UserAgent;
pub struct Discogs {
api_endpoint: String,
key: Option<String>,
secret: Option<String>,
user_agent: String,
rate_limit: u32,
client: Client,
}
impl Discogs {
pub fn new(user_agent: String) -> Self {
Discogs {
api_endpoint: "https://api.discogs.com".to_string(),
key: None,
secret: None,
user_agent: user_agent,
rate_limit: 240,
client: Client::new(),
}
}
pub fn key(&mut self, key: String) -> &mut Self {
self.key = Some(key);
self
}
pub fn secret(&mut self, secret: String) -> &mut Self {
self.secret = Some(secret);
self
}
pub fn rate_limit(&mut self, rate_limit: u32) -> &mut Self {
self.rate_limit = rate_limit;
self
}
pub fn api_endpoint(&mut self, api_endpoint: String) -> &mut Self {
self.api_endpoint = api_endpoint;
self
}
pub fn query(&self, url: String) -> Option<Response> {
self.client
.get(&url[..])
.header(UserAgent(self.user_agent.clone()))
.send()
.ok()
}
pub fn label(&self) -> LabelQuery {
LabelQuery::new(self)
}
pub fn master(&self) -> MasterQuery {
MasterQuery::new(self)
}
pub fn artist(&self) -> ArtistQuery {
ArtistQuery::new(self)
}
pub fn release(&self) -> ReleaseQuery {
ReleaseQuery::new(self)
}
}
#[cfg(test)]
mod tests {
use Discogs;
use release::ReleaseQuery;
#[test]
fn discogs_inst() {
let l: Discogs = Discogs::new("useragent".to_owned());
let mut at: ReleaseQuery = ReleaseQuery::new(&l);
for i in 950..1020 {
print!("{}: ", i);
if let Some(r) = at.id(i).call() {
println!("OK");
} else {
println!("ERR");
}
}
}
}