From 5f542307613cd96b2c98014899ce5cde939b24f9 Mon Sep 17 00:00:00 2001 From: Desiders Date: Sat, 13 Jul 2024 18:39:16 +0300 Subject: [PATCH] Add example --- examples/serialize/Cargo.toml | 12 ++++++ examples/serialize/src/main.rs | 73 ++++++++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+) create mode 100644 examples/serialize/Cargo.toml create mode 100644 examples/serialize/src/main.rs diff --git a/examples/serialize/Cargo.toml b/examples/serialize/Cargo.toml new file mode 100644 index 0000000..662c8c2 --- /dev/null +++ b/examples/serialize/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "serialize" +version = "0.1.0" +edition = "2021" +publish = false + +[dependencies] +telers = { path = "../../telers", features = ["default"] } +tokio = { version = "1.36", features = ["macros"] } +tracing = "0.1" +tracing-subscriber = { version = "0.3", features = ["env-filter"] } +serde_json = "1.0" diff --git a/examples/serialize/src/main.rs b/examples/serialize/src/main.rs new file mode 100644 index 0000000..8e63674 --- /dev/null +++ b/examples/serialize/src/main.rs @@ -0,0 +1,73 @@ +//! This example shows how to serialize Telegram types. +//! +//! You can run this example by setting `BOT_TOKEN` and optional `RUST_LOG` environment variable and running: +//! ```bash +//! RUST_LOG={log_level} BOT_TOKEN={your_bot_token} cargo run --package serialize +//! ``` + +use telers::{ + enums::{ParseMode, UpdateType}, + errors::HandlerError, + event::{telegram::HandlerResult, EventReturn, ToServiceProvider as _}, + methods::SendMessage, + types::Update, + utils::text::{html_pre_language, html_quote}, + Bot, Dispatcher, Router, +}; + +use tracing::{event, Level}; +use tracing_subscriber::{fmt, layer::SubscriberExt as _, util::SubscriberInitExt as _, EnvFilter}; + +async fn serialize_handler(bot: Bot, update: Update) -> HandlerResult { + if let Some(chat_id) = update.chat_id() { + match serde_json::to_string_pretty(&update) { + Ok(text) => { + bot.send( + SendMessage::new(chat_id, html_pre_language(html_quote(text), "json")) + .parse_mode(ParseMode::HTML), + ) + .await?; + } + Err(err) => { + bot.send(SendMessage::new( + chat_id, + format!("Serialize error :(\n\n{err:?}"), + )) + .await?; + + return Err(HandlerError::new(err)); + } + } + } + + Ok(EventReturn::Finish) +} + +#[tokio::main(flavor = "current_thread")] +async fn main() { + tracing_subscriber::registry() + .with(fmt::layer()) + .with(EnvFilter::from_env("RUST_LOG")) + .init(); + + let bot = Bot::from_env_by_key("BOT_TOKEN"); + + let mut router = Router::new("main"); + router.update.register(serialize_handler); + + let dispatcher = Dispatcher::builder() + .main_router(router) + .bot(bot) + .allowed_updates(UpdateType::all()) + .build(); + + match dispatcher + .to_service_provider_default() + .unwrap() + .run_polling() + .await + { + Ok(()) => event!(Level::INFO, "Bot stopped"), + Err(err) => event!(Level::ERROR, error = %err, "Bot stopped"), + } +}