Parsing len and sampling frequency works
This commit is contained in:
parent
17c2c2a45d
commit
893c3ed659
|
@ -1,16 +1,65 @@
|
|||
extern crate proc_macro;
|
||||
use proc_macro::TokenStream;
|
||||
use syn::parse::{Parse, ParseStream};
|
||||
use syn::parse::{Parse, ParseStream, Parser};
|
||||
use syn::parse_macro_input;
|
||||
use syn::{punctuated::Punctuated, Expr, Token};
|
||||
use syn::spanned::Spanned;
|
||||
use syn::{punctuated::Punctuated, Expr, Lit, Token};
|
||||
|
||||
struct FirlsRealInput {}
|
||||
struct FirlsRealInput {
|
||||
filter_len: usize,
|
||||
sample_frequency: f32,
|
||||
}
|
||||
|
||||
impl Parse for FirlsRealInput {
|
||||
fn parse(input: ParseStream) -> Result<Self, syn::Error> {
|
||||
let arg_list = Punctuated::<Expr, Token![,]>::parse_separated_nonempty(input)?;
|
||||
|
||||
Ok(FirlsRealInput {})
|
||||
if arg_list.len() != 3 {
|
||||
return Err(syn::Error::new(
|
||||
arg_list.span(),
|
||||
"firls_real takes 3 parameters",
|
||||
));
|
||||
}
|
||||
|
||||
let filter_len = parse_filter_len(&arg_list[0])?;
|
||||
let sample_frequency = parse_frequency(&arg_list[1])?;
|
||||
|
||||
Ok(FirlsRealInput {
|
||||
filter_len,
|
||||
sample_frequency,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
fn parse_filter_len(len: &Expr) -> Result<usize, syn::Error> {
|
||||
match len {
|
||||
Expr::Lit(expr) => match &expr.lit {
|
||||
Lit::Int(int_lit) => int_lit.base10_parse(),
|
||||
_ => Err(syn::Error::new(
|
||||
expr.span(),
|
||||
"expected integer literal for len",
|
||||
)),
|
||||
},
|
||||
_ => Err(syn::Error::new(
|
||||
len.span(),
|
||||
"len should be a literal expression",
|
||||
)),
|
||||
}
|
||||
}
|
||||
|
||||
fn parse_frequency(freq: &Expr) -> Result<f32, syn::Error> {
|
||||
match freq {
|
||||
Expr::Lit(expr) => match &expr.lit {
|
||||
Lit::Float(float_lit) => float_lit.base10_parse(),
|
||||
_ => Err(syn::Error::new(
|
||||
expr.span(),
|
||||
"expected float literal for frequency",
|
||||
)),
|
||||
},
|
||||
_ => Err(syn::Error::new(
|
||||
freq.span(),
|
||||
"frequency should be a literal expression",
|
||||
)),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue