pub package_name: String,
pub file_name: Option<String>,
pub lib_name: Option<String>,
+ pub write: Option<bool>,
}
fn is_ident_check_dup<T>(path: &syn::Path, var: &Option<T>, what: &'static str) -> bool {
let mut package_name = None;
let mut file_name = None;
let mut lib_name = None;
+ let mut write = None;
for arg in args {
match arg {
error!(path => "unknown argument");
}
}
+ syn::NestedMeta::Meta(syn::Meta::NameValue(syn::MetaNameValue {
+ path,
+ lit: syn::Lit::Bool(litbool),
+ ..
+ })) => {
+ if is_ident_check_dup(&path, &write, "write") {
+ write = Some(litbool.value());
+ } else {
+ error!(path => "unknown argument");
+ }
+ }
_ => error!(Span::call_site(), "unexpected attribute argument"),
}
}
package_name,
file_name,
lib_name,
+ write,
})
}
}
items.push(syn::Item::Verbatim(package.bootstrap_function()));
}
- if package.attrs.file_name.is_some()
- || package.attrs.lib_name.is_some()
+ if package.attrs.write == Some(true)
+ || package.attrs.file_name.is_some()
|| std::env::var("PERLMOD_WRITE_PACKAGES").ok().as_deref() == Some("1")
{
package.write()?;