2022-06-22 11:42:16 +02:00
|
|
|
module aur
|
|
|
|
|
|
|
|
import net.urllib
|
|
|
|
import net.http
|
|
|
|
import json
|
|
|
|
|
|
|
|
pub struct Client {
|
2022-06-22 11:51:03 +02:00
|
|
|
url string = aur_rpc_url
|
2022-06-22 11:42:16 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
pub fn new() &Client {
|
2022-06-22 11:51:03 +02:00
|
|
|
return &Client{}
|
2022-06-22 11:42:16 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
pub fn new_with_url(url string) &Client {
|
2022-06-22 11:51:03 +02:00
|
|
|
if !url.ends_with('/') {
|
|
|
|
return &Client{
|
|
|
|
url: '$url/'
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return &Client{
|
|
|
|
url: url
|
|
|
|
}
|
2022-06-22 11:42:16 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
struct SuccessResponse {
|
2022-06-22 11:51:03 +02:00
|
|
|
result_count int [json: resultCount]
|
|
|
|
results []Package
|
2022-06-22 11:42:16 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
fn (c Client) request(params map[string]string) ?[]Package {
|
2022-06-22 11:51:03 +02:00
|
|
|
mut params_escaped := map[string]string{}
|
|
|
|
|
|
|
|
for k, v in params {
|
|
|
|
params_escaped[k] = urllib.query_escape(v)
|
|
|
|
}
|
2022-06-22 11:42:16 +02:00
|
|
|
|
2022-06-22 11:51:03 +02:00
|
|
|
params_str := params_escaped.keys().map('$it=${params[it]}').join('&')
|
2022-06-22 11:42:16 +02:00
|
|
|
|
2022-06-22 11:51:03 +02:00
|
|
|
url := '$c.url?$params_str'
|
2022-06-22 11:42:16 +02:00
|
|
|
|
2022-06-22 11:51:03 +02:00
|
|
|
res := http.get(url)?
|
2022-06-22 11:42:16 +02:00
|
|
|
|
2022-06-22 11:51:03 +02:00
|
|
|
if res.status_code < 200 || res.status_code >= 300 {
|
|
|
|
// temporary
|
|
|
|
return error('error')
|
|
|
|
}
|
2022-06-22 11:42:16 +02:00
|
|
|
|
2022-06-22 11:51:03 +02:00
|
|
|
data := json.decode(SuccessResponse, res.body)?
|
2022-06-22 11:42:16 +02:00
|
|
|
|
2022-06-22 11:51:03 +02:00
|
|
|
return data.results
|
2022-06-22 11:42:16 +02:00
|
|
|
}
|