+ } else if let syn::Type::Tuple(t) = &*s.elem {
+ assert!(!t.elems.is_empty());
+ if prefix {
+ write!(w, "&local_").unwrap();
+ } else {
+ let mut needs_map = false;
+ for e in t.elems.iter() {
+ if let syn::Type::Reference(_) = e {
+ needs_map = true;
+ }
+ }
+ if needs_map {
+ write!(w, ".iter().map(|(").unwrap();
+ for i in 0..t.elems.len() {
+ write!(w, "{}{}", if i != 0 { ", " } else { "" }, ('a' as u8 + i as u8) as char).unwrap();
+ }
+ write!(w, ")| (").unwrap();
+ for (idx, e) in t.elems.iter().enumerate() {
+ if let syn::Type::Reference(_) = e {
+ write!(w, "{}{}", if idx != 0 { ", " } else { "" }, (idx as u8 + 'a' as u8) as char).unwrap();
+ } else if let syn::Type::Path(_) = e {
+ write!(w, "{}*{}", if idx != 0 { ", " } else { "" }, (idx as u8 + 'a' as u8) as char).unwrap();
+ } else { unimplemented!(); }
+ }
+ write!(w, ")).collect::<Vec<_>>()[..]").unwrap();
+ }
+ }