Files
vfd/examples/tokio_worker.rs
T
Кобелев Андрей Андреевич 244d907cc2 Rename crate to escpos-vfd and add tokio support
Rename crate to escpos-vfd and add tokio support

Introduce a configurable crate-ready API with presets, typed errors,
optional Tokio async support, and expanded documentation.
2026-08-16 11:24:20 +05:00

35 lines
1.8 KiB
Rust
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//! Асинхронный worker на Tokio с bounded queue и явным shutdown.
mod common;
use escpos_vfd::tokio::AsyncVfdWorker;
use std::error::Error;
use std::time::Duration;
#[tokio::main(flavor = "current_thread")]
async fn main() -> Result<(), Box<dyn Error>> {
// В Cargo.toml у примера указан `required-features = ["tokio"]`. Поэтому sync-only
// пользователи не подтягивают async-зависимости, а сам файл остаётся обычным
// понятным Tokio-примером без cfg-обёрток.
let config = common::ExampleArgs::from_env()?.config;
// Async worker открывает serial-порт через `tokio-serial` и запускает одну task,
// которая последовательно пишет команды в устройство.
let worker = AsyncVfdWorker::start(config).await?;
let display = worker.handle();
// Каждый await завершается после записи команды worker-ом или возвращает ошибку I/O.
// Если очередь заполнена, `send` внутри handle даст backpressure через `.await`.
display.clear().await?;
display.set_brightness(2).await?;
display.print_line_diff(1, "Tokio worker").await?;
display.print_line_diff(2, "bounded queue").await?;
// Держим текст на физическом дисплее пару секунд, затем делаем graceful shutdown:
// ранее принятые команды завершатся, task остановится, serial transport вернётся.
tokio::time::sleep(Duration::from_secs(2)).await;
worker.shutdown().await?;
Ok(())
}