#![deny(missing_docs)]
use crate::error::Error;
pub use celes;
use reqwest::{header, RequestBuilder};
pub mod error;
pub mod primitive;
pub mod request;
pub mod resource;
pub mod time;
#[macro_export]
macro_rules! cast {
($type:path, $field:expr) => {
match $field {
$type { data } => Some(data),
_ => None,
}
};
}
#[derive(Clone)]
pub struct ApiClient {
client: reqwest::Client,
storefront_country: celes::Country,
localization: String,
}
impl ApiClient {
pub fn new(
developer_token: &str,
media_user_token: &str,
storefront_country: celes::Country,
) -> Result<ApiClient, Error> {
let mut headers = header::HeaderMap::new();
let mut authorization_header =
header::HeaderValue::from_str(&format!("Bearer {}", developer_token))?;
authorization_header.set_sensitive(true);
headers.insert(header::AUTHORIZATION, authorization_header);
let mut media_user_token_header = header::HeaderValue::from_str(media_user_token)?;
media_user_token_header.set_sensitive(true);
headers.insert("media-user-token", media_user_token_header);
let client = reqwest::Client::builder()
.default_headers(headers)
.build()?;
Ok(ApiClient {
client,
storefront_country,
localization: String::from("en-US"),
})
}
pub fn get_storefront_country(&self) -> celes::Country {
self.storefront_country
}
pub fn get_localization(&self) -> &str {
self.localization.as_str()
}
pub fn set_localization(&mut self, localization: &str) {
self.localization = localization.to_string();
}
pub fn get(&self, endpoint: &str) -> RequestBuilder {
self.client
.get(format!("https://api.music.apple.com{}", endpoint))
.query(&[("art[url]", "f")])
}
pub fn post(&self, endpoint: &str) -> RequestBuilder {
self.client
.post(format!("https://api.music.apple.com{}", endpoint))
.query(&[("art[url]", "f")])
}
pub fn put(&self, endpoint: &str) -> RequestBuilder {
self.client
.put(format!("https://api.music.apple.com{}", endpoint))
.query(&[("art[url]", "f")])
}
pub fn delete(&self, endpoint: &str) -> RequestBuilder {
self.client
.delete(format!("https://api.music.apple.com{}", endpoint))
.query(&[("art[url]", "f")])
}
}