Какова рекомендуемая структура каталогов для проекта Rust?

Где следует размещать источники, примеры, документацию, модульные тесты, интеграционные тесты, лицензию, тесты и т.д.?

Ответы

Ответ 1

Cargo, официальный менеджер пакетов для Rust, определяет некоторые соглашения относительно компоновки ящика Rust:

.
├── Cargo.lock
├── Cargo.toml
├── benches
│   └── large-input.rs
├── examples
│   └── simple.rs
├── src
│   ├── bin
│   │   └── another_executable.rs
│   ├── lib.rs
│   └── main.rs
└── tests
    └── some-integration-tests.rs
  • Cargo.toml и Cargo.lock сохраняются в корне вашего проекта.
  • Исходный код находится в каталоге src.
  • Файл библиотеки по умолчанию src/lib.rs.
  • Исполняемый файл по умолчанию - src/main.rs.
  • Другие исполняемые файлы могут быть помещены в src/bin/*.rs.
  • Тесты интеграции проходят в каталоге tests (модульные тесты идут в каждом тестируемом файле).
  • Примеры исполняемых файлов входят в каталог examples.
  • Тесты идут в каталоге benches.

Более подробно это описано в описании манифеста .

Следуя этому стандарту, вы сможете использовать команды Cargo для создания, запуска и тестирования вашего проекта. Запустите cargo new, чтобы настроить новый проект библиотеки или cargo new --bin, чтобы настроить новый исполняемый проект.

Кроме того, документация для библиотек часто записывается в комментарии к документации (комментарии, начинающиеся с /// перед любым элементом, или //! для документирования родительского элемента). Кроме того, лицензия обычно помещается в корневой каталог.

Модульные тесты, как упоминалось выше, записываются в том же модуле, что и те функции, которые они тестируют. Обычно они помещаются во внутренний модуль. Это выглядит так (это то, что Cargo генерирует для новой библиотеки с cargo new):

#[cfg(test)]
mod tests {
    #[test]
    fn it_works() {
    }
}