Перейти к основному содержимому
Нормативная версия документации - английская

Эта страница переведена с английского языковой моделью. При любом расхождении верен английский оригинал.

Гарантии

Ошибки, которые не компилируются, и сообщение компилятора для каждой.

Слева ошибка в коде, справа сообщение компилятора о нейтип ответабез#[derive(Outgoing)]`Receipt` does not declarewhere it is publishedименующеепреобразованиена ответе с адресом`Receipt` does not leta transform namethe destinationмонтированиебез включённойфичи кодекаno codec is availableto decode thissubscriber's inputOut<impl RequestReply>у издателя безэтой совместимости`MemoryPublisher` does notsupport request / replymessagingworkers(4) иthreads(2) на одномподписчикеworkers(..) and threads(..)fill the same position:name one of themпубликациябез адресаthis publish hasno destination yetпубликация беззаголовков, которыеобъявило сообщениеthe headers of this publishdo not match the message'scontractВы пишетеКомпилятор отвечает
Схема текстом
  1. тип ответа без #[derive(Outgoing)] → `Receipt` does not declare where it is published
  2. именующее преобразование на ответе с адресом → `Receipt` does not let a transform name the destination
  3. монтирование без включённой фичи кодека → no codec is available to decode this subscriber's input
  4. Out<impl RequestReply> у издателя без этой совместимости → `MemoryPublisher` does not support request / reply messaging
  5. workers(4) и threads(2) на одном подписчике → workers(..) and threads(..) fill the same position: name one of them
  6. публикация без адреса → this publish has no destination yet
  7. публикация без заголовков, которые объявило сообщение → the headers of this publish do not match the message's contract
  8. Вы пишете
  9. Компилятор отвечает

Ошибку, которую видит компилятор, RustStream делает ошибкой компиляции, а не проверкой при старте или на каждом сообщении. Проверка на каждом сообщении стоила бы каждой доставке, а проверка при старте находит ошибку только там, где сервис впервые запустили. Каждое сообщение называет тип или шаг, в котором ошибка.

Строки схемы относятся к правилам ответов, преобразований, кодеков, совместимости издателя, диспетчеризации, публикации и типизированных заголовков, по порядку. Настройку, однажды заданную в цепочке монтирования, нельзя задать второй раз, а совместимость, которой у брокера нет, оборачивается отсутствующим методом или невыполненным ограничением.

Жизненный цикл тоже типизирован: у неподключённого брокера нет методов для подписки и публикации, а закрытый поглощён.