use paste::paste; #[test] fn test_paste_doc() { macro_rules! m { ($ret:ident) => { paste! { #[doc = "Create a new [`" $ret "`] object."] fn new() -> $ret { todo!() } } }; } struct Paste; m!(Paste); let _ = new; } macro_rules! get_doc { (#[doc = $literal:tt]) => { $literal }; } #[test] fn test_escaping() { let doc = paste! { get_doc!(#[doc = "s\"" r#"r#""#]) }; let expected = "s\"r#\""; assert_eq!(doc, expected); } #[test] fn test_literals() { let doc = paste! { get_doc!(#[doc = "int=" 0x1 " bool=" true " float=" 0.01]) }; let expected = "int=0x1 bool=true float=0.01"; assert_eq!(doc, expected); } #[test] fn test_case() { let doc = paste! { get_doc!(#[doc = "HTTP " get:upper "!"]) }; let expected = "HTTP GET!"; assert_eq!(doc, expected); } // https://github.com/dtolnay/paste/issues/63 #[test] fn test_stringify() { macro_rules! create { ($doc:expr) => { paste! { #[doc = $doc] pub struct Struct; } }; } macro_rules! forward { ($name:ident) => { create!(stringify!($name)); }; } forward!(documentation); let _ = Struct; }