use crate::kw;
use syn::parse::{Parse, ParseStream};
use syn::token::Brace;
use syn::{Expr, Ident, braced};
#[allow(dead_code)]
pub struct ParamsBlock {
pub key: kw::params,
pub brace_token: Brace,
pub contents: Vec<ParamStmt>,
}
#[allow(dead_code)]
pub struct ParamStmt {
pub key: Ident,
pub value: syn::Expr,
}
impl Parse for ParamStmt {
fn parse(input: ParseStream) -> syn::Result<Self> {
let key: Ident = input.parse()?;
input.parse::<syn::Token![=]>()?;
let value: Expr = input.parse()?;
Ok(ParamStmt { key, value })
}
}
impl Parse for ParamsBlock {
fn parse(input: ParseStream) -> syn::Result<Self> {
let key: kw::params = input.parse()?;
let content;
let brace_token = braced!(content in input);
let mut contents = Vec::new();
while !content.is_empty() {
let stmt: ParamStmt = content.parse()?;
contents.push(stmt);
}
let res = ParamsBlock {
key,
brace_token,
contents,
};
Ok(res)
}
}