pub enum ViewNode<'a> {
Element {
tag: Symbol,
attrs: Vec<Attr<'a>>,
children: Vec<ViewNode<'a>>,
span: Span,
},
Text {
text: &'a Expr<'a>,
span: Span,
},
Component {
name: Symbol,
props: Vec<(Symbol, &'a Expr<'a>)>,
prop_spans: Vec<Span>,
children: Vec<ViewNode<'a>>,
span: Span,
},
Each {
pattern: Pattern,
iterable: &'a Expr<'a>,
key: Option<&'a Expr<'a>>,
index: Option<Symbol>,
body: Vec<ViewNode<'a>>,
empty: Vec<ViewNode<'a>>,
span: Span,
},
If {
arms: Vec<(&'a Expr<'a>, Vec<ViewNode<'a>>)>,
otherwise: Option<Vec<ViewNode<'a>>>,
span: Span,
},
Handler {
event: Symbol,
modifiers: Vec<EventModifier>,
body: &'a [Stmt<'a>],
span: Span,
},
Raw {
html: &'a Expr<'a>,
span: Span,
},
Inspect {
scrutinee: &'a Expr<'a>,
arms: Vec<ViewArm<'a>>,
span: Span,
},
Let {
var: Symbol,
value: &'a Expr<'a>,
span: Span,
},
Extends {
layout: Symbol,
span: Span,
},
Block {
name: Symbol,
default: Option<Vec<ViewNode<'a>>>,
span: Span,
},
Children {
span: Span,
},
}Expand description
One node of a view tree.
Variants§
Element
An HTML element with its attributes (in source order) and children.
Text
A text child: a literal or interpolated string expression (escaped on render).
Component
A use of a declared component (Counter, <TodoRow …/>). prop_spans[i] is where
props[i] was written — the whole name={value} attribute — so a refusal about one prop
points at that prop.
Fields
Each
for each <pattern> in <iterable>[, keyed by <key>][, at index <i>]: — one body per item;
empty renders when the collection has no items. index counts from
LOOP_INDEX_BASE.
Fields
If
when <cond>: … otherwise: — arms in order, then the fallback.
Handler
An event handler on the containing element: the legacy on click: + statements, or
an LGX on-click={action} directive (whose expression becomes a one-call body).
modifiers are the .prevent / .stop / .enter … qualifiers, already classified by
the event-modifier catalogue (crate::lgx::html::EventModifier).
Raw
raw <string> — trusted markup inserted verbatim.
Inspect
{inspect v:} {when Pat:} … {end} — a pattern match whose arms are subtrees.
Let
{let x be e} — a template-local binding, in scope for the following siblings.
Extends
{extends Layout} — this view fills the named layout’s blocks.
Block
{block name:} … {end} (with a default) or {block name} (a slot to fill).
Children
{children} — where a component’s caller-supplied children render.
Implementations§
Source§impl<'a> ViewNode<'a>
impl<'a> ViewNode<'a>
Sourcepub fn span(&self) -> Span
pub fn span(&self) -> Span
Where this node was written.
★ EVERY VARIANT ALREADY CARRIED A span AND NOTHING COULD ASK FOR IT. The browser-tier
refusals in lgx_lower all walk this tree, and each one destructured the node with .. —
so a page refused because of ONE element reported at Span::default(), which renders as
the top of the file. The author was told their page could not be lowered and left to find
which of forty nodes did it.
TOTAL, deliberately: a new ViewNode variant does not compile until it says where it is.
Trait Implementations§
Auto Trait Implementations§
impl<'a> Freeze for ViewNode<'a>
impl<'a> RefUnwindSafe for ViewNode<'a>
impl<'a> Send for ViewNode<'a>
impl<'a> Sync for ViewNode<'a>
impl<'a> Unpin for ViewNode<'a>
impl<'a> UnsafeUnpin for ViewNode<'a>
impl<'a> UnwindSafe for ViewNode<'a>
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.