1use guerrillamail_client::Client;
12
13#[tokio::main]
14async fn main() -> Result<(), Box<dyn std::error::Error>> {
15 println!("š§ GuerrillaMail Rust Client - Full Demo");
16 println!("{}", "=".repeat(50));
17
18 println!("\nš Creating client...");
22
23 let client = Client::new().await?;
25
26 println!(" ā
Connected to GuerrillaMail API");
39
40 println!("\nš¬ Creating temporary email...");
44 let alias = format!("demo{}", rand::random::<u16>());
45 let email = client.create_email(&alias).await?;
46 println!(" ā
Created: {}", email);
47
48 println!("\nā³ Waiting for messages...");
52 println!(" Send an email to: {}", email);
53 println!(" (Polling for up to 2 minutes)");
54
55 let start = std::time::Instant::now();
56 let timeout = std::time::Duration::from_secs(120);
57 let poll_interval = std::time::Duration::from_secs(5);
58
59 loop {
60 let messages = client.get_messages(&email).await?;
62
63 if !messages.is_empty() {
64 println!("\n\nš„ Received {} message(s)!", messages.len());
65
66 for msg in &messages {
67 println!("\n{}", "-".repeat(50));
68 println!("Message ID: {}", msg.mail_id);
69 println!("From: {}", msg.mail_from);
70 println!("Subject: {}", msg.mail_subject);
71 println!(
72 "Excerpt: {}",
73 &msg.mail_excerpt[..msg.mail_excerpt.len().min(80)]
74 );
75 println!("Timestamp: {}", msg.mail_timestamp);
76
77 println!("\nš Fetching full email body...");
81 match client.fetch_email(&email, &msg.mail_id).await {
82 Ok(details) => {
83 println!(" Body length: {} characters", details.mail_body.len());
84 println!(" Preview (first 500 chars):");
85 println!(" {}", "-".repeat(40));
86 let preview: String = details.mail_body.chars().take(500).collect();
87 for line in preview.lines().take(10) {
88 println!(" {}", line);
89 }
90 if details.mail_body.len() > 500 {
91 println!(" ... (truncated)");
92 }
93 }
94 Err(e) => {
95 eprintln!(" ā Failed to fetch: {}", e);
96 }
97 }
98 }
99 break;
100 }
101
102 if start.elapsed() >= timeout {
103 println!("\n\nā ļø Timeout: No messages received");
104 break;
105 }
106
107 let remaining = (timeout - start.elapsed()).as_secs();
108 print!("\r Checking... {} seconds remaining ", remaining);
109 use std::io::Write;
110 std::io::stdout().flush().ok();
111
112 tokio::time::sleep(poll_interval).await;
113 }
114
115 println!("\nšļø Cleaning up email address...");
119 match client.delete_email(&email).await {
120 Ok(true) => println!(" ā
Email address deleted"),
121 Ok(false) => println!(" ā ļø Deletion may have failed"),
122 Err(e) => eprintln!(" ā Error: {}", e),
123 }
124
125 println!("\n{}", "=".repeat(50));
126 println!("⨠Demo complete!");
127
128 Ok(())
129}