diff options
Diffstat (limited to 'README.md')
-rw-r--r-- | README.md | 22 |
1 files changed, 17 insertions, 5 deletions
@@ -114,25 +114,37 @@ fn example(&self) -> Result<Vec<Self::Item>, Self::Error>; ## How does dynamize deal with method generics? In order to be object-safe methods must not have generics, so dynamize simply -moves them to the trait definition: +moves them to the trait definition. For the following source code: ```rust +#[dynamize::dynamize] trait Gen { - fn foobar<A>(&self, a: A) -> A; + type Result: std::fmt::Display; + + fn foo<A>(&self, a: A) -> Self::Result; + fn bar<A, B>(&self, a: A, b: B) -> Self::Result; + fn buz(&self) -> Self::Result; } ``` -becomes +dynamize generates the following trait: ```rust -trait DynGen<A> { - fn foobar(&self, a: A) -> A; +trait DynGen<A, B> { + fn foo(&self, a: A) -> Box<dyn std::fmt::Display + '_>; + fn bar(&self, a: A, b: B) -> Box<dyn std::fmt::Display + '_>; + fn buz(&self) -> Box<dyn std::fmt::Display + '_>; } ``` If two method type parameters have the same name, dynamize enforces that they also have the same bounds and only adds the parameter once to the trait. +Note that in the dynamized trait calling the `buz` method now requires you to +specify both generic types, even though they aren't actually required by the +method. You can avoid this by splitting the original trait in two, i.e. moving +the `buz` method to a separate trait, which can be dynamized separately. + ## Dynamize supports async Dynamize supports async out of the box. Since Rust however does not yet support |