#![allow(
unused_crate_dependencies,
clippy::print_stdout,
clippy::print_stderr,
clippy::use_debug,
clippy::dbg_macro,
clippy::unnecessary_debug_formatting,
reason = "example binary uses println for output"
)]
use hermes_tdata::TDesktop;
fn main() {
tracing_subscriber::fmt().with_max_level(tracing::Level::DEBUG).init();
println!("=== hermes-tdata Test ===\n");
match TDesktop::from_default() {
Ok(tdesktop) => {
println!("✅ Successfully loaded tdata!");
println!(" Path: {:?}", tdesktop.base_path());
println!(" App version: {}", tdesktop.app_version());
println!(" Accounts: {}", tdesktop.accounts_count());
println!(" Has passcode: {}", tdesktop.has_passcode());
println!();
for (i, account) in tdesktop.accounts().iter().enumerate() {
println!("Account {} (index {}):", i, account.index());
println!(" DC ID: {}", account.dc_id());
println!(" User ID: {}", account.user_id());
let key = account.auth_key_bytes();
println!(" Auth key (first 8 bytes): {:02x?}", &key[..8]);
match account.to_session_string() {
Ok(session_str) => {
println!(
" Session string (first 32 chars): {}...",
&session_str[..32.min(session_str.len())]
);
},
Err(e) => {
println!(" ❌ Failed to create session string: {}", e);
},
}
println!();
}
},
Err(e) => {
eprintln!("❌ Failed to load tdata: {}", e);
eprintln!();
eprintln!("This could mean:");
eprintln!(" - Telegram Desktop is not installed");
eprintln!(" - tdata is password-protected (use from_path_with_passcode)");
eprintln!(" - tdata format has changed");
std::process::exit(1);
},
}
println!("=== Test Complete ===");
}