pub struct RouterDeepLinks<State: 'static> { /* private fields */ }Expand description
Router ⇄ deep-link auto-wiring: router_with_deep_links/
RouterDeepLinks resolve a Router’s start location from the process’s
cold-start deep link (falling back to an app-supplied default) and keep
navigating it on every subsequent warm link — see RouterDeepLinks’s doc
for the precedence and dedupe contracts. This is the ONLY place in the
facade that sees both frust-widgets’ Router and frust-reactive‘s
deep-link source together; neither underlying crate depends on the other.
Router ⇄ deep-link auto-wiring: router_with_deep_links/
RouterDeepLinks resolve a Router’s start location from the process’s
cold-start deep link (falling back to an app-supplied default) and keep
navigating it on every subsequent warm link — see RouterDeepLinks’s doc
for the precedence and dedupe contracts. This is the ONLY place in the
facade that sees both frust-widgets’ Router and frust-reactive‘s
deep-link source together; neither underlying crate depends on the other.
Router ⇄ deep-link auto-wiring: router_with_deep_links/
RouterDeepLinks resolve a Router’s start location from the process’s
cold-start deep link (falling back to an app-supplied default) and keep
navigating it on every subsequent warm link — see RouterDeepLinks’s doc
for the precedence and dedupe contracts. This is the ONLY place in the
facade that sees both frust-widgets’ Router and frust-reactive’s
deep-link source together; neither underlying crate depends on the other.
A Router wired to the process-wide deep-link source (see the module
docs). Construct once with router_with_deep_links (or
RouterDeepLinks::new directly) — typically from Component::init,
storing the result in Component::State — then call
track from every Component::build to keep navigating on
subsequent warm links.
Implementations§
Source§impl<State: 'static> RouterDeepLinks<State>
impl<State: 'static> RouterDeepLinks<State>
Sourcepub fn new(router: Router<State>, initial_location: &str) -> Self
pub fn new(router: Router<State>, initial_location: &str) -> Self
Wire router to the deep-link source and resolve its start location
once: the process’s cold-start link if one has already arrived
(see DeepLinks::initial),
else initial_location (see the module docs’ precedence). Drives
router there immediately via Router::handle_location.
Call this exactly once per router instance (e.g. from
Component::init) — calling it again re-navigates to the start
location, discarding whatever the app already navigated to since.
Sourcepub fn track(&self)
pub fn track(&self)
Apply everything queued on the router’s
RouteNavigator, then track the live
deep-link signal and navigate the router to any link that hasn’t been
consumed yet. Call from every Component::build — the pump is
idempotent on an empty queue, and the link half is dedup’d by a consumed
marker (see the module docs), so a rebuild re-run that observes the same
already-handled link is a no-op: no re-navigation, no panic even on a
malformed/unmatched link (routed to the router’s error page like any
other unmatched location).
Pumping first is what makes a queued request zero-frame: build
runs before the navigator’s own rebuild, so the controller ops this
enqueues are drained in that very same reconcile pass.
Sourcepub fn router(&self) -> &Router<State>
pub fn router(&self) -> &Router<State>
The wired router — hand its controller() to
navigator, or call its navigation
methods directly.
The router’s RouteNavigator, waker already installed. Send + Sync
and cheap to clone, so a Component::init can publish it once
(provide_context(state.nav.route_navigator())) and any screen — or
background task — navigates by path without holding the router:
let nav = use_context::<RouteNavigator>().expect("provided at the root");
button("Open", move |_| nav.push("/terminal?session=abc"));Requests land on the next track.
Sourcepub fn routes(&self) -> RouteObserver
pub fn routes(&self) -> RouteObserver
The route-state observable wired to this router — attach it to
the router-driven navigator with
.observe(navigator(links.router().controller(), ...)):
state.router_links.routes().observe(navigator(&c, initial))Copy, so calling this more than once (or storing the result
alongside route_navigator(), e.g. under provide_context) hands out
clones of the same signals — reads through any of them see the same
published state.
Auto Trait Implementations§
impl<State> !Freeze for RouterDeepLinks<State>
impl<State> !RefUnwindSafe for RouterDeepLinks<State>
impl<State> !Send for RouterDeepLinks<State>
impl<State> !Sync for RouterDeepLinks<State>
impl<State> !UnwindSafe for RouterDeepLinks<State>
impl<State> Unpin for RouterDeepLinks<State>
impl<State> UnsafeUnpin for RouterDeepLinks<State>where
Router<State>: UnsafeUnpin,
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§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.Source§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.Source§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.Source§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.