ruststream 0.7.0-rc.12

Async messaging framework for Rust: broker-agnostic traits, router, codecs, and a conformance harness for broker authors.
Documentation
# Быстрый старт

Самый быстрый путь к работающему сервису - сгенерировать заготовку через `cargo generate`.

## Заготовка проекта

```bash
cargo install cargo-generate
cargo generate --git https://github.com/powersemmi/ruststream templates/memory --name my-service
cd my-service
```

Для генерации нужен только `cargo generate`. `templates/memory` - стартовый шаблон на in-memory
брокере. Шаблон из адаптации библиотеки брокера разворачивается так же: указывают репозиторий
адаптации и путь к шаблону (например,
`--git https://github.com/powersemmi/ruststream-nats templates/nats`); какие шаблоны есть у
адаптации, сказано в её собственной документации. `cargo generate` создаёт идиоматичный проект из
нескольких файлов:

```
my-service/
├── Cargo.toml
└── src/
    ├── main.rs      # #[ruststream::app] строит сервис и монтирует роутер
    ├── orders.rs    # обработчики как функции #[subscriber] (один публикует ответ)
    └── routes.rs    # собирает обработчики в Router
```

## Запуск

`#[ruststream::app]` генерирует `main`, поэтому бинарник уже понимает команды фреймворка:

```bash
cargo run -- run                # или: ruststream run, если установлен CLI
```

`cargo run -- run` запускает рантайм tokio. Сервис работает, пока вы не нажмёте ++ctrl+c++.
Брокер очереди для запуска не нужен.

## Генерация AsyncAPI-документа

```bash
cargo run -- asyncapi gen
```

Команда печатает AsyncAPI-документ в формате JSON. Флаги вывода (`-o`, `--yaml`) и сам документ
разобраны в [модуле `asyncapi`](https://docs.rs/ruststream/latest/ruststream/asyncapi/index.html).

## Как выглядит точка входа

Точка входа - это функция, которая собирает сервис: подключает брокер и монтирует на нём роутер.
`#[ruststream::app]` превращает её в `main`.

=== "Макросы"

    ```rust title="src/main.rs"
    --8<-- "examples/tutorial/main.rs:main"
    ```

=== "Вручную"

    ```rust title="src/main.rs"
    --8<-- "examples/manual/tutorial/main.rs:main"
    ```

## Что дальше

- [Учебник]tutorial.md разбирает каждую часть сервиса.
- [Подписчики]https://docs.rs/ruststream/latest/ruststream/runtime/index.html#subscribers описывают все формы обработчиков.
- [CLI]https://docs.rs/ruststream/latest/ruststream/runtime/cli/index.html управляет сервисом из командной строки.