Skip to content

Commit c9b9ae0

Browse files
committed
Abort earlier on invalid / unsupported ImplItem
Dealing with lists of results wasn't actually used for more fine-grained error handling, and was being somewhat annoying.
1 parent f7de79b commit c9b9ae0

File tree

2 files changed

+18
-29
lines changed

2 files changed

+18
-29
lines changed

uniffi_macros/src/export.rs

Lines changed: 14 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ pub(crate) fn expand_export(
4444
ExportItem::Impl { items, self_ident } => {
4545
let item_tokens: TokenStream = items
4646
.into_iter()
47-
.map(|item| match item? {
47+
.map(|item| match item {
4848
ImplItem::Constructor(sig) => gen_constructor_scaffolding(sig, &args),
4949
ImplItem::Method(sig) => gen_method_scaffolding(sig, &args),
5050
})
@@ -77,7 +77,7 @@ pub(crate) fn expand_export(
7777

7878
let impl_tokens: TokenStream = items
7979
.into_iter()
80-
.map(|item| match item? {
80+
.map(|item| match item {
8181
ImplItem::Method(sig) => gen_method_scaffolding(sig, &args),
8282
_ => unreachable!("traits have no constructors"),
8383
})
@@ -112,28 +112,15 @@ pub(crate) fn expand_export(
112112
Span::call_site(),
113113
);
114114

115-
let items = items.into_iter().collect::<syn::Result<Vec<_>>>();
116-
let trait_impl_and_metadata_tokens = match items {
117-
Ok(items) => {
118-
let trait_impl = callback_interface::trait_impl(
119-
&trait_impl_ident,
120-
&self_ident,
121-
&internals_ident,
122-
&items,
123-
)
124-
.unwrap_or_else(|e| e.into_compile_error());
125-
let metadata_items =
126-
callback_interface::metadata_items(&self_ident, &items, &mod_path)
127-
.unwrap_or_else(|e| vec![e.into_compile_error()]);
128-
129-
quote! {
130-
#trait_impl
131-
132-
#(#metadata_items)*
133-
}
134-
}
135-
Err(e) => e.into_compile_error(),
136-
};
115+
let trait_impl = callback_interface::trait_impl(
116+
&trait_impl_ident,
117+
&self_ident,
118+
&internals_ident,
119+
&items,
120+
)
121+
.unwrap_or_else(|e| e.into_compile_error());
122+
let metadata_items = callback_interface::metadata_items(&self_ident, &items, &mod_path)
123+
.unwrap_or_else(|e| vec![e.into_compile_error()]);
137124

138125
let init_ident = Ident::new(
139126
&uniffi_meta::init_callback_fn_symbol_name(&mod_path, &trait_name),
@@ -150,7 +137,9 @@ pub(crate) fn expand_export(
150137
#internals_ident.set_callback(callback);
151138
}
152139

153-
#trait_impl_and_metadata_tokens
140+
#trait_impl
141+
142+
#(#metadata_items)*
154143
})
155144
}
156145
}

uniffi_macros/src/export/item.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ pub(super) enum ExportItem {
1414
},
1515
Impl {
1616
self_ident: Ident,
17-
items: Vec<syn::Result<ImplItem>>,
17+
items: Vec<ImplItem>,
1818
},
1919
Trait {
2020
self_ident: Ident,
21-
items: Vec<syn::Result<ImplItem>>,
21+
items: Vec<ImplItem>,
2222
callback_interface: bool,
2323
},
2424
}
@@ -94,7 +94,7 @@ impl ExportItem {
9494

9595
Ok(item)
9696
})
97-
.collect();
97+
.collect::<syn::Result<_>>()?;
9898

9999
Ok(Self::Impl {
100100
items,
@@ -142,7 +142,7 @@ impl ExportItem {
142142

143143
Ok(item)
144144
})
145-
.collect();
145+
.collect::<syn::Result<_>>()?;
146146

147147
Ok(Self::Trait {
148148
items,

0 commit comments

Comments
 (0)