pub struct RestApi { /* private fields */ }Expand description
REST API backend for Vantage — reads data from HTTP JSON endpoints.
Each table maps to an API endpoint: {base_url}/{table_name}.
Response shape, paging, filtering and auth are set through
RestApi::builder. Table writes return Unsupported errors; send a
write with http_request. Cheap to clone: the
inner ResilientClient is shared.
Implementations§
Source§impl RestApi
impl RestApi
Sourcepub fn new(base_url: impl Into<String>) -> Self
pub fn new(base_url: impl Into<String>) -> Self
Create a new REST API pointing at base_url, with every builder
default: the ResponseShape::default envelope ({ "data": [...] })
and JSON Server paging params. For other shapes (bare array,
wrapped-by-table-name) or auth, use RestApi::builder.
Sourcepub fn builder(base_url: impl Into<String>) -> RestApiBuilder
pub fn builder(base_url: impl Into<String>) -> RestApiBuilder
Start configuring a RestApi via the builder.
Sourcepub fn total_key(&self) -> Option<&str>
pub fn total_key(&self) -> Option<&str>
The configured response-envelope total key, if any. When set, the
REST shell can report an exact count and serve fetch_window.
Sourcepub fn ordering(&self) -> Option<&OrderingParams>
pub fn ordering(&self) -> Option<&OrderingParams>
The sort query param, when configured.
Sourcepub fn breaker_state(&self) -> Option<BreakerState>
pub fn breaker_state(&self) -> Option<BreakerState>
What the circuit breaker is doing right now. None when the
underlying client has no breaker configured.
Sourcepub fn client(&self) -> &ResilientClient
pub fn client(&self) -> &ResilientClient
The resilient client backing this API — the pool, breaker and observer a caller outside the read path (e.g. an outbox replaying a queued write) should share rather than build its own.
Sourcepub fn with_bearer_source(&self, source: BearerSource) -> Self
pub fn with_bearer_source(&self, source: BearerSource) -> Self
A clone whose requests carry the bearer token source gives at the
moment each one goes out, in place of the configured auth. The
clone shares this API’s client — connection pool, parallel cap,
breaker and observer — so one clone per session costs no extra
connections. See BearerSource.
The client adds an auth_refresher’s
header itself, so a clone can’t withdraw it: build the shared API
without a refresher when its clones bring their own tokens.
Sourcepub async fn http_request(
&self,
method: Method,
path: &str,
headers: &[(&str, &str)],
body: Option<&Value>,
) -> Result<Response>
pub async fn http_request( &self, method: Method, path: &str, headers: &[(&str, &str)], body: Option<&Value>, ) -> Result<Response>
Issue an arbitrary HTTP request against base_url/path, through
the same resilient client and auth header as reads.
headers are applied after the configured Authorization header, so
a caller-supplied header of the same name wins. body, when given,
is sent as the JSON request body. The call policy follows
vantage_core::Priority::current, same as a table read. On success,
a non-GET method reports TransportEvent::WritePushed to the
observer.
A header name or value that HTTP cannot carry (a newline, say) is an error, returned before anything is sent.
Source§impl RestApi
impl RestApi
Sourcepub fn vista_factory(&self) -> RestApiVistaFactory
pub fn vista_factory(&self) -> RestApiVistaFactory
Return a Vista factory bound to this REST API data source.
Trait Implementations§
impl DataSource for RestApi
Source§impl ExprDataSource<Value> for RestApi
impl ExprDataSource<Value> for RestApi
Source§async fn execute(&self, expr: &Expression<CborValue>) -> Result<CborValue>
async fn execute(&self, expr: &Expression<CborValue>) -> Result<CborValue>
A bare template is its own text. A lone {} around one value — a
deferred read such as column_table_values_expr — evaluates to that
value. Anything else has no REST meaning and is null.
fn defer(&self, expr: Expression<CborValue>) -> DeferredFn<CborValue>
Source§fn associate<R>(
&self,
expr: Expression<T>,
) -> AssociatedExpression<'_, Self, T, R>where
Self: Sized,
fn associate<R>(
&self,
expr: Expression<T>,
) -> AssociatedExpression<'_, Self, T, R>where
Self: Sized,
Source§impl TableSource for RestApi
impl TableSource for RestApi
Source§fn eq_condition(field: &str, value: &str) -> Result<Self::Condition>
fn eq_condition(field: &str, value: &str) -> Result<Self::Condition>
Build a stringy field == value eq-condition. Stringy callers
(the model-driven CLI) only have text on hand; values arrive as
String and become CBOR text scalars here. The peeling code
in condition_to_query_param renders all scalar variants the
same way so the URL still reads correctly.
Source§fn eq_value_condition(
&self,
field: &str,
value: Self::Value,
) -> Result<Self::Condition>
fn eq_value_condition( &self, field: &str, value: Self::Value, ) -> Result<Self::Condition>
Typed-value sibling of eq_condition. Used by Reference::resolve_from_row
to push a row-derived join value onto a child table without a
string round-trip.
Source§fn in_values_condition(
&self,
field: &str,
values: Vec<Self::Value>,
) -> Result<Self::Condition>
fn in_values_condition( &self, field: &str, values: Vec<Self::Value>, ) -> Result<Self::Condition>
A REST endpoint takes one value per filter param, so a single value
becomes the same field = value as eq_value_condition. Any other
list is refused: an IN the URL can’t carry would be dropped from the
request and widen the set.
Build a child condition for with_many / with_one traversal.
REST APIs can’t run subqueries, so this resolves on two paths:
- Sync peek — if the parent already carries an eq-condition
on
source_column, we re-key its value ontotarget_fieldand we’re done. Covers the commonwith_manycase wheresource_columnis the parent’s id field (narrowed viaid=Nor[N]). - Deferred read — otherwise (the
with_onecase, wheresource_columnis a foreign-key field that lives in the parent’s record, not its conditions), we wrap the resolution in aDeferredFnthat fetches the parent at request time and pulls the field out of the row.fetch_recordsresolves deferreds before peeling conditions into query params.
Source§fn column_table_values_expr<'a, E, Type: ColumnType>(
&'a self,
table: &Table<Self, E>,
column: &Self::Column<Type>,
) -> AssociatedExpression<'a, Self, Self::Value, Vec<Type>>
fn column_table_values_expr<'a, E, Type: ColumnType>( &'a self, table: &Table<Self, E>, column: &Self::Column<Type>, ) -> AssociatedExpression<'a, Self, Self::Value, Vec<Type>>
A REST API runs no subqueries, so the column’s values are read by
listing the table when the expression is resolved and taking
column from each row (rows without it are skipped). Resolves to a
CBOR array.
type Column<Type> = Column<Type> where Type: ColumnType
type AnyType = Value
type Value = Value
type Id = String
Source§type Condition = Expression<<RestApi as TableSource>::Value>
type Condition = Expression<<RestApi as TableSource>::Value>
Table. SQL/SurrealDB backends use
Expression<Self::Value>; document-oriented backends like MongoDB
can use a native filter type (e.g. bson::Document).Source§type Source = String
type Source = String
String;
SQL/SurrealDB backends use SelectSource<Self::Select> so a table can
be sourced from an arbitrary sub-SELECT. See crate::source.Source§fn describe_condition(&self, condition: &Self::Condition) -> String
fn describe_condition(&self, condition: &Self::Condition) -> String
condition as text for people, e.g. client_id = 7: what a log entry
records for a bulk delete. Not for parsing; use
Self::condition_column / Self::condition_equality in code.
A part resolved only at query time renders as a placeholder.Source§fn condition_column(&self, condition: &Self::Condition) -> Option<String>
fn condition_column(&self, condition: &Self::Condition) -> Option<String>
condition narrows to values, for the shapes this backend
can read (col = v, col IN (…), comparisons, LIKE), with a value
— not a column or an arbitrary expression — on the right. None when
it can’t tell — a raw expression, a combination, a negation (!=,
NOT IN, NOT LIKE), col = other_col — so a check that requires a
condition on some column fails safe.Source§fn create_column<Type: ColumnType>(&self, name: &str) -> Self::Column<Type>
fn create_column<Type: ColumnType>(&self, name: &str) -> Self::Column<Type>
Source§fn to_any_column<Type: ColumnType>(
&self,
column: Self::Column<Type>,
) -> Self::Column<Self::AnyType>
fn to_any_column<Type: ColumnType>( &self, column: Self::Column<Type>, ) -> Self::Column<Self::AnyType>
Source§fn convert_any_column<Type: ColumnType>(
&self,
any_column: Self::Column<Self::AnyType>,
) -> Option<Self::Column<Type>>
fn convert_any_column<Type: ColumnType>( &self, any_column: Self::Column<Self::AnyType>, ) -> Option<Self::Column<Type>>
Source§fn expr(
&self,
template: impl Into<String>,
parameters: Vec<ExpressiveEnum<Self::Value>>,
) -> Expression<Self::Value>
fn expr( &self, template: impl Into<String>, parameters: Vec<ExpressiveEnum<Self::Value>>, ) -> Expression<Self::Value>
Source§fn search_table_condition<E>(
&self,
_table: &Table<Self, E>,
search_value: &str,
) -> Expression<Self::Value>
fn search_table_condition<E>( &self, _table: &Table<Self, E>, search_value: &str, ) -> Expression<Self::Value>
search_value across the columns
of Table::search_columns: those flagged Searchable, or every
column when none is. A backend may leave out columns it can’t filter
on (dotted paths, imported columns). This is a server-side
capability — it pushes the match down to the backend’s query engine. Read moreSource§fn list_table_values<'life0, 'life1, 'async_trait, E>(
&'life0 self,
table: &'life1 Table<Self, E>,
) -> Pin<Box<dyn Future<Output = Result<IndexMap<Self::Id, Record<Self::Value>>>> + Send + 'async_trait>>
fn list_table_values<'life0, 'life1, 'async_trait, E>( &'life0 self, table: &'life1 Table<Self, E>, ) -> Pin<Box<dyn Future<Output = Result<IndexMap<Self::Id, Record<Self::Value>>>> + Send + 'async_trait>>
Source§fn get_table_value<'life0, 'life1, 'life2, 'async_trait, E>(
&'life0 self,
table: &'life1 Table<Self, E>,
id: &'life2 Self::Id,
) -> Pin<Box<dyn Future<Output = Result<Option<Record<Self::Value>>>> + Send + 'async_trait>>
fn get_table_value<'life0, 'life1, 'life2, 'async_trait, E>( &'life0 self, table: &'life1 Table<Self, E>, id: &'life2 Self::Id, ) -> Pin<Box<dyn Future<Output = Result<Option<Record<Self::Value>>>> + Send + 'async_trait>>
Source§fn get_table_some_value<'life0, 'life1, 'async_trait, E>(
&'life0 self,
table: &'life1 Table<Self, E>,
) -> Pin<Box<dyn Future<Output = Result<Option<(Self::Id, Record<Self::Value>)>>> + Send + 'async_trait>>
fn get_table_some_value<'life0, 'life1, 'async_trait, E>( &'life0 self, table: &'life1 Table<Self, E>, ) -> Pin<Box<dyn Future<Output = Result<Option<(Self::Id, Record<Self::Value>)>>> + Send + 'async_trait>>
Source§fn get_table_count<'life0, 'life1, 'async_trait, E>(
&'life0 self,
table: &'life1 Table<Self, E>,
) -> Pin<Box<dyn Future<Output = Result<i64>> + Send + 'async_trait>>
fn get_table_count<'life0, 'life1, 'async_trait, E>( &'life0 self, table: &'life1 Table<Self, E>, ) -> Pin<Box<dyn Future<Output = Result<i64>> + Send + 'async_trait>>
Source§fn get_table_sum<'life0, 'life1, 'life2, 'async_trait, E>(
&'life0 self,
_table: &'life1 Table<Self, E>,
_column: &'life2 Self::Column<Self::AnyType>,
) -> Pin<Box<dyn Future<Output = Result<Self::Value>> + Send + 'async_trait>>
fn get_table_sum<'life0, 'life1, 'life2, 'async_trait, E>( &'life0 self, _table: &'life1 Table<Self, E>, _column: &'life2 Self::Column<Self::AnyType>, ) -> Pin<Box<dyn Future<Output = Result<Self::Value>> + Send + 'async_trait>>
Source§fn get_table_max<'life0, 'life1, 'life2, 'async_trait, E>(
&'life0 self,
_table: &'life1 Table<Self, E>,
_column: &'life2 Self::Column<Self::AnyType>,
) -> Pin<Box<dyn Future<Output = Result<Self::Value>> + Send + 'async_trait>>
fn get_table_max<'life0, 'life1, 'life2, 'async_trait, E>( &'life0 self, _table: &'life1 Table<Self, E>, _column: &'life2 Self::Column<Self::AnyType>, ) -> Pin<Box<dyn Future<Output = Result<Self::Value>> + Send + 'async_trait>>
Source§fn get_table_min<'life0, 'life1, 'life2, 'async_trait, E>(
&'life0 self,
_table: &'life1 Table<Self, E>,
_column: &'life2 Self::Column<Self::AnyType>,
) -> Pin<Box<dyn Future<Output = Result<Self::Value>> + Send + 'async_trait>>
fn get_table_min<'life0, 'life1, 'life2, 'async_trait, E>( &'life0 self, _table: &'life1 Table<Self, E>, _column: &'life2 Self::Column<Self::AnyType>, ) -> Pin<Box<dyn Future<Output = Result<Self::Value>> + Send + 'async_trait>>
Source§fn insert_table_value<'life0, 'life1, 'life2, 'life3, 'async_trait, E>(
&'life0 self,
_table: &'life1 Table<Self, E>,
_id: &'life2 Self::Id,
_record: &'life3 Record<Self::Value>,
) -> Pin<Box<dyn Future<Output = Result<Record<Self::Value>>> + Send + 'async_trait>>
fn insert_table_value<'life0, 'life1, 'life2, 'life3, 'async_trait, E>( &'life0 self, _table: &'life1 Table<Self, E>, _id: &'life2 Self::Id, _record: &'life3 Record<Self::Value>, ) -> Pin<Box<dyn Future<Output = Result<Record<Self::Value>>> + Send + 'async_trait>>
table.conditions(), return the stored row unchanged;
when it is held by a row outside the set, fail with Conflict; a new
row must fit the conditions, else Conflict and nothing is stored.
Refuse with Unsupported when a condition can be neither applied nor
evaluated. See WritableValueSet for the table.Source§fn replace_table_value<'life0, 'life1, 'life2, 'life3, 'async_trait, E>(
&'life0 self,
_table: &'life1 Table<Self, E>,
_id: &'life2 Self::Id,
_record: &'life3 Record<Self::Value>,
) -> Pin<Box<dyn Future<Output = Result<Record<Self::Value>>> + Send + 'async_trait>>
fn replace_table_value<'life0, 'life1, 'life2, 'life3, 'async_trait, E>( &'life0 self, _table: &'life1 Table<Self, E>, _id: &'life2 Self::Id, _record: &'life3 Record<Self::Value>, ) -> Pin<Box<dyn Future<Output = Result<Record<Self::Value>>> + Send + 'async_trait>>
table.conditions() fails
with Conflict; the written row must fit the conditions, else
Conflict and nothing changes. Refuse with Unsupported when a
condition can be neither applied nor evaluated. See WritableValueSet
for the table.Source§fn patch_table_value<'life0, 'life1, 'life2, 'life3, 'async_trait, E>(
&'life0 self,
_table: &'life1 Table<Self, E>,
_id: &'life2 Self::Id,
_partial: &'life3 Record<Self::Value>,
) -> Pin<Box<dyn Future<Output = Result<Record<Self::Value>>> + Send + 'async_trait>>
fn patch_table_value<'life0, 'life1, 'life2, 'life3, 'async_trait, E>( &'life0 self, _table: &'life1 Table<Self, E>, _id: &'life2 Self::Id, _partial: &'life3 Record<Self::Value>, ) -> Pin<Box<dyn Future<Output = Result<Record<Self::Value>>> + Send + 'async_trait>>
partial into the row with this ID. Confined: a missing row
or one outside table.conditions() is NotFound (marked); the merged
row must still fit the conditions, else Conflict and nothing changes.
Refuse with Unsupported when a condition can be neither applied nor
evaluated. See WritableValueSet for the table.Source§fn delete_table_value<'life0, 'life1, 'life2, 'async_trait, E>(
&'life0 self,
_table: &'life1 Table<Self, E>,
_id: &'life2 Self::Id,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
fn delete_table_value<'life0, 'life1, 'life2, 'async_trait, E>( &'life0 self, _table: &'life1 Table<Self, E>, _id: &'life2 Self::Id, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
table.conditions(); a missing row or a row outside the set
is Ok(()) (no lookup is needed — SQL: DELETE … WHERE id = ? AND <conditions>). Refuse with Unsupported when a condition can be
neither applied nor evaluated. See WritableValueSet for the table.Source§fn delete_table_all_values<'life0, 'life1, 'async_trait, E>(
&'life0 self,
_table: &'life1 Table<Self, E>,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
fn delete_table_all_values<'life0, 'life1, 'async_trait, E>( &'life0 self, _table: &'life1 Table<Self, E>, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
Source§fn insert_table_return_id_value<'life0, 'life1, 'life2, 'async_trait, E>(
&'life0 self,
_table: &'life1 Table<Self, E>,
_record: &'life2 Record<Self::Value>,
) -> Pin<Box<dyn Future<Output = Result<Self::Id>> + Send + 'async_trait>>
fn insert_table_return_id_value<'life0, 'life1, 'life2, 'async_trait, E>( &'life0 self, _table: &'life1 Table<Self, E>, _record: &'life2 Record<Self::Value>, ) -> Pin<Box<dyn Future<Output = Result<Self::Id>> + Send + 'async_trait>>
table.conditions(), else Conflict
and nothing is stored; a retry after a lost reply stores a second row.
Refuse with Unsupported when a condition can be neither applied nor
evaluated.Source§fn condition_equality(
&self,
condition: &Self::Condition,
) -> Option<(String, Self::Value)>
fn condition_equality( &self, condition: &Self::Condition, ) -> Option<(String, Self::Value)>
Source§fn can_confine_writes(&self) -> bool
fn can_confine_writes(&self) -> bool
insert_table_value, replace_table_value,
patch_table_value, delete_table_value, insert_table_return_id_value)
honours the write contract over table.conditions(): it only touches
rows in the set, and only leaves rows that still belong to it. A source
that returns false is refused any by-id write through a conditioned
table: Table refuses it with Unsupported before reaching the source.
Default false.Source§fn coerce_reference_value(&self, value: Self::Value) -> Self::Value
fn coerce_reference_value(&self, value: Self::Value) -> Self::Value
Source§fn stream_table_values<'a, E>(
&'a self,
table: &Table<Self, E>,
) -> Pin<Box<dyn Stream<Item = Result<(Self::Id, Record<Self::Value>), VantageError>> + Send + 'a>>
fn stream_table_values<'a, E>( &'a self, table: &Table<Self, E>, ) -> Pin<Box<dyn Stream<Item = Result<(Self::Id, Record<Self::Value>), VantageError>> + Send + 'a>>
target_table.target_field = source_table.source_column. Read moreSource§fn supports_traversal(&self) -> bool
fn supports_traversal(&self) -> bool
"country.name") into its own query — a nested correlated subquery for
SQL, a native idiom path for SurrealDB, $lookup stages for MongoDB.
Backends that can build none of these (e.g. CSV, REST) leave the
default false, and
Table::with_active_columns
rejects dotted names against them at build time rather than at fetch time.Source§fn traversal_path_expr(
&self,
hops: &[&str],
column: &str,
) -> Option<Expression<Self::Value>>
fn traversal_path_expr( &self, hops: &[&str], column: &str, ) -> Option<Expression<Self::Value>>
Auto Trait Implementations§
impl !RefUnwindSafe for RestApi
impl !UnwindSafe for RestApi
impl Freeze for RestApi
impl Send for RestApi
impl Sync for RestApi
impl Unpin for RestApi
impl UnsafeUnpin for RestApi
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> ColumnType for T
Source§impl<T> ExpressionLike for T
impl<T> ExpressionLike for T
Source§fn clone_box(&self) -> Box<dyn ExpressionLike>
fn clone_box(&self) -> Box<dyn ExpressionLike>
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<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