| 396 | |
| 397 | impl syn::parse::Parse for DebugPrintfInput { |
| 398 | fn parse(input: syn::parse::ParseStream<'_>) -> syn::parse::Result<Self> { |
| 399 | let span = input.span(); |
| 400 | |
| 401 | if input.is_empty() { |
| 402 | return Ok(Self { |
| 403 | span, |
| 404 | format_string: Default::default(), |
| 405 | variables: Default::default(), |
| 406 | }); |
| 407 | } |
| 408 | |
| 409 | let format_string = input.parse::<syn::LitStr>()?; |
| 410 | if !input.is_empty() { |
| 411 | input.parse::<syn::token::Comma>()?; |
| 412 | } |
| 413 | let variables = |
| 414 | syn::punctuated::Punctuated::<syn::Expr, syn::token::Comma>::parse_terminated(input)?; |
| 415 | |
| 416 | Ok(Self { |
| 417 | span, |
| 418 | format_string: format_string.value(), |
| 419 | variables: variables.into_iter().collect(), |
| 420 | }) |
| 421 | } |
| 422 | } |
| 423 | |
| 424 | fn parsing_error(message: &str, span: proc_macro2::Span) -> TokenStream { |