schemars_derive/attr/
doc.rs1use 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}