Skip to main content

typed_quote/tokens/
const_lifetime.rs

1use core::fmt;
2
3use super::*;
4
5impl<T: HasConstLifetime + ?Sized> Default for ConstLifetime<T> {
6    fn default() -> Self {
7        Self::new()
8    }
9}
10
11impl<T: HasConstLifetime + ?Sized> ConstLifetime<T> {
12    pub const fn new() -> Self {
13        Self(PhantomData, NoSpan)
14    }
15}
16
17impl<T: HasConstLifetime + ?Sized, S: MaybeSpan> ConstLifetime<T, S> {
18    pub const fn as_lifetime(self) -> Lifetime<'static, S> {
19        Lifetime(T::LIFETIME.0, self.1)
20    }
21}
22
23impl<T: HasConstLifetime + ?Sized, S: MaybeSpan> Copy for ConstLifetime<T, S> {}
24impl<T: HasConstLifetime + ?Sized, S: MaybeSpan> Clone for ConstLifetime<T, S> {
25    fn clone(&self) -> Self {
26        *self
27    }
28}
29
30impl<T: HasConstLifetime + ?Sized, S: MaybeSpan + fmt::Debug> fmt::Debug for ConstLifetime<T, S> {
31    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
32        f.debug_tuple("ConstLifetime")
33            .field(&format_args!("{}", T::LIFETIME.0))
34            .field(&self.1)
35            .finish()
36    }
37}
38
39impl<T: HasConstLifetime + ?Sized, S: MaybeSpan> sealed::IntoTokens for ConstLifetime<T, S> {}
40impl<T: HasConstLifetime + ?Sized, S: MaybeSpan> IntoTokens for ConstLifetime<T, S> {
41    crate::impl_into_tokens!(|self, ts| (Lifetime(T::LIFETIME.0, self.1), ts).into_st());
42}
43
44impl<T: HasConstLifetime + ?Sized, S: MaybeSpan> sealed::ToTokens for ConstLifetime<T, S> {}
45impl<T: HasConstLifetime + ?Sized, S: MaybeSpan> ToTokens for ConstLifetime<T, S> {
46    crate::impl_to_tokens! {copy}
47}
48
49impl<T: HasConstLifetime + ?Sized, SO: MaybeSpan> sealed::WithSpan for ConstLifetime<T, SO> {}
50impl<T: HasConstLifetime + ?Sized, SO: MaybeSpan> WithSpan for ConstLifetime<T, SO> {
51    type WithDefaultSpan<S: crate::Span> = ConstLifetime<T, SO::WithDefaultSpan<S>>;
52
53    fn with_default_span<S: crate::Span>(self, span: S) -> Self::WithDefaultSpan<S> {
54        ConstLifetime(self.0, self.1.with_default_span(span))
55    }
56
57    type WithReplacedSpan<S: crate::Span> = ConstLifetime<T, SO::WithReplacedSpan<S>>;
58
59    fn with_replaced_span<S: crate::Span>(self, span: S) -> Self::WithReplacedSpan<S> {
60        ConstLifetime(self.0, self.1.with_replaced_span(span))
61    }
62}
63
64impl<T: HasConstLifetime + ?Sized, SO: MaybeSpan> sealed::RefWithSpan for ConstLifetime<T, SO> {}
65impl<T: HasConstLifetime + ?Sized, SO: MaybeSpan> RefWithSpan for ConstLifetime<T, SO> {
66    crate::impl_ref_with_span! {copy}
67}