Skip to main content

## ConnectivityReporter

# Struct ConnectivityReporter

Source

    pub struct ConnectivityReporter {
        status: Arc<RwLock<ConnectivityStatus>>,
        first_failure_at: Arc<RwLock<Option<Instant>>>,
        app_handle: Option<AppHandle>,
    }

Expand description

Shared reachability state and transition logic.

This is the single place that mutates reachability and emits events. It is cheap to clone (all fields are `Arc`/`Option`) and is shared by:

- the `ConnectivityMonitor` (commands, offline recovery probe), and
- `OnlineRepository`, which reports the outcome of every server request.

Reachability is therefore driven by real traffic; the probe only fills the gap while offline.

## Fields§

§ `status: Arc<RwLock<ConnectivityStatus>>` § `first_failure_at: Arc<RwLock<Option<Instant>>>`

Timestamp of the first network failure in the current failure streak. Used to debounce the transition to offline (see `OFFLINE_CONFIRM_WINDOW`).

§ `app_handle: Option<AppHandle>`

## Implementations§

Source §

### impl ConnectivityReporter

Source

#### fn new( status: Arc<RwLock<ConnectivityStatus>>, app_handle: Option<AppHandle>, ) -> Self

Source

#### pub async fn is_reachable(&self) -> bool

Current reachability as seen by this reporter (shared with the monitor and the UI). Useful for callers that want to branch on connectivity.

Source

#### pub async fn report_success(&self)

Report that a real server request succeeded (or that the server answered at all, e.g. with 401/404/5xx). The server is up — recover instantly.

Source

#### pub async fn report_network_failure(&self, error: Option<String>)

Report that a real server request failed with a network-level error (connection refused, timeout, DNS). Subject to the time-window debounce: we only flip to offline once failures have persisted for `OFFLINE_CONFIRM_WINDOW` with no intervening success.

Source

#### async fn apply_probe_result(&self, is_reachable: bool, error: Option<String>)

Apply a deliberate reachability probe result (offline recovery probe or a manual check). Unlike `report_network_failure`, a probe is an explicit reachability test, so its result is applied immediately without debounce.

Source

#### async fn set_reachable(&self, is_reachable: bool, error: Option<String>)

Core transition: update status and emit events only on an actual change.

Source

#### async fn emit_connectivity_change(&self, is_reachable: bool)

Emit connectivity change event to frontend

Source

#### async fn emit_server_reconnected(&self)

Emit server reconnected event to frontend

## Trait Implementations§

Source §

### impl Clone for ConnectivityReporter

Source §

#### fn clone(&self) -> ConnectivityReporter

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

## Auto Trait Implementations§

§

### impl Freeze for ConnectivityReporter

§

### impl !RefUnwindSafe for ConnectivityReporter

§

### impl Send for ConnectivityReporter

§

### impl Sync for ConnectivityReporter

§

### impl Unpin for ConnectivityReporter

§

### impl UnsafeUnpin for ConnectivityReporter

§

### impl !UnwindSafe for ConnectivityReporter

## 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> From<T> for T

Source §

#### fn from(t: T) -> T

Returns the argument unchanged.

§

### impl<T> Instrument for T

§

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

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

#### 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.

§

### impl<T> PolicyExt for T
where T: ?Sized,

§

#### fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new `Policy` that returns [`Action::Follow`] only if `self` and `other` return `Action::Follow`. Read more
§

#### fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new `Policy` that returns [`Action::Follow`] if either `self` or `other` returns `Action::Follow`. Read more
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.
§

### impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

#### fn vzip(self) -> V

§

### impl<T> WithSubscriber for T

§

#### 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
§

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

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