Error code E0519

The current crate is indistinguishable from one of its dependencies, in terms of metadata.

Example of erroneous code:

a.rs

#![crate_name = "a"]
#![crate_type = "lib"]

pub fn foo() {}

b.rs

#![crate_name = "a"]
#![crate_type = "lib"]

// error: the current crate is indistinguishable from one of its dependencies:
//        it has the same crate-name `a` and was compiled with the same
//        `-C metadata` arguments. This will result in symbol conflicts between
//        the two.
extern crate a;

pub fn foo() {}

fn bar() {
    a::foo(); // is this calling the local crate or the dependency?
}

The above example compiles two crates with exactly the same name and crate_type (plus any other metadata). This causes an error because it becomes impossible for the compiler to distinguish between symbols (pub item names).

This error can be fixed by:

  • Using Cargo, the Rust package manager, automatically fixing this issue.
  • Recompiling the crate with different metadata (different name/ crate_type).