Skip to content

Commit eff358d

Browse files
authored
Merge pull request #2 from KodrAus/chore/remove-try-iter
Remove `try_iter` macro
2 parents d62b6fc + 6616700 commit eff358d

File tree

2 files changed

+30
-53
lines changed

2 files changed

+30
-53
lines changed

src/impl_as_ref.rs

Lines changed: 29 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -11,42 +11,40 @@ use model::*;
1111
pub fn build(component: &AutoImpl, ref_ty: Trait) -> Result<Tokens, String> {
1212
let component_ident = &component.ident;
1313

14-
let impl_methods = try_iter!(
15-
component.methods.iter()
16-
.map(|method| {
17-
let valid_receiver = match method.arg_self {
18-
Some(ref arg_self) => match *arg_self {
19-
SelfArg::Ref(_, syn::Mutability::Immutable) => true,
20-
_ => false
21-
},
22-
None => false
23-
};
24-
25-
if !valid_receiver {
26-
Err(format!("auto impl for `{}` is only supported for methods with a `&self` reciever", ref_ty))?
27-
}
28-
29-
method.build_impl_item(|method| {
30-
let fn_ident = &method.ident;
31-
let fn_args = &method.arg_pats;
32-
33-
quote!({
34-
self.as_ref().#fn_ident( #(#fn_args),* )
35-
})
14+
let impl_methods = component.methods.iter()
15+
.map(|method| {
16+
let valid_receiver = match method.arg_self {
17+
Some(ref arg_self) => match *arg_self {
18+
SelfArg::Ref(_, syn::Mutability::Immutable) => true,
19+
_ => false
20+
},
21+
None => false
22+
};
23+
24+
if !valid_receiver {
25+
Err(format!("auto impl for `{}` is only supported for methods with a `&self` reciever", ref_ty))?
26+
}
27+
28+
method.build_impl_item(|method| {
29+
let fn_ident = &method.ident;
30+
let fn_args = &method.arg_pats;
31+
32+
quote!({
33+
self.as_ref().#fn_ident( #(#fn_args),* )
3634
})
3735
})
38-
);
36+
})
37+
.collect::<Result<Vec<_>, _>>()?;
3938

40-
let impl_associated_types = try_iter!(
41-
component.associated_types.iter()
42-
.map(|associated_type| {
43-
associated_type.build_impl_item(|associated_type| {
44-
let ty_ident = &associated_type.ident;
39+
let impl_associated_types = component.associated_types.iter()
40+
.map(|associated_type| {
41+
associated_type.build_impl_item(|associated_type| {
42+
let ty_ident = &associated_type.ident;
4543

46-
quote!(TAutoImpl :: #ty_ident)
47-
})
44+
quote!(TAutoImpl :: #ty_ident)
4845
})
49-
);
46+
})
47+
.collect::<Result<Vec<_>, _>>()?;
5048

5149
let (trait_tys, impl_lifetimes, impl_tys, where_clauses) = component.split_generics();
5250

src/lib.rs

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,25 +8,6 @@ include!("lib.proc_macro.rs");
88
extern crate quote;
99
extern crate syn;
1010

11-
macro_rules! try_iter {
12-
($vec_expr:expr) => ({
13-
let v: Vec<_> = $vec_expr.collect();
14-
15-
if let Some(err) = v.iter().find(|res| res.is_err()) {
16-
match *err {
17-
Err(ref err) => Err(err.clone())?,
18-
_ => unreachable!()
19-
}
20-
}
21-
22-
let v: Vec<_> = v.into_iter()
23-
.filter_map(Result::ok)
24-
.collect();
25-
26-
v
27-
})
28-
}
29-
3011
mod model;
3112
mod impl_as_ref;
3213
mod impl_fn;
@@ -80,9 +61,7 @@ fn parse_impl_types(tokens: Tokens) -> Result<Vec<ImplForTrait>, String> {
8061
_ => Err(IMPL_FOR_TRAIT_ERR)?
8162
};
8263

83-
let idents = try_iter!(idents.into_iter());
84-
85-
Ok(idents)
64+
idents.into_iter().collect()
8665
}
8766

8867
fn auto_impl_expand(impl_for_traits: &[ImplForTrait], tokens: Tokens) -> Result<Tokens, String> {

0 commit comments

Comments
 (0)