dyn_compatible

Crates.iodyn_compatible
lib.rsdyn_compatible
version0.1.4
created_at2025-06-25 16:52:50.521528+00
updated_at2025-07-15 12:38:13.419701+00
descriptionDyn compatible marker
homepage
repositoryhttps://github.com/nossie531/dyn_compatible
max_upload_size
id1726167
size20,440
(nossie531)

documentation

README

dyn_compatible

Dyn compatible marker.

The author of this crate is not good at English.
Forgive me if the document is hard to read.

What is this?

This crate provides marker to indicate wheather the trait is [dyn compatible] or not. ("dyn compatible" is also called "object safe".)

Background

It is important if trait is dyn compatible or not. However, Rust syntax does not provide marker for it. Instead, it is determined from the kinds of methods included in the trait. So, at code reading, we humans can't judge it at a glance. Also, careless methods adding and removing to traits may result in unexpected dyn compatibility change.

Examples

#[dyn_compatible(true)]
trait MyTrait {
    fn some_method(&self);
}

Under the hood

For example, following two traits are ...

#[dyn_compatible(true)]
trait DynTrait {
    fn some_method(&self);
}

#[dyn_compatible(false)]
trait NotDynTrait {
    fn some_method(&self);
}

... expanded like these.

trait DynTrait {
    fn some_method(&self);
}

impl dyn DynTrait {}

trait NotDynTrait: dyn_compatible::NotDyn {
    fn some_method(&self);
}

Versions

See CHANGELOG.

Commit count: 0

cargo fmt