diff options
author | Martin Fischer <martin@push-f.com> | 2021-11-20 18:53:55 +0100 |
---|---|---|
committer | Martin Fischer <martin@push-f.com> | 2021-11-20 19:19:29 +0100 |
commit | 9044eb941a310e4120dab93a43e6630efef72e4a (patch) | |
tree | 40940640b1ace6a11a6b89ea04a0d70b1f67e38a /src | |
parent | 3170127a4ef79c43018775934c7e0444dc828b2d (diff) |
assert that dynamized traits are object-safe
Diffstat (limited to 'src')
-rw-r--r-- | src/lib.rs | 10 |
1 files changed, 10 insertions, 0 deletions
@@ -308,12 +308,18 @@ pub fn dynamize(_attr: TokenStream, input: TokenStream) -> TokenStream { let blanket_impl = generate_blanket_impl(&dyn_trait, &original_trait, &method_impls); + let dyn_trait_name = &dyn_trait.ident; + let (impl_generics, ty_generics, where_clause) = dyn_trait.generics.split_for_impl(); + let expanded = quote! { #original_trait #(#dyn_trait_attrs)* #dyn_trait + // assert that dyn_trait can actually be made into an object + impl #impl_generics dyn #dyn_trait_name #ty_generics #where_clause {} + #(#blanket_impl_attrs)* #blanket_impl }; @@ -432,3 +438,7 @@ fn path_segment_for_trait(sometrait: &ItemTrait) -> PathSegment { }, } } + +#[doc = include_str!("../tests/doctests.md")] +#[cfg(doctest)] +struct Doctests; |