Only traits defined in the current crate can be implemented for arbitrary types.
Erroneous code example:
impl Drop for u32 {}
RunThis error indicates a violation of one of Rust’s orphan rules for trait implementations. The rule prohibits any implementation of a foreign trait (a trait defined in another crate) where
To avoid this kind of error, ensure that at least one local type is referenced
by the impl
:
pub struct Foo; // you define your type in your crate
impl Drop for Foo { // and you can implement the trait on it!
// code of trait implementation here
}
impl From<Foo> for i32 { // or you use a type from your crate as
// a type parameter
fn from(i: Foo) -> i32 {
0
}
}
RunAlternatively, define a trait locally and implement that instead:
trait Bar {
fn get(&self) -> usize;
}
impl Bar for u32 {
fn get(&self) -> usize { 0 }
}
RunFor information on the design of the orphan rules, see RFC 1023.