1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
use crate::{diagnostic::Diagnostic, span::Span};
use serde::Serialize;

macro_rules! define_marker_tag {
    ( $struct_name:ident ) => {
        #[derive(Debug, PartialEq, Serialize)]
        pub struct $struct_name<'a> {
            #[serde(skip)]
            pub source: Span<'a>,
        }

        impl<'a> $struct_name<'a> {
            pub fn parse() -> Result<Self, Diagnostic> {
                Ok(Self {
                    source: Span::dummy(""),
                })
            }
        }
    };
}

define_marker_tag!(ServerTag);
define_marker_tag!(PluginTag);
define_marker_tag!(ClientTag);
define_marker_tag!(PrivateTag);
define_marker_tag!(IgnoreTag);
define_marker_tag!(YieldsTag);
define_marker_tag!(ReadOnlyTag);
define_marker_tag!(UnreleasedTag);

#[cfg(test)]
mod test {
    use insta::assert_yaml_snapshot;

    use super::*;

    #[test]
    fn snapshot() {
        assert_yaml_snapshot!(ServerTag::parse(), @r###"
        ---
        Ok: {}
        "###);

        assert_yaml_snapshot!(ServerTag::parse(), @r###"
        ---
        Ok: {}
        "###);
    }
}