pub(crate) mod internal;
use proc_macro_crate::crate_name;
use quote::quote;
use syn::DeriveInput;
use syn::Meta;
use syn::Path;
use syn::Result;
use syn::Token;
use syn::parse_quote;
use syn::parse2;
use syn::punctuated::Punctuated;
pub(crate) fn resolve(input: &DeriveInput) -> Result<Path> {
for attribute in input
.attrs
.iter()
.filter(|attribute| attribute.path().is_ident("redact"))
{
if !matches!(attribute.meta, Meta::List(_)) {
continue;
}
let Ok(items) = attribute.parse_args_with(Punctuated::<Meta, Token![,]>::parse_terminated) else {
continue;
};
for item in items {
if let Meta::NameValue(value) = item
&& value.path.is_ident("crate")
{
let expression = value.value;
return parse2(quote!(#expression));
}
}
}
internal::resolve(
input,
crate_name("qubit-redact"),
parse_quote!(crate),
"unable to resolve the qubit-redact runtime crate",
)
}