1use crate::priv_prelude::*;
2
3macro_rules! define_brackets (
4 ($ty_name:ident) => {
5 #[derive(Clone, Debug, Serialize)]
6 pub struct $ty_name<T> {
7 pub inner: T,
8 pub span: Span,
9 }
10
11 impl<T> $ty_name<T> {
12 pub fn new(inner: T, span: Span) -> $ty_name<T> {
13 $ty_name {
14 inner,
15 span,
16 }
17 }
18
19 pub fn get(&self) -> &T {
20 &self.inner
21 }
22
23 pub fn into_inner(self) -> T {
24 self.inner
25 }
26 }
27
28 impl<T> Spanned for $ty_name<T> {
29 fn span(&self) -> Span {
30 self.span.clone()
31 }
32 }
33 };
34);
35
36define_brackets!(Braces);
37define_brackets!(Parens);
38define_brackets!(SquareBrackets);
39
40#[derive(Clone, Debug, Serialize)]
41pub struct AngleBrackets<T> {
42 pub open_angle_bracket_token: OpenAngleBracketToken,
43 pub inner: T,
44 pub close_angle_bracket_token: CloseAngleBracketToken,
45}
46
47impl<T> AngleBrackets<T> {
48 pub fn into_inner(self) -> T {
49 self.inner
50 }
51}
52
53impl<T> Spanned for AngleBrackets<T> {
54 fn span(&self) -> Span {
55 Span::join(
56 self.open_angle_bracket_token.span(),
57 &self.close_angle_bracket_token.span(),
58 )
59 }
60}