Error code E0116

An inherent implementation was defined for a type outside the current crate.

Erroneous code example:

#![allow(unused)]
fn main() {
impl Vec<u8> { } // error
}

You can only define an inherent implementation for a type in the same crate where the type was defined. For example, an impl block as above is not allowed since Vec is defined in the standard library.

To fix this problem, you can either:

  • define a trait that has the desired associated functions/types/constants and implement the trait for the type in question
  • define a new type wrapping the type and define an implementation on the new type

Note that using the type keyword does not work here because type only introduces a type alias:

#![allow(unused)]
fn main() {
type Bytes = Vec<u8>;

impl Bytes { } // error, same as above
}