sylvia_derive/parser/attributes/
payload.rs1use proc_macro_error::emit_error;
2use syn::parse::{Parse, ParseStream, Parser};
3use syn::{Error, Ident, MetaList, Result};
4
5#[derive(Default, Debug)]
7pub struct PayloadFieldParam;
8
9impl PayloadFieldParam {
10 pub fn new(attr: &MetaList) -> Result<Self> {
11 let data = PayloadFieldParam::parse
12 .parse2(attr.tokens.clone())
13 .map_err(|err| {
14 emit_error!(err.span(), err);
15 err
16 })?;
17
18 Ok(data)
19 }
20}
21
22impl Parse for PayloadFieldParam {
23 fn parse(input: ParseStream) -> Result<Self> {
24 let option: Ident = input.parse()?;
25 match option.to_string().as_str() {
26 "raw" => (),
27 _ => {
28 return Err(Error::new(
29 option.span(),
30 "Invalid payload parameter.\n= note: Expected [`raw`].\n",
31 ))
32 }
33 };
34
35 if !input.is_empty() {
36 return Err(Error::new(
37 input.span(),
38 "Unexpected tokens inside `sv::payload` attribute.\n= note: Expected parameters: [`raw`] `.\n",
39 ));
40 }
41
42 Ok(Self)
43 }
44}