use azure_core::{ error::{Error, ErrorKind}, new_http_client, }; use azure_identity::device_code_flow::start; use futures::StreamExt; use std::env::var; const SCOPES: &[&str; 2] = &[".default", "offline_access"]; #[tokio::main] async fn main() -> azure_core::Result<()> { let tenant_id = var("TENANT_ID").expect("Missing TENANT_ID environment variable"); let client_id = var("CLIENT_ID").expect("Missing CLIENT_ID environment variable"); let client = new_http_client(); let response = start(client, tenant_id, &client_id, SCOPES).await?; println!("{}", response.message()); let mut stream = response.stream(); let authorization = loop { match stream.next().await { Some(Ok(authorization)) => break authorization, Some(Err(_)) => continue, None => { return Err(Error::with_message(ErrorKind::Credential, || { "device flow stream ended unexpectedly" })) } } }; println!("access token: {:?}", authorization.access_token().secret()); match authorization.refresh_token() { None => {} Some(tk) => println!("refresh token: {:?}", tk.secret()), } Ok(()) }