Skip to main content

typed_quote/tokens/
const_ident.rs

1use core::fmt;
2
3use super::*;
4
5impl<T: HasConstIdent + ?Sized> Default for ConstIdent<T> {
6    fn default() -> Self {
7        Self::new()
8    }
9}
10
11impl<T: HasConstIdent + ?Sized> ConstIdent<T> {
12    pub const fn new() -> Self {
13        Self(PhantomData, NoSpan)
14    }
15}
16
17impl<T: HasConstIdent + ?Sized, S: MaybeSpan> ConstIdent<T, S> {
18    pub const fn as_ident(self) -> Ident<'static, S> {
19        Ident(T::IDENT.0, self.1)
20    }
21}
22
23// not public api
24pub enum Underscore {}
25
26impl HasConstIdent for Underscore {
27    const IDENT: Ident<'static> = Ident("_", NoSpan);
28}
29
30impl ConstIdent<Underscore> {
31    pub const UNDERSCORE: Self = Self::new();
32}
33
34impl<T: HasConstIdent + ?Sized, S: MaybeSpan> Copy for ConstIdent<T, S> {}
35impl<T: HasConstIdent + ?Sized, S: MaybeSpan> Clone for ConstIdent<T, S> {
36    fn clone(&self) -> Self {
37        *self
38    }
39}
40
41impl<T: HasConstIdent + ?Sized, S: MaybeSpan + fmt::Debug> fmt::Debug for ConstIdent<T, S> {
42    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
43        f.debug_tuple("ConstIdent")
44            .field(&format_args!("{}", T::IDENT.0))
45            .field(&self.1)
46            .finish()
47    }
48}
49
50impl<T: HasConstIdent + ?Sized, S: MaybeSpan> sealed::IntoTokenTree for ConstIdent<T, S> {}
51impl<T: HasConstIdent + ?Sized, S: MaybeSpan> IntoTokenTree for ConstIdent<T, S> {
52    crate::impl_into_token_tree!(|self| Ident(T::IDENT.0, self.1).into_st());
53}
54
55impl<T: HasConstIdent + ?Sized, S: MaybeSpan> sealed::ToTokenTree for ConstIdent<T, S> {}
56impl<T: HasConstIdent + ?Sized, S: MaybeSpan> ToTokenTree for ConstIdent<T, S> {
57    crate::impl_to_token_tree! {copy}
58}
59
60impl<T: HasConstIdent + ?Sized, S: MaybeSpan> sealed::IntoTokens for ConstIdent<T, S> {}
61impl<T: HasConstIdent + ?Sized, S: MaybeSpan> IntoTokens for ConstIdent<T, S> {
62    crate::impl_into_tokens! {tt}
63}
64
65impl<T: HasConstIdent + ?Sized, S: MaybeSpan> sealed::ToTokens for ConstIdent<T, S> {}
66impl<T: HasConstIdent + ?Sized, S: MaybeSpan> ToTokens for ConstIdent<T, S> {
67    crate::impl_to_tokens! {copy}
68}
69
70impl<T: HasConstIdent + ?Sized, SO: MaybeSpan> sealed::WithSpan for ConstIdent<T, SO> {}
71impl<T: HasConstIdent + ?Sized, SO: MaybeSpan> WithSpan for ConstIdent<T, SO> {
72    type WithDefaultSpan<S: crate::Span> = ConstIdent<T, SO::WithDefaultSpan<S>>;
73
74    fn with_default_span<S: crate::Span>(self, span: S) -> Self::WithDefaultSpan<S> {
75        ConstIdent(self.0, self.1.with_default_span(span))
76    }
77
78    type WithReplacedSpan<S: crate::Span> = ConstIdent<T, SO::WithReplacedSpan<S>>;
79
80    fn with_replaced_span<S: crate::Span>(self, span: S) -> Self::WithReplacedSpan<S> {
81        ConstIdent(self.0, self.1.with_replaced_span(span))
82    }
83}
84
85impl<T: HasConstIdent + ?Sized, SO: MaybeSpan> sealed::RefWithSpan for ConstIdent<T, SO> {}
86impl<T: HasConstIdent + ?Sized, SO: MaybeSpan> RefWithSpan for ConstIdent<T, SO> {
87    crate::impl_ref_with_span! {copy}
88}