pub struct TraitDispatch { /* private fields */ }Expand description
Maps language features (operators, for..in, string interpolation) to
trait method names, checking whether a given type has the required trait
implementation registered.
Built-in types are pre-populated. User-defined types can be registered
at runtime via TraitDispatch::register_trait.
Implementations§
Source§impl TraitDispatch
impl TraitDispatch
Sourcepub fn new() -> Self
pub fn new() -> Self
Create a new TraitDispatch with the default operator-to-method mappings
and built-in type registrations.
Sourcepub fn register_trait(&mut self, type_tag: TypeTag, method: MethodName)
pub fn register_trait(&mut self, type_tag: TypeTag, method: MethodName)
Register a trait implementation for a user-defined or custom type.
This allows extending the trait dispatch at runtime when user types
implement core traits (via @derive or explicit impl blocks).
Sourcepub fn is_known_trait(&self, name: &str) -> bool
pub fn is_known_trait(&self, name: &str) -> bool
Check whether name is a recognised prelude trait.
Sourcepub fn trait_method_names(&self, trait_name: &str) -> &[MethodName] ⓘ
pub fn trait_method_names(&self, trait_name: &str) -> &[MethodName] ⓘ
Return the method names associated with a known trait.
Returns an empty slice for stub traits that have no methods yet.
Sourcepub fn known_trait_names(&self) -> Vec<&'static str>
pub fn known_trait_names(&self) -> Vec<&'static str>
Return all known prelude trait names.
Sourcepub fn resolve_binop(&self, op: BinOp, lhs_type: TypeTag) -> Option<MethodName>
pub fn resolve_binop(&self, op: BinOp, lhs_type: TypeTag) -> Option<MethodName>
Resolve a binary operator to the trait method name to call, if the given type implements the required trait.
Returns the method name (e.g., "compare", "equals", "add") or
None if the type doesn’t implement the trait for that operator.
Sourcepub fn resolve_for_in(&self, collection_type: TypeTag) -> Option<MethodName>
pub fn resolve_for_in(&self, collection_type: TypeTag) -> Option<MethodName>
Resolve the for..in feature — returns "iter" if the type is Iterable.
Sourcepub fn resolve_display(&self, type_tag: TypeTag) -> Option<MethodName>
pub fn resolve_display(&self, type_tag: TypeTag) -> Option<MethodName>
Resolve string interpolation ${} — returns "display" if the type
is Displayable.
Sourcepub fn resolve_conversion(
&self,
type_tag: TypeTag,
direction: ConversionDirection,
) -> Option<MethodName>
pub fn resolve_conversion( &self, type_tag: TypeTag, direction: ConversionDirection, ) -> Option<MethodName>
Resolve From/Into conversion — returns the method name if the type implements the conversion trait.
Sourcepub fn has_trait(&self, type_tag: TypeTag, method: &str) -> bool
pub fn has_trait(&self, type_tag: TypeTag, method: &str) -> bool
Check whether a type has a specific trait method registered.
Sourcepub fn types_implementing(&self, method: &str) -> Vec<TypeTag>
pub fn types_implementing(&self, method: &str) -> Vec<TypeTag>
List all types that implement a given trait method.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for TraitDispatch
impl RefUnwindSafe for TraitDispatch
impl Send for TraitDispatch
impl Sync for TraitDispatch
impl Unpin for TraitDispatch
impl UnsafeUnpin for TraitDispatch
impl UnwindSafe for TraitDispatch
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> 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);