Search code examples
rustrust-cargorust-crates

Rust confusion about specific package #2


Still trying to run this script here. And still a Rustacean learner.

Yesterday I had a problem with the docx_rs/docx-rs crate. Enlightenment from at54321.

But the script still doesn't run. It appears to have a problem with a crate called clap.

D:\My documents\...\word_file>cargo run
   Compiling word_file v0.1.0 (D:\My documents\software projects\EclipseWorkspace\py_exp\src\rust_2023-07A\word_file)
error[E0432]: unresolved import `clap::Parser`
  --> src\main.rs:30:9
   |
30 |     use clap::Parser;
   |         ^^^^^^^^^^^^ no `Parser` in the root

error: cannot determine resolution for the derive macro `Parser`
  --> src\main.rs:36:14
   |
36 |     #[derive(Parser, Debug)]
   |              ^^^^^^
   |
   = note: import resolution is stuck, try simplifying macro imports

error: cannot find attribute `command` in this scope
  --> src\main.rs:37:7
   |
37 |     #[command(author, version, about, long_about = None)]
   |       ^^^^^^^

error: cannot find attribute `arg` in this scope
  --> src\main.rs:39:11
   |
39 |         #[arg(short, long)]
   |           ^^^

error[E0599]: no function or associated item named `parse` found for struct `main::Args` in the current scope
  --> src\main.rs:71:26
   |
38 |     struct Args {
   |     ----------- function or associated item `parse` not found for this struct
...
71 |         let args = Args::parse();
   |                          ^^^^^ function or associated item not found in `main::Args`

Very impressed with the clarity of Rust feedback. But I haven't managed to understand what's actually wrong here. As per the linked script my dependencies section of Cargo.toml includes this line:

clap = "2.33.0"

... anyone know what's wrong this time?

Later

After changing to clap = "4.3.11". Still errors:

error: cannot find derive macro `Parser` in this scope
  --> src\main.rs:36:14
   |
36 |     #[derive(Parser, Debug)]
   |              ^^^^^^
   |
note: `Parser` is imported here, but it is only a trait, without a derive macro
  --> src\main.rs:30:9
   |
30 |     use clap::Parser;
   |         ^^^^^^^^^^^^

... + 3 more errors no doubt due to the above

Unfortunately I haven't got to that part of Rust 101 where you learn about "derive macros"...! I have no idea what that means.


Solution

  • (this answer added because question needs to be answered but not necessarily closed)

    As stated by richzilla, the answer in this case is to use the latest (stable) version of "clap" and to run this command first:

    cargo add clap --features derive
    

    "Features" being, as stated, a common concept in crates.