checked_rs_macro_impl/params/
lower_or_min.rs

1use proc_macro2::TokenStream;
2use quote::ToTokens;
3use syn::parse::Parse;
4
5use super::kw;
6
7#[derive(Clone)]
8pub enum LowerOrMin {
9    Lower(kw::lower),
10    Min(kw::min),
11}
12
13impl Parse for LowerOrMin {
14    fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> {
15        if input.peek(kw::lower) {
16            Ok(Self::Lower(input.parse()?))
17        } else if input.peek(kw::min) {
18            Ok(Self::Min(input.parse()?))
19        } else {
20            Err(input.error("expected `lower` or `min`"))
21        }
22    }
23}
24
25impl ToTokens for LowerOrMin {
26    fn to_tokens(&self, tokens: &mut TokenStream) {
27        match self {
28            Self::Lower(kw) => kw.to_tokens(tokens),
29            Self::Min(kw) => kw.to_tokens(tokens),
30        }
31    }
32}
33
34#[cfg(test)]
35mod tests {
36    use super::*;
37    use crate::{assert_parse, snapshot};
38
39    #[test]
40    fn parse_lower() {
41        assert_parse!(LowerOrMin => { lower } => { LowerOrMin::Lower(..) });
42    }
43
44    #[test]
45    fn parse_min() {
46        assert_parse!(LowerOrMin => { min } => { LowerOrMin::Min(..) });
47    }
48
49    #[test]
50    fn snapshot_lower() {
51        snapshot!(LowerOrMin => { lower });
52    }
53
54    #[test]
55    fn snapshot_min() {
56        snapshot!(LowerOrMin => { min });
57    }
58}