summaryrefslogtreecommitdiff
path: root/src/client.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/client.rs')
-rw-r--r--src/client.rs50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/client.rs b/src/client.rs
new file mode 100644
index 0000000..5c6858b
--- /dev/null
+++ b/src/client.rs
@@ -0,0 +1,50 @@
+//! Deezer client.
+use std::error::Error;
+
+use serde::Deserialize;
+
+/// A user.
+#[derive(Debug, Deserialize)]
+pub struct User
+{
+ /// The user ID.
+ pub id: u32,
+
+ /// The user name.
+ pub name: String,
+}
+
+/// Deezer client.
+#[derive(Default)]
+pub struct DeezerClient
+{
+ client: reqwest::Client,
+ api_url: &'static str,
+}
+
+impl DeezerClient
+{
+ /// Creates a new Deezer client.
+ #[must_use]
+ pub fn new() -> Self
+ {
+ Self {
+ client: reqwest::Client::new(),
+ api_url: "https://api.deezer.com",
+ }
+ }
+
+ /// Returns the authenticated user.
+ pub async fn get_me(&self) -> Result<User, Box<dyn Error + Send + Sync>>
+ {
+ let user = self
+ .client
+ .get(format!("{}/user/me", self.api_url))
+ .send()
+ .await?
+ .json::<User>()
+ .await?;
+
+ Ok(user)
+ }
+}