cxx_gen/syntax/doc.rs
1use proc_macro2::TokenStream;
2use quote::{quote, ToTokens};
3use syn::LitStr;
4
5pub(crate) struct Doc {
6 pub hidden: bool,
7 fragments: Vec<LitStr>,
8}
9
10impl Doc {
11 pub(crate) fn new() -> Self {
12 Doc {
13 hidden: false,
14 fragments: Vec::new(),
15 }
16 }
17
18 pub(crate) fn push(&mut self, lit: LitStr) {
19 self.fragments.push(lit);
20 }
21
22 #[allow(dead_code)] // only used by cxx-build, not cxxbridge-macro
23 pub(crate) fn is_empty(&self) -> bool {
24 self.fragments.is_empty()
25 }
26
27 #[allow(dead_code)] // only used by cxx-build, not cxxbridge-macro
28 pub(crate) fn to_string(&self) -> String {
29 let mut doc = String::new();
30 for lit in &self.fragments {
31 doc += &lit.value();
32 doc.push('\n');
33 }
34 doc
35 }
36}
37
38impl ToTokens for Doc {
39 fn to_tokens(&self, tokens: &mut TokenStream) {
40 let fragments = &self.fragments;
41 tokens.extend(quote! { #(#[doc = #fragments])* });
42 if self.hidden {
43 tokens.extend(quote! { #[doc(hidden)] });
44 }
45 }
46}