worktable_codegen/worktable/parser/
punct.rs1use proc_macro2::TokenTree;
2use syn::spanned::Spanned;
3
4use crate::worktable::parser::Parser;
5
6impl Parser {
7 pub fn parse_colon(&mut self) -> syn::Result<()> {
9 let iter = &mut self.input_iter;
10
11 let colon = iter
12 .next()
13 .ok_or(syn::Error::new(self.input.span(), "Expected token."))?;
14 if let TokenTree::Punct(colon) = colon {
15 if colon.as_char() != ':' {
16 return Err(syn::Error::new(
17 colon.span(),
18 format!("Expected `:` found: `{}`", colon.as_char()),
19 ));
20 }
21
22 Ok(())
23 } else {
24 Err(syn::Error::new(colon.span(), "Expected `:`."))
25 }
26 }
27
28 pub fn try_parse_comma(&mut self) -> syn::Result<()> {
30 let iter = &mut self.input_iter;
31
32 if let Some(colon) = iter.peek() {
33 if comma(colon).is_ok() {
34 iter.next();
35 }
36 }
37
38 Ok(())
39 }
40}
41
42fn comma(tt: &TokenTree) -> syn::Result<()> {
43 if let TokenTree::Punct(colon) = tt {
44 if colon.as_char() != ',' {
45 return Err(syn::Error::new(
46 colon.span(),
47 format!("Expected `,` found: `{}`", colon.as_char()),
48 ));
49 }
50
51 Ok(())
52 } else {
53 Err(syn::Error::new(tt.span(), "Expected `,`."))
54 }
55}