Skip to main content

moxy_token/span/
delim.rs

1use crate::Span;
2
3#[derive(Debug, Copy, Clone)]
4#[cfg_attr(feature = "serde", derive(serde::Serialize))]
5pub struct DelimSpan {
6    open: Span,
7    close: Span,
8}
9
10impl Default for DelimSpan {
11    fn default() -> Self {
12        Self::new(Span::call_site(), Span::call_site())
13    }
14}
15
16// Equality ignores the spans so AST nodes embedding a `DelimSpan` (directly or
17// via a delimiter token) compare structurally.
18impl PartialEq for DelimSpan {
19    fn eq(&self, _: &Self) -> bool {
20        true
21    }
22}
23
24impl Eq for DelimSpan {}
25
26impl std::hash::Hash for DelimSpan {
27    fn hash<H: std::hash::Hasher>(&self, _: &mut H) {}
28}
29
30impl DelimSpan {
31    #[inline]
32    pub fn new(open: Span, close: Span) -> Self {
33        Self { open, close }
34    }
35
36    #[inline]
37    pub fn open(&self) -> Span {
38        self.open
39    }
40
41    #[inline]
42    pub fn close(&self) -> Span {
43        self.close
44    }
45
46    #[inline]
47    pub fn span(&self) -> Span {
48        self.open.join(self.close)
49    }
50}
51
52impl From<DelimSpan> for Span {
53    #[inline]
54    fn from(value: DelimSpan) -> Self {
55        value.span()
56    }
57}