use proc_macro2::TokenStream;
use syn::{parse::ParseStream, Result};
use crate::NodeType;
pub type TransformBlockFn = dyn Fn(ParseStream) -> Result<Option<TokenStream>>;
#[derive(Default)]
pub struct ParserConfig {
pub(crate) flat_tree: bool,
pub(crate) number_of_top_level_nodes: Option<usize>,
pub(crate) type_of_top_level_nodes: Option<NodeType>,
pub(crate) transform_block: Option<Box<TransformBlockFn>>,
}
impl ParserConfig {
pub fn new() -> ParserConfig {
ParserConfig::default()
}
pub fn flat_tree(mut self) -> Self {
self.flat_tree = true;
self
}
pub fn number_of_top_level_nodes(mut self, number: usize) -> Self {
self.number_of_top_level_nodes = Some(number);
self
}
pub fn type_of_top_level_nodes(mut self, node_type: NodeType) -> Self {
self.type_of_top_level_nodes = Some(node_type);
self
}
pub fn transform_block<F>(mut self, callback: F) -> Self
where
F: Fn(ParseStream) -> Result<Option<TokenStream>> + 'static,
{
self.transform_block = Some(Box::new(callback));
self
}
}