| use proc_macro2::TokenStream; |
| use quote::{quote, ToTokens}; |
| use syn::LitStr; |
| |
| pub struct Doc { |
| fragments: Vec<LitStr>, |
| } |
| |
| impl Doc { |
| pub fn new() -> Self { |
| Doc { |
| fragments: Vec::new(), |
| } |
| } |
| |
| pub fn push(&mut self, lit: LitStr) { |
| self.fragments.push(lit); |
| } |
| |
| pub 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])* |
| }); |
| } |
| } |