summaryrefslogtreecommitdiff
path: root/src/codegen/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/codegen/mod.rs')
-rw-r--r--src/codegen/mod.rs38
1 files changed, 32 insertions, 6 deletions
diff --git a/src/codegen/mod.rs b/src/codegen/mod.rs
index f5e898ad..5ac8dc11 100644
--- a/src/codegen/mod.rs
+++ b/src/codegen/mod.rs
@@ -3728,18 +3728,44 @@ impl CodeGenerator for ObjCInterface {
let trait_name = ctx.rust_ident(self.rust_name());
- let trait_block = quote! {
- pub trait #trait_name {
- #( #trait_items )*
+ let trait_block = if self.is_template() {
+ let template_names: Vec<Ident> = self
+ .template_names
+ .iter()
+ .map(|g| ctx.rust_ident(g))
+ .collect();
+ quote! {
+ pub trait #trait_name <#(#template_names),*>{
+ #( #trait_items )*
+ }
+ }
+ } else {
+ quote! {
+ pub trait #trait_name {
+ #( #trait_items )*
+ }
}
};
let ty_for_impl = quote! {
id
};
- let impl_block = quote! {
- impl #trait_name for #ty_for_impl {
- #( #impl_items )*
+ let impl_block = if self.is_template() {
+ let template_names: Vec<Ident> = self
+ .template_names
+ .iter()
+ .map(|g| ctx.rust_ident(g))
+ .collect();
+ quote! {
+ impl <#(#template_names :'static),*> #trait_name <#(#template_names),*> for #ty_for_impl {
+ #( #impl_items )*
+ }
+ }
+ } else {
+ quote! {
+ impl #trait_name for #ty_for_impl {
+ #( #impl_items )*
+ }
}
};