1#![doc(test(attr(deny(warnings))))]
4
5mod helpers;
6mod integer;
7mod ty;
8
9use proc_macro::TokenStream;
10
11use crate::helpers::{parse_comma, unwrap_or_return};
12use crate::integer::Integer;
13use crate::ty::Type;
14
15#[allow(missing_docs)] #[proc_macro]
17pub fn int(input: TokenStream) -> TokenStream {
18 let mut iter = input.into_iter();
19
20 let min = unwrap_or_return!(Integer::try_from_tokens(&mut iter, "minimum value"));
21 unwrap_or_return!(parse_comma(&mut iter));
22 let max = unwrap_or_return!(Integer::try_from_tokens(&mut iter, "maximum value"));
23 unwrap_or_return!(Type::<false>::from_min_max(&min, &max)).into_tokens()
24}
25
26#[allow(missing_docs)] #[proc_macro]
28pub fn opt_int(input: TokenStream) -> TokenStream {
29 let mut iter = input.into_iter();
30
31 let min = unwrap_or_return!(Integer::try_from_tokens(&mut iter, "minimum value"));
32 unwrap_or_return!(parse_comma(&mut iter));
33 let max = unwrap_or_return!(Integer::try_from_tokens(&mut iter, "maximum value"));
34 unwrap_or_return!(Type::<true>::from_min_max(&min, &max)).into_tokens()
35}