diff options
Diffstat (limited to 'src/ident_fragment.rs')
-rw-r--r-- | src/ident_fragment.rs | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/src/ident_fragment.rs b/src/ident_fragment.rs index 09ead65..e7472fe 100644 --- a/src/ident_fragment.rs +++ b/src/ident_fragment.rs @@ -1,4 +1,5 @@ use proc_macro2::{Ident, Span}; +use std::borrow::Cow; use std::fmt; /// Specialized formatting trait used by `format_ident!`. @@ -19,7 +20,7 @@ pub trait IdentFragment { } } -impl<'a, T: IdentFragment + ?Sized> IdentFragment for &'a T { +impl<T: IdentFragment + ?Sized> IdentFragment for &T { fn span(&self) -> Option<Span> { <T as IdentFragment>::span(*self) } @@ -29,7 +30,7 @@ impl<'a, T: IdentFragment + ?Sized> IdentFragment for &'a T { } } -impl<'a, T: IdentFragment + ?Sized> IdentFragment for &'a mut T { +impl<T: IdentFragment + ?Sized> IdentFragment for &mut T { fn span(&self) -> Option<Span> { <T as IdentFragment>::span(*self) } @@ -54,6 +55,19 @@ impl IdentFragment for Ident { } } +impl<T> IdentFragment for Cow<'_, T> +where + T: IdentFragment + ToOwned + ?Sized, +{ + fn span(&self) -> Option<Span> { + T::span(self) + } + + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + T::fmt(self, f) + } +} + // Limited set of types which this is implemented for, as we want to avoid types // which will often include non-identifier characters in their `Display` impl. macro_rules! ident_fragment_display { @@ -68,5 +82,5 @@ macro_rules! ident_fragment_display { } } -ident_fragment_display!(bool, str, String); +ident_fragment_display!(bool, str, String, char); ident_fragment_display!(u8, u16, u32, u64, u128, usize); |