Крейт (Crates)
Атрибут crate_type можна використати, щоб сказати компілятору, чи крейт є
бінарним або бібліотекою (і навіть який саме тип бібліотеки), а атрибут crate_name
можна використати, щоб задати назву крейту.
Однак важливо зазначити, що і атрибут crate_type, і атрибут crate_name
не мають жодного впливу під час використання Cargo, менеджера пакетів Rust.
Оскільки Cargo використовується для більшості проєктів Rust, це означає, що
реальні випадки використання crate_type і crate_name є відносно обмеженими.
// This crate is a library
#![crate_type = "lib"]
// The library is named "rary"
#![crate_name = "rary"]
pub fn public_function() {
println!("called rary's `public_function()`");
}
fn private_function() {
println!("called rary's `private_function()`");
}
pub fn indirect_access() {
print!("called rary's `indirect_access()`, that\n> ");
private_function();
}
Коли використовується атрибут crate_type, нам більше не потрібно передавати
прапорець --crate-type до rustc.
$ rustc lib.rs
$ ls lib*
library.rlib