aboutsummaryrefslogtreecommitdiff
path: root/src/ident_fragment.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/ident_fragment.rs')
-rw-r--r--src/ident_fragment.rs20
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);