mirror of
https://github.com/topjohnwu/cxx.git
synced 2024-10-07 00:53:28 +00:00
47 lines
1.1 KiB
Rust
47 lines
1.1 KiB
Rust
use proc_macro2::TokenStream;
|
|
use quote::{quote, ToTokens};
|
|
use syn::LitStr;
|
|
|
|
pub(crate) struct Doc {
|
|
pub hidden: bool,
|
|
fragments: Vec<LitStr>,
|
|
}
|
|
|
|
impl Doc {
|
|
pub(crate) fn new() -> Self {
|
|
Doc {
|
|
hidden: false,
|
|
fragments: Vec::new(),
|
|
}
|
|
}
|
|
|
|
pub(crate) fn push(&mut self, lit: LitStr) {
|
|
self.fragments.push(lit);
|
|
}
|
|
|
|
#[allow(dead_code)] // only used by cxx-build, not cxxbridge-macro
|
|
pub(crate) fn is_empty(&self) -> bool {
|
|
self.fragments.is_empty()
|
|
}
|
|
|
|
#[allow(dead_code)] // only used by cxx-build, not cxxbridge-macro
|
|
pub(crate) fn to_string(&self) -> String {
|
|
let mut doc = String::new();
|
|
for lit in &self.fragments {
|
|
doc += &lit.value();
|
|
doc.push('\n');
|
|
}
|
|
doc
|
|
}
|
|
}
|
|
|
|
impl ToTokens for Doc {
|
|
fn to_tokens(&self, tokens: &mut TokenStream) {
|
|
let fragments = &self.fragments;
|
|
tokens.extend(quote! { #(#[doc = #fragments])* });
|
|
if self.hidden {
|
|
tokens.extend(quote! { #[doc(hidden)] });
|
|
}
|
|
}
|
|
}
|