Skip to main content

RouterState

Struct RouterState 

Source
pub struct RouterState { /* private fields */ }
Expand description

Core navigation state that tracks history, registered routes, and match cache.

This struct owns the navigation history stack and provides methods for pushing, replacing, and traversing entries. Route matching results are cached in a HashMap to avoid repeated tree walks within a single path.

§Examples

use gpui_navigator::RouterState;

let mut state = RouterState::new();
assert_eq!(state.current_path(), "/");

state.push("/users".to_string());
assert_eq!(state.current_path(), "/users");

state.back();
assert_eq!(state.current_path(), "/");

Implementations§

Source§

impl RouterState

Source

pub fn new() -> Self

Create a new router state with the initial path set to "/".

Source

pub fn navigation_id(&self) -> usize

Return the current navigation ID.

The value is monotonically increasing and is shared across clones of this state (via Arc<AtomicUsize>).

Source

pub fn start_navigation(&self) -> usize

Start a new navigation and return the new navigation ID

This increments the navigation counter, allowing previous navigations to detect they’ve been superseded and should be cancelled.

Source

pub fn is_navigation_current(&self, nav_id: usize) -> bool

Check if a navigation is still current (not cancelled by newer navigation)

Source

pub fn add_route(&mut self, route: Route)

Register a route and invalidate the match cache.

Routes are stored in registration order. The first route whose pattern matches the current path wins during current_match.

Source

pub fn current_path(&self) -> &str

Return the current path in the history stack.

Source

pub fn routes(&self) -> &[Arc<Route>]

Return a slice of all registered routes (in registration order).

Source

pub const fn current_params(&self) -> &RouteParams

Return the current route parameters (used for parameter inheritance in nested routing).

Source

pub fn set_current_params(&mut self, params: RouteParams)

Update current route parameters

Source

pub fn current_match(&mut self) -> Option<RouteMatch>

Find the RouteMatch for the current path, caching the result.

On a cache miss the registered routes are iterated in order and the first match is stored. Subsequent calls with the same path return the cached value in O(1).

Source

pub fn current_match_immutable(&self) -> Option<RouteMatch>

Get current route match without caching (immutable)

Use this when you need to access the current route from a non-mutable context, such as in a GPUI Render implementation.

Source

pub fn current_route(&self) -> Option<&Arc<Route>>

Get the first top-level Route that matches the current path.

With MatchStack architecture, rendering uses GlobalRouter::match_stack(). This method is kept for compatibility — it returns the first registered route whose pattern matches the current path (exact or prefix).

Source

pub fn push(&mut self, path: String) -> RouteChangeEvent

Push a new path onto the history stack.

Any forward history (entries after the current cursor) is truncated before appending, mirroring browser pushState semantics.

Returns a RouteChangeEvent describing the transition.

Source

pub fn push_with_state( &mut self, path: String, state: HistoryState, ) -> RouteChangeEvent

Push a new path with associated HistoryState data.

Allows attaching arbitrary key-value state (scroll position, form data, etc.) to the history entry.

Source

pub fn replace(&mut self, path: String) -> RouteChangeEvent

Replace the current history entry in-place without adding a new one.

Useful for redirects where the intermediate path should not appear in the back-button history.

Source

pub fn replace_with_state( &mut self, path: String, state: HistoryState, ) -> RouteChangeEvent

Replace the current history entry with associated HistoryState data.

Source

pub fn back(&mut self) -> Option<RouteChangeEvent>

Move the cursor one step back in the history stack.

Returns None if already at the oldest entry.

Source

pub fn forward(&mut self) -> Option<RouteChangeEvent>

Move the cursor one step forward in the history stack.

Returns None if already at the newest entry.

Source

pub const fn can_go_back(&self) -> bool

Return true if back would succeed.

Source

pub fn can_go_forward(&self) -> bool

Return true if forward would succeed.

Source

pub fn peek_back_path(&self) -> Option<&str>

Peek at the path we would navigate to on back(), without actually navigating.

Source

pub fn peek_forward_path(&self) -> Option<&str>

Peek at the path we would navigate to on forward(), without actually navigating.

Source

pub fn current_entry(&self) -> &HistoryEntry

Return a reference to the current HistoryEntry (path + optional state).

Source

pub fn clear(&mut self)

Reset the history stack to a single "/" entry, clearing the match cache.

Trait Implementations§

Source§

impl Clone for RouterState

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for RouterState

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for RouterState

Source§

fn default() -> Self

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

Auto Trait Implementations§

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<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
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> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> NoneValue for T
where T: Default,

Source§

type NoneType = T

Source§

fn null_value() -> T

The none-equivalent value.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<R, P> ReadPrimitive<R> for P
where R: Read + ReadEndian<P>, P: Default,

Source§

fn read_from_little_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_little_endian().
Source§

fn read_from_big_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_big_endian().
Source§

fn read_from_native_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_native_endian().
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

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 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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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