Struct syn_rsx::ParserConfig

source ·
pub struct ParserConfig { /* private fields */ }
Expand description

Configures the Parser behavior

Implementations§

source§

impl ParserConfig

source

pub fn new() -> ParserConfig

Create new ParserConfig with default config

source

pub fn flat_tree(self) -> Self

Return flat tree instead of nested tree

source

pub fn number_of_top_level_nodes(self, number: usize) -> Self

Exact number of required top level nodes

source

pub fn type_of_top_level_nodes(self, node_type: NodeType) -> Self

Enforce the NodeType of top level nodes

source

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();

Trait Implementations§

source§

impl Default for ParserConfig

source§

fn default() -> ParserConfig

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.