Makes it much clearer what the problem is, and where to find the invalid path
V5S5K33ALIEG5ZABUSAPO4ULHEBFDB2PLTW27A4BFS342SJG7URQC
NO3PDO7PY7J3WPADNCS5VD6HKFY63E23I3SDR4DHXNVQJTG27RAAC
UOMQT7LTURIIWHZT2ZHLCJG6XESYTN26EJC7IHRFR4PYJ355PNYAC
O77KA6C4UJGZXVGPEA7WCRQH6XYQJPWETSPDXI3VOKOSRQND7JEQC
SHNZZSZGIBTTD4IV5SMW5BIN5DORUWQVTVTNB5RMRD5CTFNOMJ6AC
WBI5HFOBBUMDSGKY2RX3YA6N7YDCJEP23JNEJ7PG5VZXHLYIRJRQC
UKFEFT6LSI4K7X6UHQFZYD52DILKXMZMYSO2UYS2FCHNPXIF4BEQC
VNSHGQYNPGKGGPYNVP4Z2RWD7JCSDJVYAADD6UXWBYL6ZRXKLE4AC
56F2YE6HUZ76U4QBPUDJ2VQLJ75TQYNTVQIOX4QBOZ2H6GJKRGUQC
pub fn localize(path: &syn::LitStr, derive_input: &DeriveInput) -> TokenStream {
let group = attribute_groups(path);
pub fn localize(
path: &syn::LitStr,
derive_input: &DeriveInput,
) -> Result<TokenStream, wax::GlobError> {
let group = attribute_groups(path)?;
let parsed_attribute: syn::LitStr = parse_macro_input!(attribute);
let parsed_input = parse_macro_input!(item as DeriveInput);
let derive_attribute: syn::LitStr = parse_macro_input!(attribute);
let derive_input = parse_macro_input!(item);
let implementation = fluent_embed::localize(&parsed_attribute, &parsed_input);
let implementation = match fluent_embed::localize(&derive_attribute, &derive_input) {
Ok(implementation) => implementation,
Err(glob_error) => {
// Emit the relevant error messages
match glob_error {
GlobError::Build(_build_error) => todo!(),
GlobError::Walk(walk_error) => {
// Generate help text
let help = if let Some(path) = walk_error.path() {
let path_name = path.to_str().unwrap();
// Might hit an error if file exists but insufficient permissions
match path.try_exists() {
Ok(true) => {
format!("the path `{path_name}` exists, but unable to access it")
}
_ => format!("the path `{path_name}` doesn't seem to exist"),
}
} else {
String::from("no associated path")
};
emit_error! { derive_attribute, "error at depth {} while walking path", walk_error.depth();
help = help;
}
}
};
// Generate a minimal `localize()` implementation so the error is self-contained
let ident = &derive_input.ident;
quote! {
impl #ident {
fn localize(&self) -> String {
unimplemented!("Encountered error in proc-macro")
}
}
}
}
};
"syn",
"syn 2.0.48",
]
[[package]]
name = "proc-macro-error"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
dependencies = [
"proc-macro-error-attr",
"proc-macro2",
"quote",
"syn 1.0.109",
"version_check",
]
[[package]]
name = "proc-macro-error-attr"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
dependencies = [
"proc-macro2",
"quote",
"version_check",