summaryrefslogtreecommitdiff
path: root/examples/playlists/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'examples/playlists/main.rs')
-rw-r--r--examples/playlists/main.rs63
1 files changed, 63 insertions, 0 deletions
diff --git a/examples/playlists/main.rs b/examples/playlists/main.rs
new file mode 100644
index 0000000..fed5b73
--- /dev/null
+++ b/examples/playlists/main.rs
@@ -0,0 +1,63 @@
+use std::error::Error;
+
+use anyhow::Context;
+use config::Config;
+use deez::auth::{request_access_token, AuthPromptHandler};
+use deez::client::DeezerClient;
+use serde::Deserialize;
+
+#[derive(Deserialize)]
+struct Settings
+{
+ app_id: u32,
+ secret_key: String,
+ address: String,
+ port: u16,
+ uri_scheme: String,
+}
+
+#[tokio::main]
+async fn main() -> Result<(), Box<dyn Error + Send + Sync>>
+{
+ let settings = Config::builder()
+ .add_source(config::File::with_name("examples/playlists/Settings"))
+ .build()
+ .with_context(|| "Failed to read settings")?
+ .try_deserialize::<Settings>()
+ .with_context(|| "Invalid settings")?;
+
+ let auth_code_prompt_info = AuthPromptHandler::run(
+ settings.app_id,
+ settings.address,
+ settings.port,
+ settings.uri_scheme,
+ )
+ .await?;
+
+ println!("{}", auth_code_prompt_info.auth_prompt_url);
+
+ let auth_code = auth_code_prompt_info.handler.await??;
+
+ println!("Retrieved authentication code '{}'", auth_code);
+
+ let access_token =
+ request_access_token(settings.app_id, settings.secret_key, auth_code).await?;
+
+ println!(
+ "Retrieved access token '{}' which expires in {} seconds",
+ access_token.access_token,
+ access_token.expires.as_secs()
+ );
+
+ let client = DeezerClient::new(access_token);
+
+ let me = client.get_me().await?;
+
+ println!("{:#?}", me);
+
+ let playlists = client.get_user_playlists(me.id).await?;
+
+ println!("Playlists: {:#?}", playlists);
+
+ Ok(())
+}