Skip to main content

Crate layer_client

Crate layer_client 

Source
Expand description

High-level Telegram client — design mirrors grammers exactly.

§Full flow

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!")?;

Structs§

Client
LoginToken
Opaque token from super::Client::request_login_code. Pass to super::Client::sign_in.
PasswordToken
Holds the server’s 2FA challenge. Pass to super::Client::check_password.

Enums§

Error
SignInError
Errors that can occur during super::Client::sign_in.