Skip to main content

ServiceHandle

Struct ServiceHandle 

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

The running service. Dropping it shuts the service down, so a shell can simply hold it for as long as devtools should be available.

Implementations§

Source§

impl ServiceHandle

Source

pub fn port(&self) -> u16

The bound loopback port — always ephemeral, so this is the only way to know it besides the discovery line.

Source

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

This process’s handshake token, or None when the service was started with ServiceConfig::require_token off.

The in-process counterpart of reading it off the discovery line, and no weaker: the caller is the process that owns the secret. Handing it anywhere else — a response body, a file, another process — defeats the whole mechanism, which relies on the token reaching only readers of this app’s log stream.

Source

pub fn publish_frame_stats(&self, stats: FrameStats)

Publishes one frame’s stats to every subscribed client.

Safe to call from the frame thread: it writes one value into a preallocated bounded ring and returns — it never waits on a client, on the network, or on a full queue, and it cannot fail. With no subscribers it is very nearly free. A client that cannot keep up loses the oldest queued frames (crate::frame_stats), which is the whole reason this cannot stall the producer — docs/REVIEW_FOCUS.md rates a parking call on the UI thread critical.

Source

pub fn shutdown(self)

Stops accepting, closes live connections, and joins the service thread.

The backend thread is deliberately not joined: it may be parked inside a shell call on a frozen UI thread, and shutdown must not be hostage to that. It exits on its own once the last connection drops the channel.

Trait Implementations§

Source§

impl Debug for ServiceHandle

Source§

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

Hand-written, and deliberately not derived: the token must never reach a log line a {:?} produces (it belongs on the discovery line and nowhere else), and a derive would leak it the moment a field is added.

Source§

impl Drop for ServiceHandle

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. 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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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