Вы правы, это не очень хорошо объяснено в документах, и это из-за того, как работают скрипты сборки.Ну, отчасти.
Ваши реализации protobuf находятся под target/{yourArch}/build/{yourCrateName}-{hash}/out
.
Это было бы чрезвычайно трудно получить, если бы не переменные окружения.Важной частью документации является следующий фрагмент кода, освещающий включение:
pub mod items {
include!(concat!(env!("OUT_DIR"), "/snazzy.items.rs"));
}
Сюда входит файл, доступный по адресу OUT_DIR
(каталог, указанный выше, заполняется автоматически во время компиляции) и имяреализация protobuf (имя вашего пакета в файле protobuf) и делает все его структуры содержимого доступными в crate::items
.
Имеет смысл, чтобы файлы находились в каталоге сборки, поскольку они являются артефактом сборки,Генерация кода в папке src
вашего ящика приведет к хаосу, как в отношении контроля версий, так и вменяемости проекта (у вас будет дублирование информации, а реализация protobuf при условии, что она нормальная, не, что важно для вас. Однако функциональная схема есть).