pub struct DynNode<T = Nothing>(pub Rc<RefCell<Box<dyn DynamicTokens>>>, _);Expand description
Parses a T (default: Nothing). Allows one to replace it at runtime, after parsing with
anything else implementing ToTokens. This is backed by a Rc. One can replace any
cloned occurrences or only the current one.
§Example
let mut token_iter = "foo".to_token_iter();
let parsed = <DynNode<Ident>>::parser(&mut token_iter).unwrap();
assert_tokens_eq!(parsed, "foo");
let _test: Ident = parsed.downcast_ref::<Ident>().unwrap().clone();
// Global replacement of all cloned locations (parsed & other)
let mut other = parsed.clone();
other.replace_all_with(<Cons<ConstInteger<123>, Comma>>::default());
assert_tokens_eq!(parsed, "123,");
// Local replacement (only other)
other.replace_here_with(Bang::default());
assert_tokens_eq!(other, "!");
assert_tokens_eq!(parsed, "123,");Tuple Fields§
§0: Rc<RefCell<Box<dyn DynamicTokens>>>Implementations§
Source§impl<T> DynNode<T>
impl<T> DynNode<T>
Sourcepub fn replace_all_with<U>(&self, this: U) -> Box<dyn DynamicTokens>where
U: DynamicTokens,
pub fn replace_all_with<U>(&self, this: U) -> Box<dyn DynamicTokens>where
U: DynamicTokens,
Replaces the interior of a DynNode at all locations that cloned this, returns the
old content.
Sourcepub fn replace_here_with<U>(&mut self, this: U) -> DynNode<T>where
U: DynamicTokens,
pub fn replace_here_with<U>(&mut self, this: U) -> DynNode<T>where
U: DynamicTokens,
Detaches this DynNode, insert new content, returns Self with the old content.
Sourcepub fn downcast_ref<U>(&self) -> Option<Ref<'_, U>>where
U: DynamicTokens,
pub fn downcast_ref<U>(&self) -> Option<Ref<'_, U>>where
U: DynamicTokens,
Casts a DynNode to a reference to a concrete type. Will return None on type error.
Trait Implementations§
Source§impl<T> Parser for DynNode<T>where
T: Parse + DynamicTokens,
impl<T> Parser for DynNode<T>where
T: Parse + DynamicTokens,
Source§fn parser(tokens: &mut TokenIter) -> Result<DynNode<T>, Error>
fn parser(tokens: &mut TokenIter) -> Result<DynNode<T>, Error>
The actual parsing function that must be implemented. This mutates the
tokens
iterator directly. It should not be called from user code except for implementing
parsers itself and then only when the rules below are followed. Read moreSource§impl<T> ToTokens for DynNode<T>
impl<T> ToTokens for DynNode<T>
Source§fn to_tokens(&self, tokens: &mut TokenStream)
fn to_tokens(&self, tokens: &mut TokenStream)
Source§fn into_token_iter(self) -> TokenIter ⓘwhere
Self: Sized,
fn into_token_iter(self) -> TokenIter ⓘwhere
Self: Sized,
Convert
self into a TokenIter object.Source§fn to_token_stream(&self) -> TokenStream
fn to_token_stream(&self) -> TokenStream
Convert
&self into a TokenStream object.Source§fn into_token_stream(self) -> TokenStreamwhere
Self: Sized,
fn into_token_stream(self) -> TokenStreamwhere
Self: Sized,
Convert
self into a TokenStream object.Auto Trait Implementations§
impl<T> Freeze for DynNode<T>
impl<T = Nothing> !RefUnwindSafe for DynNode<T>
impl<T = Nothing> !Send for DynNode<T>
impl<T = Nothing> !Sync for DynNode<T>
impl<T> Unpin for DynNode<T>where
T: Unpin,
impl<T = Nothing> !UnwindSafe for DynNode<T>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> DynamicTokens for T
impl<T> DynamicTokens for T
Source§impl<T> Parse for Twhere
T: Parser,
impl<T> Parse for Twhere
T: Parser,
Source§fn parse(tokens: &mut TokenIter) -> Result<Self, Error>
fn parse(tokens: &mut TokenIter) -> Result<Self, Error>
This is the user facing API to parse grammatical entities. Calls a
parser() within a
transaction. Commits changes on success and returns the parsed value. Read more