schemars_derive/attr/
doc.rs

1use proc_macro2::TokenStream;
2use quote::ToTokens;
3use syn::{Attribute, Expr, ExprLit, Lit};
4
5pub fn get_doc(attrs: &[Attribute]) -> Option<Expr> {
6    let mut macro_args: TokenStream = TokenStream::new();
7
8    for (i, line) in attrs
9        .iter()
10        .filter(|a| a.path().is_ident("doc"))
11        .flat_map(|a| a.meta.require_name_value())
12        .enumerate()
13    {
14        if i > 0 {
15            macro_args.extend([quote!(, "\n",)]);
16        }
17
18        if let Expr::Lit(ExprLit {
19            lit: Lit::Str(lit_str),
20            ..
21        }) = &line.value
22        {
23            if let Some(trimmed) = lit_str.value().strip_prefix(' ') {
24                trimmed.to_tokens(&mut macro_args);
25                continue;
26            }
27        }
28
29        line.value.to_tokens(&mut macro_args);
30    }
31
32    if macro_args.is_empty() {
33        None
34    } else {
35        Some(parse_quote!(::core::concat!(#macro_args)))
36    }
37}