pub struct Service {
pub id: i32,
pub name: String,
pub version: f32,
pub inputformat: String,
pub outputformat: String,
pub inputconverter: Option<String>,
pub complex: bool,
pub description: String,
pub public_id: Uuid,
pub lease_timeout_seconds: Option<i32>,
}Expand description
A CorTeX processing service
Fields§
§id: i32auto-incremented postgres id
name: Stringa human-readable name
version: f32a floating-point number to mark the current version (e.g. 0.01)
inputformat: Stringthe expected input format (e.g. tex)
outputformat: Stringthe produced output format (e.g. html)
inputconverter: Option<String>prerequisite input conversion service, if any
complex: boolis this service requiring more than the main textual content of a document? mark “true” if unsure
description: Stringa human-readable description
public_id: UuidStable external handle (UUIDv7, DB-generated), independent of the mutable name — for
public/API references that must survive a rename. Immutable once assigned (Arm 3 / D8).
lease_timeout_seconds: Option<i32>Per-service lease / visibility-timeout override in seconds (D-17). None ⇒ use the global
dispatcher.lease_timeout_seconds. Lets one dispatcher serve fast (latexml-oxide, short
lease) and slow (Perl LaTeXML, long lease) worker classes without false reaps or delayed
dead-worker recovery. Captured into TaskProgress at dispatch time, so a config change
never re-times an already-leased task.
Implementations§
Source§impl Service
impl Service
Sourcepub fn find_by_name(
name_query: &str,
connection: &mut PgConnection,
) -> Result<Service, Error>
pub fn find_by_name( name_query: &str, connection: &mut PgConnection, ) -> Result<Service, Error>
ORM-like until diesel.rs introduces finders for more fields
Sourcepub fn all(connection: &mut PgConnection) -> Result<Vec<Self>, Error>
pub fn all(connection: &mut PgConnection) -> Result<Vec<Self>, Error>
Returns all registered services, ordered by name (the service registry). Includes the magic
init (id 1) and import (id 2) services alongside the real conversion services (id > 2).
Sourcepub fn set_lease_timeout(
&self,
seconds: Option<i32>,
connection: &mut PgConnection,
) -> Result<usize, Error>
pub fn set_lease_timeout( &self, seconds: Option<i32>, connection: &mut PgConnection, ) -> Result<usize, Error>
Sets (or clears, with None) this service’s per-service lease / visibility-timeout override
(D-17). None ⇒ fall back to the global dispatcher.lease_timeout_seconds. Captured into
TaskProgress only at lease time, so a change takes effect on the next dispatch and never
re-times an already-leased task. Returns the rows updated (1, or 0 if the service vanished).
Sourcepub fn to_hash(&self) -> HashMap<String, String>
pub fn to_hash(&self) -> HashMap<String, String>
Returns a hash representation of the Service, usually for frontend reports
Sourcepub fn select_workers(
&self,
connection: &mut PgConnection,
) -> Result<Vec<WorkerMetadata>, Error>
pub fn select_workers( &self, connection: &mut PgConnection, ) -> Result<Vec<WorkerMetadata>, Error>
Return the dispatcher’s registered workers for this service
Sourcepub fn task_count_for_corpus(
&self,
corpus: &Corpus,
connection: &mut PgConnection,
) -> Result<i64, Error>
pub fn task_count_for_corpus( &self, corpus: &Corpus, connection: &mut PgConnection, ) -> Result<i64, Error>
Counts this service’s tasks on a given corpus — the size of what
Self::deactivate_from_corpus would delete. Used to preview the blast radius of a
destructive deactivation before executing.
Sourcepub fn total_task_count(
&self,
connection: &mut PgConnection,
) -> Result<i64, Error>
pub fn total_task_count( &self, connection: &mut PgConnection, ) -> Result<i64, Error>
Counts this service’s tasks across every corpus — the size of what Self::destroy would
delete. Used to preview the blast radius of a registry-wide service deletion before executing.
Sourcepub fn deactivate_from_corpus(
&self,
corpus: &Corpus,
connection: &mut PgConnection,
) -> Result<usize, Error>
pub fn deactivate_from_corpus( &self, corpus: &Corpus, connection: &mut PgConnection, ) -> Result<usize, Error>
Deactivates (retires) this service from a single corpus: deletes the (corpus, service)
pair’s tasks and their log_* rows in one transaction, returning the number of tasks
removed. The service definition and its work on other corpora are untouched. The log_*
tables have no FK to tasks, so their rows are deleted explicitly before the tasks or
they orphan (the same hazard closed in super::Corpus::destroy); transactional so a crash
can’t half-delete. historical_runs tallies survive (no FK to tasks), while per-task
historical_tasks snapshots cascade away with the tasks — the same semantics as deleting a
corpus.
Sourcepub fn destroy(self, connection: &mut PgConnection) -> Result<usize, Error>
pub fn destroy(self, connection: &mut PgConnection) -> Result<usize, Error>
Permanently deletes this service and all of its work across every corpus — the log_*
messages and tasks of every (*, service) pair, then the services row itself — consuming
the object and returning the number of rows the final services delete removed. One
transaction, so a crash can’t leave the service half-deleted (crash-consistency,
docs/DESIGN_PRINCIPLES.md). The log_* tables have no FK to tasks, so their rows are
deleted explicitly before the tasks or they orphan — the hazard closed in
super::Corpus::destroy and the reason this is one primitive rather than a bare
DELETE FROM services (which is exactly the latent delete_service_by_name orphan bug, R-6).
historical_runs tallies survive (no FK to tasks), while per-task historical_tasks
snapshots cascade away with the tasks — the same semantics as
Self::deactivate_from_corpus and corpus deletion.
Caller’s contract: the magic init (1) and import (2) services are infrastructure and
must never be destroyed; this method does not itself guard them (mirroring
super::Corpus::destroy, which guards nothing). crate::backend’s
destroy_service_by_name enforces the guard, and the frontend rejects them with 403 before
ever reaching here.
Trait Implementations§
Source§impl AsChangeset for Service
impl AsChangeset for Service
Source§type Changeset = <(Grouped<Eq<name, <String as AsExpression<<name as Expression>::SqlType>>::Expression>>, Grouped<Eq<version, <f32 as AsExpression<<version as Expression>::SqlType>>::Expression>>, Grouped<Eq<inputformat, <String as AsExpression<<inputformat as Expression>::SqlType>>::Expression>>, Grouped<Eq<outputformat, <String as AsExpression<<outputformat as Expression>::SqlType>>::Expression>>, Option<Grouped<Eq<inputconverter, <String as AsExpression<<inputconverter as Expression>::SqlType>>::Expression>>>, Grouped<Eq<complex, <bool as AsExpression<<complex as Expression>::SqlType>>::Expression>>, Grouped<Eq<description, <String as AsExpression<<description as Expression>::SqlType>>::Expression>>, Grouped<Eq<public_id, <Uuid as AsExpression<<public_id as Expression>::SqlType>>::Expression>>, Option<Grouped<Eq<lease_timeout_seconds, <i32 as AsExpression<<lease_timeout_seconds as Expression>::SqlType>>::Expression>>>) as AsChangeset>::Changeset
type Changeset = <(Grouped<Eq<name, <String as AsExpression<<name as Expression>::SqlType>>::Expression>>, Grouped<Eq<version, <f32 as AsExpression<<version as Expression>::SqlType>>::Expression>>, Grouped<Eq<inputformat, <String as AsExpression<<inputformat as Expression>::SqlType>>::Expression>>, Grouped<Eq<outputformat, <String as AsExpression<<outputformat as Expression>::SqlType>>::Expression>>, Option<Grouped<Eq<inputconverter, <String as AsExpression<<inputconverter as Expression>::SqlType>>::Expression>>>, Grouped<Eq<complex, <bool as AsExpression<<complex as Expression>::SqlType>>::Expression>>, Grouped<Eq<description, <String as AsExpression<<description as Expression>::SqlType>>::Expression>>, Grouped<Eq<public_id, <Uuid as AsExpression<<public_id as Expression>::SqlType>>::Expression>>, Option<Grouped<Eq<lease_timeout_seconds, <i32 as AsExpression<<lease_timeout_seconds as Expression>::SqlType>>::Expression>>>) as AsChangeset>::Changeset
Source§fn as_changeset(self) -> <Self as AsChangeset>::Changeset
fn as_changeset(self) -> <Self as AsChangeset>::Changeset
self into the actual update statement being executedSource§impl<'update> AsChangeset for &'update Servicewhere
(Eq<name, &'update String>, Eq<version, &'update f32>, Eq<inputformat, &'update String>, Eq<outputformat, &'update String>, Option<Eq<inputconverter, &'update String>>, Eq<complex, &'update bool>, Eq<description, &'update String>, Eq<public_id, &'update Uuid>, Option<Eq<lease_timeout_seconds, &'update i32>>): AsChangeset,
impl<'update> AsChangeset for &'update Servicewhere
(Eq<name, &'update String>, Eq<version, &'update f32>, Eq<inputformat, &'update String>, Eq<outputformat, &'update String>, Option<Eq<inputconverter, &'update String>>, Eq<complex, &'update bool>, Eq<description, &'update String>, Eq<public_id, &'update Uuid>, Option<Eq<lease_timeout_seconds, &'update i32>>): AsChangeset,
Source§type Changeset = <(Grouped<Eq<name, <&'update String as AsExpression<<name as Expression>::SqlType>>::Expression>>, Grouped<Eq<version, <&'update f32 as AsExpression<<version as Expression>::SqlType>>::Expression>>, Grouped<Eq<inputformat, <&'update String as AsExpression<<inputformat as Expression>::SqlType>>::Expression>>, Grouped<Eq<outputformat, <&'update String as AsExpression<<outputformat as Expression>::SqlType>>::Expression>>, Option<Grouped<Eq<inputconverter, <&'update String as AsExpression<<inputconverter as Expression>::SqlType>>::Expression>>>, Grouped<Eq<complex, <&'update bool as AsExpression<<complex as Expression>::SqlType>>::Expression>>, Grouped<Eq<description, <&'update String as AsExpression<<description as Expression>::SqlType>>::Expression>>, Grouped<Eq<public_id, <&'update Uuid as AsExpression<<public_id as Expression>::SqlType>>::Expression>>, Option<Grouped<Eq<lease_timeout_seconds, <&'update i32 as AsExpression<<lease_timeout_seconds as Expression>::SqlType>>::Expression>>>) as AsChangeset>::Changeset
type Changeset = <(Grouped<Eq<name, <&'update String as AsExpression<<name as Expression>::SqlType>>::Expression>>, Grouped<Eq<version, <&'update f32 as AsExpression<<version as Expression>::SqlType>>::Expression>>, Grouped<Eq<inputformat, <&'update String as AsExpression<<inputformat as Expression>::SqlType>>::Expression>>, Grouped<Eq<outputformat, <&'update String as AsExpression<<outputformat as Expression>::SqlType>>::Expression>>, Option<Grouped<Eq<inputconverter, <&'update String as AsExpression<<inputconverter as Expression>::SqlType>>::Expression>>>, Grouped<Eq<complex, <&'update bool as AsExpression<<complex as Expression>::SqlType>>::Expression>>, Grouped<Eq<description, <&'update String as AsExpression<<description as Expression>::SqlType>>::Expression>>, Grouped<Eq<public_id, <&'update Uuid as AsExpression<<public_id as Expression>::SqlType>>::Expression>>, Option<Grouped<Eq<lease_timeout_seconds, <&'update i32 as AsExpression<<lease_timeout_seconds as Expression>::SqlType>>::Expression>>>) as AsChangeset>::Changeset
Source§fn as_changeset(self) -> <Self as AsChangeset>::Changeset
fn as_changeset(self) -> <Self as AsChangeset>::Changeset
self into the actual update statement being executedSource§impl<__FK> BelongsTo<&Service> for Taskwhere
__FK: Hash + Eq,
for<'__a> &'__a i32: Into<Option<&'__a __FK>>,
for<'__a> &'__a Service: Identifiable<Id = &'__a __FK>,
impl<__FK> BelongsTo<&Service> for Taskwhere
__FK: Hash + Eq,
for<'__a> &'__a i32: Into<Option<&'__a __FK>>,
for<'__a> &'__a Service: Identifiable<Id = &'__a __FK>,
Source§type ForeignKey = __FK
type ForeignKey = __FK
Source§type ForeignKeyColumn = service_id
type ForeignKeyColumn = service_id
Source§fn foreign_key(&self) -> Option<&Self::ForeignKey>
fn foreign_key(&self) -> Option<&Self::ForeignKey>
selfSource§fn foreign_key_column() -> Self::ForeignKeyColumn
fn foreign_key_column() -> Self::ForeignKeyColumn
Source§impl<__FK> BelongsTo<&Service> for WorkerMetadatawhere
__FK: Hash + Eq,
for<'__a> &'__a i32: Into<Option<&'__a __FK>>,
for<'__a> &'__a Service: Identifiable<Id = &'__a __FK>,
impl<__FK> BelongsTo<&Service> for WorkerMetadatawhere
__FK: Hash + Eq,
for<'__a> &'__a i32: Into<Option<&'__a __FK>>,
for<'__a> &'__a Service: Identifiable<Id = &'__a __FK>,
Source§type ForeignKey = __FK
type ForeignKey = __FK
Source§type ForeignKeyColumn = service_id
type ForeignKeyColumn = service_id
Source§fn foreign_key(&self) -> Option<&Self::ForeignKey>
fn foreign_key(&self) -> Option<&Self::ForeignKey>
selfSource§fn foreign_key_column() -> Self::ForeignKeyColumn
fn foreign_key_column() -> Self::ForeignKeyColumn
Source§impl<__FK> BelongsTo<&Service> for HistoricalRunwhere
__FK: Hash + Eq,
for<'__a> &'__a i32: Into<Option<&'__a __FK>>,
for<'__a> &'__a Service: Identifiable<Id = &'__a __FK>,
impl<__FK> BelongsTo<&Service> for HistoricalRunwhere
__FK: Hash + Eq,
for<'__a> &'__a i32: Into<Option<&'__a __FK>>,
for<'__a> &'__a Service: Identifiable<Id = &'__a __FK>,
Source§type ForeignKey = __FK
type ForeignKey = __FK
Source§type ForeignKeyColumn = service_id
type ForeignKeyColumn = service_id
Source§fn foreign_key(&self) -> Option<&Self::ForeignKey>
fn foreign_key(&self) -> Option<&Self::ForeignKey>
selfSource§fn foreign_key_column() -> Self::ForeignKeyColumn
fn foreign_key_column() -> Self::ForeignKeyColumn
Source§impl<__FK> BelongsTo<Service> for Taskwhere
__FK: Hash + Eq,
for<'__a> &'__a i32: Into<Option<&'__a __FK>>,
for<'__a> &'__a Service: Identifiable<Id = &'__a __FK>,
impl<__FK> BelongsTo<Service> for Taskwhere
__FK: Hash + Eq,
for<'__a> &'__a i32: Into<Option<&'__a __FK>>,
for<'__a> &'__a Service: Identifiable<Id = &'__a __FK>,
Source§type ForeignKey = __FK
type ForeignKey = __FK
Source§type ForeignKeyColumn = service_id
type ForeignKeyColumn = service_id
Source§fn foreign_key(&self) -> Option<&Self::ForeignKey>
fn foreign_key(&self) -> Option<&Self::ForeignKey>
selfSource§fn foreign_key_column() -> Self::ForeignKeyColumn
fn foreign_key_column() -> Self::ForeignKeyColumn
Source§impl<__FK> BelongsTo<Service> for WorkerMetadatawhere
__FK: Hash + Eq,
for<'__a> &'__a i32: Into<Option<&'__a __FK>>,
for<'__a> &'__a Service: Identifiable<Id = &'__a __FK>,
impl<__FK> BelongsTo<Service> for WorkerMetadatawhere
__FK: Hash + Eq,
for<'__a> &'__a i32: Into<Option<&'__a __FK>>,
for<'__a> &'__a Service: Identifiable<Id = &'__a __FK>,
Source§type ForeignKey = __FK
type ForeignKey = __FK
Source§type ForeignKeyColumn = service_id
type ForeignKeyColumn = service_id
Source§fn foreign_key(&self) -> Option<&Self::ForeignKey>
fn foreign_key(&self) -> Option<&Self::ForeignKey>
selfSource§fn foreign_key_column() -> Self::ForeignKeyColumn
fn foreign_key_column() -> Self::ForeignKeyColumn
Source§impl<__FK> BelongsTo<Service> for HistoricalRunwhere
__FK: Hash + Eq,
for<'__a> &'__a i32: Into<Option<&'__a __FK>>,
for<'__a> &'__a Service: Identifiable<Id = &'__a __FK>,
impl<__FK> BelongsTo<Service> for HistoricalRunwhere
__FK: Hash + Eq,
for<'__a> &'__a i32: Into<Option<&'__a __FK>>,
for<'__a> &'__a Service: Identifiable<Id = &'__a __FK>,
Source§type ForeignKey = __FK
type ForeignKey = __FK
Source§type ForeignKeyColumn = service_id
type ForeignKeyColumn = service_id
Source§fn foreign_key(&self) -> Option<&Self::ForeignKey>
fn foreign_key(&self) -> Option<&Self::ForeignKey>
selfSource§fn foreign_key_column() -> Self::ForeignKeyColumn
fn foreign_key_column() -> Self::ForeignKeyColumn
Source§impl From<Service> for ServiceDto
impl From<Service> for ServiceDto
Source§fn from(service: Service) -> ServiceDto
fn from(service: Service) -> ServiceDto
Source§impl<__DB: Backend, __ST0, __ST1, __ST2, __ST3, __ST4, __ST5, __ST6, __ST7, __ST8, __ST9> Queryable<(__ST0, __ST1, __ST2, __ST3, __ST4, __ST5, __ST6, __ST7, __ST8, __ST9), __DB> for Service
impl<__DB: Backend, __ST0, __ST1, __ST2, __ST3, __ST4, __ST5, __ST6, __ST7, __ST8, __ST9> Queryable<(__ST0, __ST1, __ST2, __ST3, __ST4, __ST5, __ST6, __ST7, __ST8, __ST9), __DB> for Service
Auto Trait Implementations§
impl Freeze for Service
impl RefUnwindSafe for Service
impl Send for Service
impl Sync for Service
impl Unpin for Service
impl UnsafeUnpin for Service
impl UnwindSafe for Service
Blanket Implementations§
§impl<T> AggregateExpressionMethods for T
impl<T> AggregateExpressionMethods for T
§fn aggregate_distinct(self) -> Self::Outputwhere
Self: DistinctDsl,
fn aggregate_distinct(self) -> Self::Outputwhere
Self: DistinctDsl,
DISTINCT modifier for aggregate functions Read more§fn aggregate_all(self) -> Self::Outputwhere
Self: AllDsl,
fn aggregate_all(self) -> Self::Outputwhere
Self: AllDsl,
ALL modifier for aggregate functions Read more§fn aggregate_filter<P>(self, f: P) -> Self::Outputwhere
P: AsExpression<Bool>,
Self: FilterDsl<<P as AsExpression<Bool>>::Expression>,
fn aggregate_filter<P>(self, f: P) -> Self::Outputwhere
P: AsExpression<Bool>,
Self: FilterDsl<<P as AsExpression<Bool>>::Expression>,
§fn aggregate_order<O>(self, o: O) -> Self::Outputwhere
Self: OrderAggregateDsl<O>,
fn aggregate_order<O>(self, o: O) -> Self::Outputwhere
Self: OrderAggregateDsl<O>,
§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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§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>, which can then be
downcast into Box<dyn 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>, which 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> DowncastSend for T
impl<T> DowncastSend for T
§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§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>
§impl<T> IntoCollection<T> for T
impl<T> IntoCollection<T> for T
§fn into_collection<A>(self) -> SmallVec<A>where
A: Array<Item = T>,
fn into_collection<A>(self) -> SmallVec<A>where
A: Array<Item = T>,
self into a collection.fn mapped<U, F, A>(self, f: F) -> SmallVec<A>where
F: FnMut(T) -> U,
A: Array<Item = U>,
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> IntoSql for T
impl<T> IntoSql for T
§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
§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();§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
§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();§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
§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();§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
§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();§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.
§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);