High-level Telegram client — design mirrors grammers exactly.
Full flow
use ;
// Reuse session if it exists, otherwise fresh DH + initConnection(GetConfig)
let mut client = load_or_connect?;
if !client.is_authorized?
client.send_message?;
High-level Telegram client — design mirrors grammers exactly.
use layer_client::{Client, SignInError};
// Reuse session if it exists, otherwise fresh DH + initConnection(GetConfig)
let mut client = Client::load_or_connect("session.bin", API_ID, API_HASH)?;
if !client.is_authorized()? {
let token = client.request_login_code(PHONE)?;
let code = prompt("Enter code: ");
match client.sign_in(&token, &code) {
Ok(name) => println!("Welcome, {name}!"),
Err(SignInError::PasswordRequired(token)) => {
let pw = prompt("Enter 2FA password: ");
client.check_password(token, pw.trim())?;
}
Err(SignInError::InvalidCode) => eprintln!("Wrong code"),
Err(SignInError::SignUpRequired) => eprintln!("Sign up via official app first"),
Err(SignInError::Other(e)) => return Err(e.into()),
}
client.save_session("session.bin")?;
}
client.send_message("me", "Hello from layer!")?;