checked_rs_macro_impl/params/
lower_or_min.rs1use 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}