Skip to main content

RouterDeepLinks

Struct RouterDeepLinks 

Source
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>

Source

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.

Source

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.

Source

pub fn router(&self) -> &Router<State>

The wired router — hand its controller() to navigator, or call its navigation methods directly.

Source

pub fn route_navigator(&self) -> RouteNavigator

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.

Source

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>
where Router<State>: Unpin,

§

impl<State> UnsafeUnpin for RouterDeepLinks<State>
where Router<State>: UnsafeUnpin,

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert 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>

Convert 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)

Convert &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)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where 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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T, S> SimdFrom<T, S> for T
where S: Simd,

Source§

fn simd_from(_simd: S, value: T) -> T

Source§

impl<F, T, S> SimdInto<T, S> for F
where T: SimdFrom<F, S>, S: Simd,

Source§

fn simd_into(self, simd: S) -> T

Source§

impl<T> StorageAccess<T> for T

Source§

fn as_borrowed(&self) -> &T

Borrows the value.
Source§

fn into_taken(self) -> T

Takes the value.
Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

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

Source§

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.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more