133d722a9Sopenharmony_ciuse proc_macro2::TokenStream;
233d722a9Sopenharmony_ciuse quote::{quote, ToTokens};
333d722a9Sopenharmony_ciuse syn::LitStr;
433d722a9Sopenharmony_ci
533d722a9Sopenharmony_cipub struct Doc {
633d722a9Sopenharmony_ci    pub(crate) hidden: bool,
733d722a9Sopenharmony_ci    fragments: Vec<LitStr>,
833d722a9Sopenharmony_ci}
933d722a9Sopenharmony_ci
1033d722a9Sopenharmony_ciimpl Doc {
1133d722a9Sopenharmony_ci    pub fn new() -> Self {
1233d722a9Sopenharmony_ci        Doc {
1333d722a9Sopenharmony_ci            hidden: false,
1433d722a9Sopenharmony_ci            fragments: Vec::new(),
1533d722a9Sopenharmony_ci        }
1633d722a9Sopenharmony_ci    }
1733d722a9Sopenharmony_ci
1833d722a9Sopenharmony_ci    pub fn push(&mut self, lit: LitStr) {
1933d722a9Sopenharmony_ci        self.fragments.push(lit);
2033d722a9Sopenharmony_ci    }
2133d722a9Sopenharmony_ci
2233d722a9Sopenharmony_ci    #[allow(dead_code)] // only used by cxx-build, not cxxbridge-macro
2333d722a9Sopenharmony_ci    pub fn is_empty(&self) -> bool {
2433d722a9Sopenharmony_ci        self.fragments.is_empty()
2533d722a9Sopenharmony_ci    }
2633d722a9Sopenharmony_ci
2733d722a9Sopenharmony_ci    #[allow(dead_code)] // only used by cxx-build, not cxxbridge-macro
2833d722a9Sopenharmony_ci    pub fn to_string(&self) -> String {
2933d722a9Sopenharmony_ci        let mut doc = String::new();
3033d722a9Sopenharmony_ci        for lit in &self.fragments {
3133d722a9Sopenharmony_ci            doc += &lit.value();
3233d722a9Sopenharmony_ci            doc.push('\n');
3333d722a9Sopenharmony_ci        }
3433d722a9Sopenharmony_ci        doc
3533d722a9Sopenharmony_ci    }
3633d722a9Sopenharmony_ci}
3733d722a9Sopenharmony_ci
3833d722a9Sopenharmony_ciimpl ToTokens for Doc {
3933d722a9Sopenharmony_ci    fn to_tokens(&self, tokens: &mut TokenStream) {
4033d722a9Sopenharmony_ci        let fragments = &self.fragments;
4133d722a9Sopenharmony_ci        tokens.extend(quote! { #(#[doc = #fragments])* });
4233d722a9Sopenharmony_ci        if self.hidden {
4333d722a9Sopenharmony_ci            tokens.extend(quote! { #[doc(hidden)] });
4433d722a9Sopenharmony_ci        }
4533d722a9Sopenharmony_ci    }
4633d722a9Sopenharmony_ci}
47