pso_packet manual_flag attribute
This commit is contained in:
parent
7dfd9205e5
commit
d9b897d193
@ -342,6 +342,7 @@ pub fn pso_packet(attr: TokenStream, item: TokenStream) -> TokenStream {
|
||||
let args = parse_macro_input!(attr as syn::AttributeArgs);
|
||||
let mut cmd = 0;
|
||||
let mut flag = true;
|
||||
let mut manual_flag = false;
|
||||
for a in args {
|
||||
match &a {
|
||||
NestedMeta::Lit(lit) => {
|
||||
@ -353,6 +354,10 @@ pub fn pso_packet(attr: TokenStream, item: TokenStream) -> TokenStream {
|
||||
if let syn::Meta::Path(syn::Path {segments, ..}) = k {
|
||||
match segments[0].ident.to_string().as_str() {
|
||||
"no_flag" => flag = false,
|
||||
"manual_flag" => {
|
||||
flag = false;
|
||||
manual_flag = true;
|
||||
},
|
||||
_ => {
|
||||
return syn::Error::new(segments[0].ident.span(), "unknown macro param").to_compile_error().into();
|
||||
}
|
||||
@ -368,6 +373,29 @@ pub fn pso_packet(attr: TokenStream, item: TokenStream) -> TokenStream {
|
||||
Err(err) => return err
|
||||
};
|
||||
|
||||
if manual_flag {
|
||||
let mut found_flag = false;
|
||||
for attr in attrs.iter() {
|
||||
match attr {
|
||||
AttrType::Array(_, ident, _, _) => {
|
||||
if ident.to_string() == "flag" {
|
||||
found_flag = true;
|
||||
break;
|
||||
}
|
||||
},
|
||||
AttrType::Value(_, ident, _) => {
|
||||
if ident.to_string() == "flag" {
|
||||
found_flag = true;
|
||||
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 psopacket_impl = generate_psopacket_impl(cmd, pkt_struct.ident.clone(), &attrs, flag);
|
||||
let debug_impl = generate_debug_impl(pkt_struct.ident.clone(), &attrs);
|
||||
|
Loading…
x
Reference in New Issue
Block a user