Thanks to visit codestin.com
Credit goes to lib.rs

3 releases

0.1.2 Dec 11, 2022
0.1.1 Dec 11, 2022
0.1.0 Dec 10, 2022

#14 in #hidden

Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App

8,164 downloads per month
Used in 11 crates (via blade-graphics)

MIT license

5KB
66 lines

hidden-trait

Build Status Docs Crates.io

This library is a proc macro to expose a trait implementation.

The case we are trying to solve here: a library exposes some concrete structure for people to use. There can be multiple of them (e.g. Vector2, Vector3, Vector4 in a math library), or maybe it's one per platform (Vulkan vs Metal). Important part is - internally the library would like to have a trait implemented by this public type, but it doesn't want to expose the trait itself because of ergonomic reasons. Hence, "hidden-trait" to rescue.

mod hidden {
    trait Foo {
        fn foo(&self) -> u32;
    }

    pub struct Bar;

    #[hidden_trait::expose]
    impl Foo for Bar {
        fn foo(&self) -> u32 {
            42
        }
    }
}

fn main() {
    let bar = hidden::Bar;
    // calling the trait method as if it's ours
    bar.foo();
}

Dependencies

~1.5MB
~39K SLoC