pub struct Remote { /* private fields */ }Expand description
The remote source for one configuration type, and its last document.
Remote::new() is const, so this lives in a static — which is how
#[dynamic_config] emits it.
§What it records about itself
Every fetch this type performs and every delivery it accepts is counted
into a RemoteStatus, on the same terms ConfigCell records a
ConfigStatus: recorded where it happens, read by
an atomic-cheap status, and never on the read path —
load() reads document, which this does not touch.
The cost is one Instant::now() per fetch, beside a network round trip.
Implementations§
Source§impl Remote
impl Remote
Sourcepub fn set(&self, source: impl RemoteSource)
pub fn set(&self, source: impl RemoteSource)
Installs a blocking source, replacing any previous one.
The document already fetched, if any, is dropped with it — a new source answering with an old store’s values would be a puzzle nobody needs. A fetch from the previous source that is still in flight is discarded when it lands, for the same reason.
The recorded status is dropped with the document:
remote_up for the previous store says nothing about this one, and
a stale 1 describing a store nobody is talking to any more is worse
than no sample at all.
Sourcepub fn set_async(&self, source: impl AsyncRemoteSource)
Available on crate feature async only.
pub fn set_async(&self, source: impl AsyncRemoteSource)
async only.Installs an async source, replacing any previous one.
Sourcepub fn refresh(&self) -> Result<(), Error>
pub fn refresh(&self) -> Result<(), Error>
Fetches, and keeps what came back.
The network round trip happens with no lock held: a slow store cannot
make load() — which reads this state for provenance — wait for it.
If the source is replaced while the fetch is in flight, the result is
discarded and Ok is returned: the fetch did succeed, and the new
source’s own refresh is the one that matters now.
§Errors
If no source is installed, if the installed one is async — use
refresh_async — or if the fetch fails.
Sourcepub async fn refresh_async(&self) -> Result<(), Error>
Available on crate feature async only.
pub async fn refresh_async(&self) -> Result<(), Error>
async only.Fetches from an async source, and keeps what came back.
A blocking source is not refused — swapping one implementation for
the other must not be a breaking change for the caller — but it is not
run on the executor either: it goes through
off_thread, so an async caller’s worker thread
never sits inside a blocking network call.
The same replaced-mid-fetch rule as refresh
applies, and matters more here: the unlocked window spans an await.
§Errors
If no source is installed, or the fetch fails.
Sourcepub fn is_configured(&self) -> bool
pub fn is_configured(&self) -> bool
Whether a source is installed.
Sourcepub fn status(&self) -> RemoteStatus
pub fn status(&self) -> RemoteStatus
How the fetches from this source have gone.
One lock and a clone, no I/O and no network: an exporter may call it
per scrape, which is the same contract
ConfigCell::status makes.
Sourcepub fn clear(&self)
pub fn clear(&self)
Drops the document, so the next load sees no remote layer.
A fetch that was already in flight is discarded when it lands, the
same way set discards one: clearing is a state change
like any other, and a document a caller explicitly dropped must not
come back from a round trip that started before they dropped it.
The source is left alone, and so is every RemoteSink taken from
it: a watch loop delivering from the same store keeps delivering, and
its next push installs normally. Dropping the document is not
replacing the store, and only replacing the store ends a watch.
Trait Implementations§
Auto Trait Implementations§
impl !Freeze for Remote
impl RefUnwindSafe for Remote
impl Send for Remote
impl Sync for Remote
impl Unpin for Remote
impl UnsafeUnpin for Remote
impl UnwindSafe for Remote
Blanket Implementations§
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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);