Diffstat (limited to 'src/any/static_wrapper.rs')
-rw-r--r--src/any/static_wrapper.rs60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/any/static_wrapper.rs b/src/any/static_wrapper.rs
new file mode 100644
index 0000000..cd687ce
--- /dev/null
+++ b/src/any/static_wrapper.rs
@@ -0,0 +1,60 @@
+//! Wrapper types that impl [`TypeNameable`] when their generic type is `'static`.
+
+use super::*;
+
+/// Impl of [`TypeNameable`] for `'static` types that are owned (`T`).
+pub struct OwnedStatic<T: ?Sized>(pub T);
+
+nameable! {
+ pub struct Name['a, 'lt, T];
+ impl [T] for OwnedStatic<T> where { T: 'static }
+ impl [T] where OwnedStatic<T> { T: 'static }
+}
+
+/// Impl of [`TypeNameable`] for `'static` types that are borrowed (`&'lt T`).
+pub struct BorrowedStatic<'lt, T: ?Sized>(pub &'lt T);
+
+nameable! {
+ pub struct Name['a, 'lt, T];
+ impl [T] for BorrowedStatic<'lt, T> where { T: 'static, 'lt: 'a }
+ impl [T] where BorrowedStatic<'lt, T> { T: 'static, 'lt: 'a }
+}
+
+/// Impl of [`TypeNameable`] for `'static` types that are temporarily borrowed (`&'a T`).
+pub struct TempBorrowedStatic<'a, T: ?Sized>(pub &'a T);
+
+nameable! {
+ pub struct Name['a, 'lt, T];
+ impl [T] for TempBorrowedStatic<'a, T> where { T: 'static }
+ impl [T] where TempBorrowedStatic<'a, T> { T: 'static }
+}
+
+/// Impl of [`TypeNameable`] for `'static` types that are borrowed mutably (`&'lt mut T`).
+pub struct BorrowedMutStatic<'lt, T: ?Sized>(pub &'lt mut T);
+
+nameable! {
+ pub struct Name['a, 'lt, T];
+ impl [T] for BorrowedMutStatic<'lt, T> where { T: 'static, 'lt: 'a }
+ impl [T] where BorrowedMutStatic<'lt, T> { T: 'static, 'lt: 'a }
+}
+
+/// Impl of [`TypeNameable`] for `'static` types that are temporarily borrowed mutably (`&'a mut T`).
+pub struct TempBorrowedMutStatic<'a, T: ?Sized>(pub &'a mut T);
+
+nameable! {
+ pub struct Name['a, 'lt, T];
+ impl [T] for TempBorrowedMutStatic<'a, T> where { T: 'static }
+ impl [T] where TempBorrowedMutStatic<'a, T> { T: 'static }
+}
+
+/// Impl of [`TypeNameable`] for `'static` types that are in a [`Box`] (`Box<T>`).
+#[cfg(feature = "alloc")]
+pub struct BoxedStatic<T: ?Sized>(pub Box<T>);
+
+#[cfg(feature = "alloc")]
+nameable! {
+ pub struct Name['a, 'lt, T];
+ impl [T] for BoxedStatic<T> where { T: 'static }
+ impl [T] where BoxedStatic<T> { T: 'static }
+}
+