From 7ba52759578fd8eff8eeebdc73560d3b4f3d49a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=BE=D0=B1=D0=B5=D0=BB=D0=B5=D0=B2=20=D0=90=D0=BD?= =?UTF-8?q?=D0=B4=D1=80=D0=B5=D0=B9=20=D0=90=D0=BD=D0=B4=D1=80=D0=B5=D0=B5?= =?UTF-8?q?=D0=B2=D0=B8=D1=87?= Date: Fri, 21 Aug 2026 09:40:19 +0500 Subject: [PATCH] Add README badges and CI checks --- .gitea/workflows/ci.yml | 49 +++++++++++++++++++++++++ README.md | 81 ++++++++++++++++++++++------------------- 2 files changed, 92 insertions(+), 38 deletions(-) create mode 100644 .gitea/workflows/ci.yml diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml new file mode 100644 index 0000000..441f27d --- /dev/null +++ b/.gitea/workflows/ci.yml @@ -0,0 +1,49 @@ +name: Rust + +on: + push: + branches: + - master + - main + + pull_request: + branches: + - master + - main + +jobs: + test: + name: Test + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Install Rust + uses: dtolnay/rust-toolchain@1.85 + with: + components: rustfmt, clippy + + - name: Cache + uses: Swatinem/rust-cache@v2 + + - name: Format + run: cargo fmt --all -- --check + + - name: Check + run: cargo check --all-targets --all-features + + - name: Clippy + run: cargo clippy --all-targets --all-features -- -D warnings + + - name: Test + run: cargo test --all-features + + - name: Documentation + env: + RUSTDOCFLAGS: "-D warnings" + run: cargo doc --no-deps --all-features + + - name: Package + run: cargo package --allow-dirty diff --git a/README.md b/README.md index 315f6dd..e74c2f6 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,10 @@ # escpos-vfd +[![crates.io](https://img.shields.io/crates/v/escpos-vfd.svg)](https://crates.io/crates/escpos-vfd) +[![docs.rs](https://docs.rs/escpos-vfd/badge.svg)](https://docs.rs/escpos-vfd) +[![rust](https://img.shields.io/badge/rust-1.85%2B-blue.svg)](https://www.rust-lang.org) +[![license](https://img.shields.io/crates/l/escpos-vfd.svg)](https://git.belvedersky.ru/belvedersky/vfd/src/branch/master/LICENSE-MIT) + `escpos-vfd` — Rust-библиотека для символьных VFD-дисплеев покупателя (customer display), которые работают через serial-порт и понимают Epson/ESC/POS-совместимые команды. @@ -53,15 +58,15 @@ fn main() -> escpos_vfd::Result<()> { ## Что выбрать -| Задача | API | -| --- | --- | -| Запустить проверенный 20×2 CP866 дисплей | `VfdConfig::preset(...)` | -| Настроить другой дисплей | `SerialSettings` + `DisplaySettings` | -| Писать напрямую из текущего потока | `Vfd` | -| Отправлять команды из нескольких потоков | `VfdWorker` + `VfdHandle` | -| Писать напрямую из Tokio task | `tokio::AsyncVfd` | -| Отправлять команды из нескольких Tokio tasks | `tokio::AsyncVfdWorker` | -| Отправить нестандартную команду | `write_raw(...)` | +| Задача | API | +| -------------------------------------------- | ------------------------------------ | +| Запустить проверенный 20×2 CP866 дисплей | `VfdConfig::preset(...)` | +| Настроить другой дисплей | `SerialSettings` + `DisplaySettings` | +| Писать напрямую из текущего потока | `Vfd` | +| Отправлять команды из нескольких потоков | `VfdWorker` + `VfdHandle` | +| Писать напрямую из Tokio task | `tokio::AsyncVfd` | +| Отправлять команды из нескольких Tokio tasks | `tokio::AsyncVfdWorker` | +| Отправить нестандартную команду | `write_raw(...)` | ## Настройка другого дисплея @@ -123,12 +128,12 @@ control, с тайм-аутом `100 ms`. На Unix порт по умолчан `TextEncoding` определяет, как Rust-строка превращается в байты: -| Значение | Назначение | -| --- | --- | -| `Cp866` | CP866 / IBM866 | -| `Windows1251` | Windows-1251 / CP1251 | -| `Ascii` | только ASCII, остальные символы заменяются на `?` | -| `Utf8` | UTF-8 без перекодирования | +| Значение | Назначение | +| ------------- | ------------------------------------------------- | +| `Cp866` | CP866 / IBM866 | +| `Windows1251` | Windows-1251 / CP1251 | +| `Ascii` | только ASCII, остальные символы заменяются на `?` | +| `Utf8` | UTF-8 без перекодирования | `code_table` отвечает за команду `ESC t n`. Например, конкретному CP866-дисплею могут одновременно понадобиться: @@ -280,34 +285,34 @@ vfd.write_raw(&[0x1b, 0x40])?; Библиотека использует `escpos_vfd::Result = Result` и разделяет ошибки по смыслу: -| Ошибка | Когда возникает | -| --- | --- | -| `VfdError::Config(...)` | неверная конфигурация | -| `VfdError::Serial(...)` | ошибка открытия или настройки serial-порта | -| `VfdError::Io(...)` | ошибка записи или `flush` | -| `VfdError::InvalidCoordinate` | координата вне дисплея | -| `VfdError::InvalidLine` | строка вне `1..=rows` | -| `VfdError::UnsupportedBrightness` | неподдерживаемый уровень яркости | -| `VfdError::QueueClosed` | очередь worker-а закрыта | -| `VfdError::WorkerStopped` | worker остановился до подтверждения команды | -| `VfdError::WorkerPanicked` | sync worker завершился с panic | -| `VfdError::WorkerCancelled` | Tokio worker был отменён | +| Ошибка | Когда возникает | +| --------------------------------- | ------------------------------------------- | +| `VfdError::Config(...)` | неверная конфигурация | +| `VfdError::Serial(...)` | ошибка открытия или настройки serial-порта | +| `VfdError::Io(...)` | ошибка записи или `flush` | +| `VfdError::InvalidCoordinate` | координата вне дисплея | +| `VfdError::InvalidLine` | строка вне `1..=rows` | +| `VfdError::UnsupportedBrightness` | неподдерживаемый уровень яркости | +| `VfdError::QueueClosed` | очередь worker-а закрыта | +| `VfdError::WorkerStopped` | worker остановился до подтверждения команды | +| `VfdError::WorkerPanicked` | sync worker завершился с panic | +| `VfdError::WorkerCancelled` | Tokio worker был отменён | ## Примеры В репозитории есть небольшие аппаратные примеры для основных сценариев: -| Пример | Что показывает | -| --- | --- | -| `preset_sync` | запуск с готовым пресетом | -| `manual_sync` | ручную конфигурацию | -| `tokio_worker` | Tokio worker | -| `clock` | частые diff-обновления | -| `marquee` | бегущую строку | -| `brightness` | яркость | -| `position` | позиционирование | -| `update_at` | частичные обновления | -| `blink` | повторную запись в позицию | +| Пример | Что показывает | +| -------------- | -------------------------- | +| `preset_sync` | запуск с готовым пресетом | +| `manual_sync` | ручную конфигурацию | +| `tokio_worker` | Tokio worker | +| `clock` | частые diff-обновления | +| `marquee` | бегущую строку | +| `brightness` | яркость | +| `position` | позиционирование | +| `update_at` | частичные обновления | +| `blink` | повторную запись в позицию | Например: