manual_flag should only check the first struct field

This commit is contained in:
jake 2019-11-09 23:06:43 -08:00
parent ed16a717f6
commit b692b8b417

View File

@ -374,27 +374,19 @@ pub fn pso_packet(attr: TokenStream, item: TokenStream) -> TokenStream {
}; };
if manual_flag { if manual_flag {
let mut found_flag = false; match &attrs[0] {
for attr in attrs.iter() {
match attr {
AttrType::Array(_, ident, _, _) => { AttrType::Array(_, ident, _, _) => {
if ident.to_string() == "flag" { if ident.to_string() != "flag" {
found_flag = true; return syn::Error::new(pkt_struct.ident.span(), "struct must have flag as the first field if manual_flag is set").to_compile_error().into();
break;
} }
}, },
AttrType::Value(_, ident, _) => { AttrType::Value(_, ident, _) => {
if ident.to_string() == "flag" { if ident.to_string() != "flag" {
found_flag = true; return syn::Error::new(pkt_struct.ident.span(), "struct must have flag as the first field if manual_flag is set").to_compile_error().into();
break;
} }
} }
} }
} }
if !found_flag {
return syn::Error::new(pkt_struct.ident.span(), "struct must have flag if manual_flag is set").to_compile_error().into();
}
}
let struct_def = generate_struct_def(pkt_struct.ident.clone(), &attrs); let struct_def = generate_struct_def(pkt_struct.ident.clone(), &attrs);
let psopacket_impl = generate_psopacket_impl(cmd, pkt_struct.ident.clone(), &attrs, flag); let psopacket_impl = generate_psopacket_impl(cmd, pkt_struct.ident.clone(), &attrs, flag);