sway_ast/
brackets.rs

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}