use syn::parse_quote;
pub(crate) fn read_attr(attr: &syn::Attribute) -> Option<String> {
Some(trim_doc_first_sp(&doc_val(attr)?).to_string())
}
pub(crate) fn read_attrs(attrs: &[syn::Attribute]) -> String {
attrs
.iter()
.filter_map(read_attr)
.collect::<Vec<_>>()
.join("\n")
}
pub(crate) fn to_attr(text: &str) -> syn::Attribute {
parse_quote!(#[doc = #text])
}
fn trim_doc_first_sp(text: &str) -> &str {
text.strip_prefix(" ").unwrap_or(text)
}
fn doc_val(attr: &syn::Attribute) -> Option<String> {
let syn::Meta::NameValue(ref nv) = attr.meta else {
return None;
};
let syn::Expr::Lit(ref value) = nv.value else {
return None;
};
let syn::Lit::Str(ref value) = value.lit else {
return None;
};
nv.path.is_ident("doc").then(|| value.value())
}