Эта страница переведена с английского языковой моделью. При любом расхождении верен английский оригинал.
Гарантии
Ошибки, которые не компилируются, и сообщение компилятора для каждой.
Схема текстом
- тип ответа без #[derive(Outgoing)] → `Receipt` does not declare where it is published
- именующее преобразование на ответе с адресом → `Receipt` does not let a transform name the destination
- монтирование без включённой фичи кодека → no codec is available to decode this subscriber's input
- Out<impl RequestReply> у издателя без этой совместимости → `MemoryPublisher` does not support request / reply messaging
- workers(4) и threads(2) на одном подписчике → workers(..) and threads(..) fill the same position: name one of them
- публикация без адреса → this publish has no destination yet
- публикация без заголовков, которые объявило сообщение → the headers of this publish do not match the message's contract
- Вы пишете
- Компилятор отвечает
Ошибку, которую видит компилятор, RustStream делает ошибкой компиляции, а не проверкой при старте или на каждом сообщении. Проверка на каждом сообщении стоила бы каждой доставке, а проверка при старте находит ошибку только там, где сервис впервые запустили. Каждое сообщение называет тип или шаг, в котором ошибка.
Строки схемы относятся к правилам ответов, преобразований, кодеков, совместимости издателя, диспетчеризации, публикации и типизированных заголовков, по порядку. Настройку, однажды заданную в цепочке монтирования, нельзя задать второй раз, а совместимость, которой у брокера нет, оборачивается отсутствующим методом или невыполненным ограничением.
Жизненный цикл тоже типизирован: у неподключённого брокера нет методов для подписки и публикации, а закрытый поглощён.