snippetrustCritical
How to include files from same directory in a module using Cargo/Rust?
Viewed 0 times
directoryhowmodulefromsamefilesusingrustcargoinclude
Problem
I have a Cargo project consisting of three files in the same directory:
I want to import functions from
I've read about the file structure required but I don't get it - naming all the imported files
Is there a way to import/include files independently of directory structure as I would in Python or C++?
main.rs:
mod1.rs:
mod2.rs:
Building results in:
I can't
main.rs, mod1.rs and mod2.rs. I want to import functions from
mod2.rs to mod1.rs the same way I would import functions from mod1.rs to main.rs.I've read about the file structure required but I don't get it - naming all the imported files
mod will lead to minor confusion in the editor and also this just complicates the project hierarchy. Is there a way to import/include files independently of directory structure as I would in Python or C++?
main.rs:
mod mod1; // Works
fn main() {
println!("Hello, world!");
mod1::mod1fn();
}mod1.rs:
mod mod2; // Fails
pub fn mod1fn() {
println!("1");
mod2::mod2fn();
}mod2.rs:
pub fn mod2fn() {
println!("2");
}Building results in:
error: cannot declare a new module at this location
--> src\mod1.rs:1:5
|
1 | mod mod2;
| ^^^^
|
note: maybe move this module src to its own directory via src/mod.rs
--> src\mod1.rs:1:5
|
1 | mod mod2;
| ^^^^
note: ... or maybe use the module mod2 instead of possibly redeclaring it
--> src\mod1.rs:1:5
|
1 | mod mod2;
| ^^^^
I can't
use it as it doesn't exist as a module anywhere, and I don't want to modify the directory structure.Solution
All of your top level module declarations should go in
You can then
I'd recommend reading the chapter on modules in the new version of the Rust book if you haven't already - they can be a little confusing for people who are new to the language.
main.rs, like so:mod mod1;
mod mod2;
fn main() {
println!("Hello, world!");
mod1::mod1fn();
}You can then
use crate::mod2 inside mod1:use crate::mod2;
pub fn mod1fn() {
println!("1");
mod2::mod2fn();
}I'd recommend reading the chapter on modules in the new version of the Rust book if you haven't already - they can be a little confusing for people who are new to the language.
Code Snippets
mod mod1;
mod mod2;
fn main() {
println!("Hello, world!");
mod1::mod1fn();
}use crate::mod2;
pub fn mod1fn() {
println!("1");
mod2::mod2fn();
}Context
Stack Overflow Q#46829539, score: 120
Revisions (0)
No revisions yet.