Struct syn_rsx::ParserConfig
source · pub struct ParserConfig { /* private fields */ }Expand description
Configures the Parser behavior
Implementations§
source§impl ParserConfig
impl ParserConfig
sourcepub fn new() -> ParserConfig
pub fn new() -> ParserConfig
Create new ParserConfig with default config
sourcepub fn number_of_top_level_nodes(self, number: usize) -> Self
pub fn number_of_top_level_nodes(self, number: usize) -> Self
Exact number of required top level nodes
sourcepub fn type_of_top_level_nodes(self, node_type: NodeType) -> Self
pub fn type_of_top_level_nodes(self, node_type: NodeType) -> Self
Enforce the NodeType of top level nodes
sourcepub fn transform_block<F>(self, callback: F) -> Selfwhere
F: Fn(ParseStream<'_>) -> Result<Option<TokenStream>> + 'static,
pub fn transform_block<F>(self, callback: F) -> Selfwhere F: Fn(ParseStream<'_>) -> Result<Option<TokenStream>> + 'static,
Transforms the value of all NodeType::Blocks with the given closure
callback. The provided ParseStream is the content of the block.
When Some(TokenStream) is returned, the TokenStream is parsed as
Rust block content. The ParseStream must be completely consumed in
this case, meaning no tokens can be left in the stream.
If None is returned, parsing happens with the original ParseStream,
since the tokens that are passend into the transform callback are a
fork, which gets only advanced if Some is returned.
An example usage might be a custom syntax inside blocks which isn’t
valid Rust. The given example simply translates the % character into
the string percent
use quote::quote;
use syn::Token;
use syn_rsx::{parse2_with_config, ParserConfig};
let tokens = quote! {
<div>{%}</div>
};
let config = ParserConfig::new().transform_block(|input| {
input.parse::<Token![%]>()?;
Ok(Some(quote! { "percent" }))
});
parse2_with_config(tokens, config).unwrap();