rust-tdlib 0.4.3

TDlib (Telegram Database library) client
Documentation
use rust_tdlib::client::{AuthStateHandlerProxy, ClientIdentifier};
use rust_tdlib::{
    client::{Client, ConsoleClientStateHandlerIdentified, Worker},
    tdjson,
    types::{TdlibParameters, Update},
};
use std::time::Duration;

#[tokio::main]
async fn main() {
    tdjson::set_log_verbosity_level(
        std::env::var("TDLIB_LOG_VERBOSITY")
            .unwrap_or_else(|_| "1".to_string())
            .parse()
            .unwrap(),
    );
    env_logger::init();
    let tdlib_parameters = TdlibParameters::builder()
        .database_directory("tddb")
        .use_test_dc(false)
        .api_id(std::env::var("API_ID").unwrap().parse::<i32>().unwrap())
        .api_hash(std::env::var("API_HASH").unwrap())
        .system_language_code("en")
        .device_model("Desktop")
        .system_version("Unknown")
        .application_version(env!("CARGO_PKG_VERSION"))
        .enable_storage_optimizer(true)
        .build();

    let (sender, mut receiver) = tokio::sync::mpsc::channel::<Box<Update>>(100);

    let client = Client::builder()
        .with_tdlib_parameters(tdlib_parameters)
        .with_updates_sender(sender)
        .with_client_auth_state_handler(ConsoleClientStateHandlerIdentified::new(
            ClientIdentifier::PhoneNumber(std::env::var("PHONE_NUMBER").unwrap()),
        ))
        .build()
        .unwrap();

    tokio::spawn(async move {
        let mut wait_messages: i32 = 2000;
        while let Some(message) = receiver.recv().await {
            log::info!("updates handler received {:?}", message);
            wait_messages -= 1;
            if wait_messages == 0 {
                break;
            }
        }
    });

    let mut worker = Worker::builder()
        .with_auth_state_handler(AuthStateHandlerProxy::default())
        .build()
        .unwrap();
    worker.start();

    let client = worker.bind_client(client).await.unwrap();

    tokio::time::sleep(Duration::from_secs(30)).await;

    worker.reload_client(client).await.unwrap();

    log::info!("client was reloaded");

    // check that updates still received
    tokio::time::sleep(Duration::from_secs(30)).await;
    log::info!("stop worker");

    worker.stop();
}