Upgrade rust/crates/structopt-derive to 0.4.13

Test: make
Change-Id: I041d50a4e492974710b8bc993baca196554bd370
diff --git a/src/ty.rs b/src/ty.rs
old mode 100644
new mode 100755
index 89d8b00..ad3acd9
--- a/src/ty.rs
+++ b/src/ty.rs
@@ -63,6 +63,8 @@
 where
     F: FnOnce(&PathSegment) -> bool,
 {
+    let ty = strip_group(ty);
+
     only_last_segment(ty)
         .filter(|segment| f(segment))
         .and_then(|segment| {
@@ -85,6 +87,8 @@
 }
 
 pub fn is_simple_ty(ty: &syn::Type, name: &str) -> bool {
+    let ty = strip_group(ty);
+
     only_last_segment(ty)
         .map(|segment| {
             if let PathArguments::None = segment.arguments {
@@ -96,6 +100,23 @@
         .unwrap_or(false)
 }
 
+// If the struct is placed inside of a macro_rules! declaration,
+// in some circumstances, the tokens inside will be enclosed
+// in `proc_macro::Group` delimited by invisible `proc_macro::Delimiter::None`.
+//
+// In syn speak, this is encoded via `*::Group` variants. We don't really care about
+// that, so let's just strip it.
+//
+// Details: https://doc.rust-lang.org/proc_macro/enum.Delimiter.html#variant.None
+// See also: https://github.com/TeXitoi/structopt/issues/439
+fn strip_group(mut ty: &syn::Type) -> &syn::Type {
+    while let Type::Group(group) = ty {
+        ty = &*group.elem;
+    }
+
+    ty
+}
+
 fn is_generic_ty(ty: &syn::Type, name: &str) -> bool {
     subty_if_name(ty, name).is_some()
 }