What is object safety

Object safety determines if a Rust trait can be used for dynamic dispatch via trait objects like `dyn Trait`.

Object safety in Rust means a trait can be used to create a trait object (dyn Trait) only if all its methods have a known size and no generic type parameters that prevent dynamic dispatch. If a trait is not object-safe, you cannot use it with dyn for runtime polymorphism.

// Object-safe trait: can be used as `dyn Shape`
trait Shape {
    fn area(&self) -> f64;
}

// Not object-safe: generic method prevents `dyn GenericTrait`
trait GenericTrait {
    fn process<T>(&self, item: T);
}