pub struct CanopyClient { /* private fields */ }Expand description
HTTP client with auth configured for talking to a canopy server.
Tries two auth paths in order of preference:
- Tailscale: if the canopy tailnet endpoint is reachable, plain HTTPS works (auth is implicit via tailscale identity).
- mTLS: a fresh self-signed cert from the device key, short-lived
([
CERT_VALIDITY_DAYS]); for long-running daemons,Self::renewshould tick onCERT_RENEW_AFTERto swap in a fresh cert before expiry.
Self::refresh re-probes tailscale and swaps modes on reload.
Implementations§
Source§impl CanopyClient
impl CanopyClient
Sourcepub async fn new(
device_key_pem: Option<&str>,
make_builder: impl Fn() -> ClientBuilder + Send + Sync + 'static,
) -> Result<Option<Self>>
pub async fn new( device_key_pem: Option<&str>, make_builder: impl Fn() -> ClientBuilder + Send + Sync + 'static, ) -> Result<Option<Self>>
Build a canopy client against the default public (DEFAULT_CANOPY_URL)
and tailscale (TAILSCALE_URL) endpoints. Use Self::with_urls to
override them.
Probes the tailscale endpoint first; if reachable, uses it. Otherwise, if
a device key PEM is provided, builds an mTLS client. Returns Ok(None) if
neither path is available.
make_builder supplies the base reqwest::ClientBuilder — see
ClientBuilderFactory.
Sourcepub async fn with_urls(
base_url: Url,
tailscale_url: Url,
device_key_pem: Option<&str>,
make_builder: impl Fn() -> ClientBuilder + Send + Sync + 'static,
) -> Result<Option<Self>>
pub async fn with_urls( base_url: Url, tailscale_url: Url, device_key_pem: Option<&str>, make_builder: impl Fn() -> ClientBuilder + Send + Sync + 'static, ) -> Result<Option<Self>>
Build a canopy client against explicit endpoints.
base_url is canopy’s public API URL (the registration’s api_url),
used on the mTLS path; tailscale_url is the tailnet endpoint used on
the tailscale path. Both are fixed for the client’s lifetime. See
Self::new for the other arguments and the default-endpoint form.
Sourcepub async fn is_tailscale(&self) -> bool
pub async fn is_tailscale(&self) -> bool
Returns true if the client is currently using the tailscale path.
Source§impl CanopyClient
impl CanopyClient
Sourcepub async fn artifacts(
&self,
version: &str,
artifact_type: &str,
platform: &str,
) -> Result<Artifact>
pub async fn artifacts( &self, version: &str, artifact_type: &str, platform: &str, ) -> Result<Artifact>
Register a downloadable artifact for a version or version range.
Requires a device certificate with the releaser role (or admin). The
path identifies the version the artifact belongs to — either an exact
version (e.g. 2.10.5) or a semver range pattern (e.g. 2.10.x,
^2.10.0) — followed by the artifact’s type and target platform. The
request body is the plain-text URL clients should download the
artifact from.
When an exact version is given and it doesn’t exist yet, it is created automatically as an unpublished draft so the artifact has a version to attach to; publishing that version later (via the version-creation endpoint) is a separate step. When a range pattern is given instead, the artifact isn’t tied to one version — it matches whichever published version currently satisfies the range at lookup time.
Returns the created artifact record. Returns 400 if the version or range syntax can’t be parsed.
POST /artifacts/{version}/{artifact_type}/{platform}
Sourcepub async fn backup_capabilities(
&self,
body: &BackupCapabilitiesArgs,
) -> Result<()>
pub async fn backup_capabilities( &self, body: &BackupCapabilitiesArgs, ) -> Result<()>
Register the backup types this server can run.
Declares the set of backup types the calling device is able to execute on its server. Types not seen before are added to the server’s capability set, starting out enabled or disabled according to the fleet-wide default for that type (disabled if the type has no default configured). Types already registered keep whatever enabled/disabled state an operator has set for them, so re-registering on every startup is safe and expected.
Only types that are registered here (and enabled) can later be issued
credentials via POST /backup-credentials, outside of explicit
operator-requested runs.
Errors: 412 when the calling device is not bound to a live server; 409 when the server is not in a group.
POST /backup-capabilities
Sourcepub async fn backup_credentials(
&self,
body: &BackupCredentialsArgs,
) -> Result<CredentialProcessOutput>
pub async fn backup_credentials( &self, body: &BackupCredentialsArgs, ) -> Result<CredentialProcessOutput>
Mint short-lived S3 credentials for a backup or restore run.
Issues temporary AWS credentials scoped to the backup storage of the
calling server’s group, in the credential_process output format. With
purpose: backup the credentials can upload and manage backup data but
cannot destroy existing backups; with purpose: restore they are strictly
read-only. They expire after at most one hour, so request a fresh set for
each run rather than caching them. Every issuance is recorded for audit.
The storage coordinates the credentials apply to (bucket, prefix, region)
come from GET /backup-target.
Errors: 409 when the server is not in a group, when the group’s backup configuration is not ready, or when the requested type is neither an enabled capability of this server nor the subject of a pending operator-requested run of the given purpose; 412 when the device is not bound to a live server; 502 when the credential issuer is unavailable or not configured.
POST /backup-credentials
Sourcepub async fn backup_report(&self, body: &ReportArgs) -> Result<()>
pub async fn backup_report(&self, body: &ReportArgs) -> Result<()>
Report the outcome of a backup or restore run.
Records the run against the calling server and its group. Send one report
per run, on success and on failure alike. Reporting also clears any pending
operator-requested run for the same type and purpose — regardless of
outcome, since an operator request is for one attempt — so the server’s
status responses stop asking for it (see the backup_now field of the
status-push response).
Errors: 409 when the server is not in a group, or when the run_id has
already been reported; 412 when the device is not bound to a live server.
POST /backup-report
Sourcepub async fn backup_target(&self) -> Result<BackupTarget>
pub async fn backup_target(&self) -> Result<BackupTarget>
Fetch the backup storage target for this server’s group.
Returns the bucket, prefix, region, and repository passphrase the device
needs to connect to its group’s backup repository. Call it on every run
rather than caching the result, as the target can change. S3 credentials
are obtained separately via POST /backup-credentials.
Errors: 409 when the server is not in a group or the group’s backup configuration is not ready; 412 when the device is not bound to a live server; 502 when the passphrase store is unavailable or not configured.
GET /backup-target
Sourcepub async fn bestool_snippets(&self) -> Result<Value>
pub async fn bestool_snippets(&self) -> Result<Value>
List all current bestool SQL snippets.
Returns the library of named SQL snippets that devices running bestool fetch and run, keyed by snippet name. Only the current version of each snippet is included: if a snippet has been superseded by a newer one under the same name, only the newer version is returned, and soft-deleted snippets are omitted entirely. This endpoint does not require device authentication.
GET /bestool/snippets
Sourcepub async fn events(&self, body: &NewEvent) -> Result<Issue>
pub async fn events(&self, body: &NewEvent) -> Result<Issue>
Report an event against the calling device’s server.
Requires a device certificate with the server role (or admin). Used to
push a status update — a healthcheck result, an alert condition, or a
“condition cleared” notice — which canopy records as an issue and, if
the server belongs to a group, may fold into an incident. An event
with the same source and ref as an already-open issue on this
server updates that issue instead of opening a new one.
The calling device must already be enrolled against exactly one
server, otherwise the request fails with 412. The source value
"manual" is reserved for operator-entered events and is rejected
with 400 here, as is an empty ref.
Returns the issue the event was recorded against (existing or newly created).
POST /events
Sourcepub async fn restore_capabilities(
&self,
body: &RestoreCapabilitiesArgs,
) -> Result<()>
pub async fn restore_capabilities( &self, body: &RestoreCapabilitiesArgs, ) -> Result<()>
Register the restore intents this device can satisfy.
Declares the restore intents the calling device supports, replacing any
previously advertised set. Only worklist entries whose intent is currently
advertised are dispatched to this device via GET /restore-worklist, so
register on startup and whenever the supported set changes.
POST /restore-capabilities
Sourcepub async fn restore_credentials(
&self,
body: &RestoreCredentialsArgs,
) -> Result<RestoreCredentials>
pub async fn restore_credentials( &self, body: &RestoreCredentialsArgs, ) -> Result<RestoreCredentials>
Mint read-only credentials for a group’s backup repository.
Issues temporary AWS credentials — always strictly read-only, scoped to the group’s backup storage — together with the repository passphrase, so the device can read the snapshot named in a worklist entry. Credentials expire after at most one hour; request a fresh set per restore rather than caching them. Every issuance is recorded for audit.
The device must hold an enabled restore declaration covering the requested group and type (i.e. the pair must appear in its worklist configuration); otherwise the request is rejected with 403.
Errors: 403 when no enabled declaration authorizes this group and type; 409 when the group has no ready backup configuration; 502 when the credential issuer or the passphrase store is unavailable or not configured.
POST /restore-credentials
Sourcepub async fn restore_verification(&self, body: &VerificationArgs) -> Result<()>
pub async fn restore_verification(&self, body: &VerificationArgs) -> Result<()>
Report the outcome of a restore attempt and the replica’s health.
Records a verification report for a restore the device performed from its
worklist. Send one report per attempt, on success and on failure alike. A
report with a success outcome and replica_healthy: true marks the
snapshot as verified; for run-once intents this is what removes the entry
from GET /restore-worklist until a newer snapshot appears.
Authorization matches POST /restore-credentials: the device must hold an
enabled restore declaration covering the reported group and type,
otherwise the request is rejected with 403.
POST /restore-verification
Sourcepub async fn restore_worklist(&self) -> Result<Vec<WorklistEntry>>
pub async fn restore_worklist(&self) -> Result<Vec<WorklistEntry>>
Fetch the full set of replicas this device should maintain.
Returns the device’s complete desired state, computed fresh on every call: each enabled restore declaration whose intent this device currently advertises, expanded into one entry per server it covers. A group-wide declaration expands to every live server in its group; a server-scoped declaration yields a single entry and takes precedence over a group-wide one covering the same server, type, and intent. Entries for groups whose backup configuration is not ready are omitted, and entries for run-once intents disappear once the latest snapshot has a healthy verification report, reappearing when a newer snapshot exists.
An empty array means there is nothing to do. Poll this endpoint and reconcile: create or refresh the replicas listed, and tear down any the device is maintaining that no longer appear.
GET /restore-worklist
Sourcepub async fn servers(&self) -> Result<Vec<PublicServer>>
pub async fn servers(&self) -> Result<Vec<PublicServer>>
List publicly-listed central servers.
Returns every central server that has both a public display name and a reachable host configured, ordered by environment tier (production first, then clone, demo, test, dev) and then by name. Used by clients to let a user pick which server to connect to.
GET /servers
Sourcepub async fn servers_register_begin(
&self,
body: &BeginArgs,
) -> Result<BeginResponse>
pub async fn servers_register_begin( &self, body: &BeginArgs, ) -> Result<BeginResponse>
Start device enrollment against a server.
Validates the enrollment token against the given server and, if valid, issues a short-lived (5 minute) signed challenge bound to the server ID, the token, and the caller’s public key. The device must sign this challenge and submit it to the completion endpoint to finish enrollment; the token itself is validated here but not yet consumed.
This endpoint is rate-limited per source IP and per target server; a tripped limit returns 429. Any other failure — an unknown or deleted server, or an invalid or expired token — is surfaced as a generic 403, deliberately not distinguishing which check failed.
POST /servers/register/begin
Sourcepub async fn servers_register_complete(
&self,
body: &CompleteArgs,
) -> Result<CompleteResponse>
pub async fn servers_register_complete( &self, body: &CompleteArgs, ) -> Result<CompleteResponse>
Complete device enrollment by presenting a signed challenge.
Verifies the signature over the challenge transcript using the public key supplied here, then binds the device to the server: an existing device re-enrolling with the same key is reused as-is; a device re-enrolling with a different key replaces the server’s previous device (revoking that device’s access); otherwise a new device identity is created. On success the device is granted the server role, the enrollment token is consumed, and the server is marked as registered.
Enrollment is refused if the presented public key is already bound to a different live server. Like the start-enrollment endpoint, this one is rate-limited per source IP and per target server (429 on a tripped limit) and reports every other kind of failure as a generic 403.
POST /servers/register/complete
Sourcepub async fn status(
&self,
server_id: &str,
body: &Value,
) -> Result<StatusResponse>
pub async fn status( &self, server_id: &str, body: &Value, ) -> Result<StatusResponse>
Submit a status heartbeat for a server.
Records a periodic status push against the server identified in the path: overall self-reported health, a per-check breakdown, and any free-form extra data. Each failed or warning check opens (or keeps open) an issue at that check’s operator-configured severity, and each passed check closes any issue it previously opened; the server’s tracked software version is also updated from the payload.
The calling device must be the one enrolled for this exact server (or
hold the admin role). The response echoes back the stored status
record, plus a backup_now list of backup types the server should
back up immediately — devices should treat a non-empty list as a
prompt to run those backups and report them afterwards.
POST /status/{server_id}
Get the tags for the calling device’s own server.
Returns the effective set of tags for the server the calling device is registered as: any tags set on the server itself, overlaid onto any tags inherited from its server group (a tag set on the server takes precedence over a group tag with the same key). If the server isn’t in a group, this returns just its own tags.
The result also includes a few read-only, synthetic tags describing the
server, under the reserved canopy: key prefix: canopy:kind,
canopy:rank (if the server has one set), and canopy:group-id /
canopy:group-name (if the server belongs to a group). Operators cannot
set tags under that prefix, so these never collide with tags you set
yourself.
- 401: the request has no client certificate, or the certificate doesn’t match a known device.
- 409: the calling device is attached to more than one server, which should not normally happen; contact support if you see this.
- 412: the device is registered but has not yet been attached to a server.
GET /tags
Sourcepub async fn get_versions(&self) -> Result<Vec<Version>>
pub async fn get_versions(&self) -> Result<Vec<Version>>
List published, ready-to-serve versions.
Returns every version currently in the published state, excluding any version a recorded known-issue range still covers (whether that issue is still open or has since been fixed in a later patch). Ordered newest first.
GET /versions
Sourcepub async fn versions_update_for(
&self,
version: &str,
) -> Result<Vec<ViewVersion>>
pub async fn versions_update_for( &self, version: &str, ) -> Result<Vec<ViewVersion>>
Check for available updates from a given version.
The path parameter is the caller’s currently-installed exact version. For each later minor release line within the same major version, returns the latest published version that hasn’t been excluded by a recorded known-issue range — falling back to an older ready patch within that same minor line rather than dropping the line entirely, if the newest patch isn’t ready. Clients use this to discover and offer available updates.
GET /versions/update-for/{version}
Sourcepub async fn delete_versions(&self, version: &str) -> Result<()>
pub async fn delete_versions(&self, version: &str) -> Result<()>
Yank a version.
Requires a device certificate with the admin role. Marks the given exact version as yanked, hiding it from listings, update checks, and artifact lookups without deleting its history.
DELETE /versions/{version}
Sourcepub async fn post_versions(&self, version: &str) -> Result<Version>
pub async fn post_versions(&self, version: &str) -> Result<Version>
Publish a version with its changelog.
Requires a device certificate with the releaser role (or admin). The
path parameter is the exact version being published (e.g. 2.10.5);
the request body is the changelog for that version, as up to 1 MiB of
markdown text.
If the version already exists in the draft state — for example because an artifact was registered against it before its changelog was written — the draft is published in place, with this changelog replacing whatever it had before. Otherwise a new version is created directly in the published state. Publishing a version that already exists and is not a draft (already published, or yanked) fails.
Returns the resulting version record.
POST /versions/{version}
Sourcepub async fn versions_artifacts(&self, version: &str) -> Result<Vec<Artifact>>
pub async fn versions_artifacts(&self, version: &str) -> Result<Vec<Artifact>>
List the artifacts available for a version or version range.
The path parameter accepts either an exact version or a semver range
pattern (e.g. 2.10.x, ^2.10.0). It resolves to the latest
published, ready version satisfying the input, then returns that
version’s artifacts — both ones registered against the exact version
and ones registered against a range pattern that covers it. Returns
404 if no published, ready version matches.
GET /versions/{version}/artifacts
Trait Implementations§
Auto Trait Implementations§
impl !Freeze for CanopyClient
impl !RefUnwindSafe for CanopyClient
impl !UnwindSafe for CanopyClient
impl Send for CanopyClient
impl Sync for CanopyClient
impl Unpin for CanopyClient
impl UnsafeUnpin for CanopyClient
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> 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 moreSource§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more