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::Block
s 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();