Correct use/import syntax

Hey all, n00b here.

I'm having trouble importing a script correctly, so I can begin building the script, but if the compiler can't find the script I want to build, I'm stuck. I'm reading the rust book trying to figure this out and I'm not having any luck so far.

The error

PS C:\S2O\s2o_net_lib> cargo run
   Compiling s2o_net_lib v0.1.0 (C:\S2O\s2o_net_lib)
error[E0433]: failed to resolve: could not find `layers` in the crate root
 --> src\gui_zpu.rs:2:12
  |
2 | use crate::layers::menu_layer::create_main_menu;
  |            ^^^^^^ could not find `layers` in the crate root
For more information about this error, try `rustc --explain E0433`.
error: could not compile `s2o_net_lib` (bin "s2o_net_lib") due to 1 previous error
PS C:\S2O\s2o_net_lib>

/cargo.toml

[package]
name = "s2o_net_lib"
version = "0.1.0"
edition = "2021"

[dependencies]
winapi = { version = "0.3.9", features = ["ifmib", "iphlpapi", "securitybaseapi", "errhandlingapi"] }
tokio = { version = "1.42.0", features = ["full"] }
log = "0.4.22"
env_logger = "0.11.6"
speedtest-rs = "0.2.0"
socket2 = "0.4"
crossterm = "0.21"
cursive = "0.21.1"
windows-sys = "0.59.0"

src/main.rs

use cursive::Cursive;
use cursive::CursiveExt; // Import CursiveExt for run method
mod gui_zpu;

fn main() {
    let mut siv = Cursive::default();
    gui_zpu::initialize(&mut siv); // Initialize GUI from gui_zpu

    siv.run();
}

src/gui_zpu.rs

use cursive::Cursive;
use crate::layers::menu_layer::create_main_menu;

pub fn initialize(siv: &mut Cursive) {
    create_main_menu(siv);
}

src/layers/menu_layer.rs

use cursive::Cursive;
use cursive::views::{Dialog, SelectView};

pub fn create_main_menu(siv: &mut Cursive) {
    let mut select = SelectView::new()
        .item("Admin Menu", "admin")
        .item("Examine Interfaces", "examine")
        .item("Start Monitoring", "start")
        .item("Firewall Settings", "firewall")
        .item("Back", "back");

    select.set_on_submit(|siv, item| match item {
        "admin" => admin_menu(siv),
        "examine" => examine_interfaces(siv),
        "start" => start_monitoring(siv),
        "firewall" => firewall_menu(siv),
        "back" => {siv.pop_layer();},
        _ => (),
    });

    siv.add_layer(Dialog::around(select).title("Main Menu"));
}

Preciate you!

You need to declare the layers and layers::menu_layer modules, starting in your src/main.rs file. Same as you did with the gui_zpu module. Otherwise the src/layers/menu_layer.rs file won't be compiled as part of your binary.

This means changing your src/main.rs file:

use cursive::Cursive;
use cursive::CursiveExt; // Import CursiveExt for run method
mod gui_zpu;
+ pub mod layers;

fn main() {
    let mut siv = Cursive::default();
    gui_zpu::initialize(&mut siv); // Initialize GUI from gui_zpu

    siv.run();
}

and adding a file src/layers.rs or src/layers/mod.rs that declares the menu_layer submodule:

pub mod menu_layer;
1 Like