pub struct WatcherState {
pub Entries: Arc<Mutex<HashMap<String, WatcherEntry>>>,
pub EventSender: UnboundedSender<WatchEvent>,
pub DedupIndex: Arc<Mutex<HashMap<(PathBuf, bool, Option<String>), String>>>,
pub Aliases: Arc<Mutex<HashMap<String, Vec<String>>>>,
pub HandleToPrimary: Arc<Mutex<HashMap<String, String>>>,
}Expand description
Lazily-initialised process-wide state for file watching. Instances of the
event-forwarder task are singletons keyed on the MountainEnvironment
handle. Access through WatcherState::Get.
Fields§
§Entries: Arc<Mutex<HashMap<String, WatcherEntry>>>§EventSender: UnboundedSender<WatchEvent>§DedupIndex: Arc<Mutex<HashMap<(PathBuf, bool, Option<String>), String>>>Maps (root, recursive, pattern) to the primary handle that owns
the live OS watcher. Subsequent registrations matching the same
triple are aliased to the primary; only the primary creates a
notify::Watcher.
Aliases: Arc<Mutex<HashMap<String, Vec<String>>>>Reverse index: primary handle → all aliased handles. When the
forwarder task gets an event for a primary, it fans the same
event out to every aliased handle so each extension’s
vscode.workspace.createFileSystemWatcher callback fires once.
HandleToPrimary: Arc<Mutex<HashMap<String, String>>>Reverse lookup for unregister: any handle (primary or alias) →
its primary. Lets UnregisterWatcher clean up alias entries
without scanning the entire Aliases map.
Implementations§
Source§impl WatcherState
impl WatcherState
Sourcepub fn Get(env: &MountainEnvironment) -> Arc<WatcherState>
pub fn Get(env: &MountainEnvironment) -> Arc<WatcherState>
Obtain (or create) the global WatcherState. The forwarder task is spawned on first access. Must be called from within a tokio runtime.
Auto Trait Implementations§
impl Freeze for WatcherState
impl RefUnwindSafe for WatcherState
impl Send for WatcherState
impl Sync for WatcherState
impl Unpin for WatcherState
impl UnsafeUnpin for WatcherState
impl UnwindSafe for WatcherState
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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<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.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
Layered].