Separare i moduli in file diversi
Quando il contenuto del modulo è eccessivo, l'esplorazione del codice diventa più complessa. Provare a spostare il contenuto del modulo in un file separato.
Si sposterà ora il codice dell'esempio precedente nel file denominato src/authentication.rs
e quindi si cambierà il file radice del crate.
Nome file: src/main.rs
mod authentication;
fn main() {
let mut user = authentication::User::new("jeremy", "super-secret");
println!("The username is: {}", user.get_username());
user.set_password("even-more-secret");
}
Nome file: src/authentication.rs
pub struct User {
username: String,
password_hash: u64,
}
impl User {
pub fn new(username: &str, password: &str) -> User {
User {
username: username.to_string(),
password_hash: hash_password(&password.to_owned()),
}
}
pub fn get_username(&self) -> &String {
&self.username
}
pub fn set_password(&mut self, new_password: &str) {
self.password_hash = hash_password(&new_password.to_owned())
}
}
fn hash_password<T: Hash>(t: &T) -> u64 {/* ... */}
Inserire un punto e virgola dopo mod authentication
invece di un blocco di codice. Con l'aumentare delle dimensioni dei file, questa tecnica consente di spostare automaticamente i moduli in nuovi file. Il compilatore carica il contenuto del modulo da un altro file il cui nome è uguale a quello del modulo.
Quando il contenuto viene caricato, l'albero dei moduli rimane invariato. Il codice funzionerà comunque senza richiedere modifiche, anche se le definizioni sono presenti in file diversi.