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
use fehler::throws;
use syn::ext::IdentExt;
use syn::parse::{Error, Parse, ParseStream};
use syn::{braced, parenthesized, Ident, Token};
use crate::prelude::TabDsl;
pub struct GetTabDsl {
pub tab: TabDsl,
}
impl Parse for GetTabDsl {
#[throws(Error)]
fn parse(input: ParseStream) -> Self {
let _ = input.call(Ident::parse_any)?;
let _ = input.call(Ident::parse_any)?;
let _ = input.parse::<Ident>()?;
let _params_content;
parenthesized!(_params_content in input);
let _ = input.parse::<Token![-]>()?;
let _ = input.parse::<Token![>]>()?;
let _ = input.parse::<Ident>()?;
let fn_content;
braced!(fn_content in input);
let _ = fn_content.parse::<Ident>();
let _ = fn_content.parse::<Token![!]>();
let tab_content;
braced!(tab_content in fn_content);
let tab = tab_content.parse()?;
GetTabDsl { tab }
}
}