pub enum UserProfile {
PowerUser,
Gamer,
Streamer,
RemoteWorker,
Casual,
}Expand description
Pre-defined user profiles.
§Example
use netspeed_cli::profiles::UserProfile;
// Parse from a string name
assert_eq!(UserProfile::from_name("gamer"), Some(UserProfile::Gamer));
assert_eq!(UserProfile::from_name("streamer"), Some(UserProfile::Streamer));
assert_eq!(UserProfile::from_name("invalid"), None);
// Round-trip: name() → from_name()
assert_eq!(UserProfile::from_name(UserProfile::RemoteWorker.name()), Some(UserProfile::RemoteWorker));
// Default is PowerUser
assert_eq!(UserProfile::default(), UserProfile::PowerUser);Variants§
PowerUser
Tech-savvy users who want all metrics and detailed analysis.
Gamer
Online gamers focused on latency, jitter, and bufferbloat.
Streamer
Content consumers (Netflix, YouTube, etc.) focused on download speed.
RemoteWorker
Work-from-home professionals focused on upload and stability.
Casual
Basic users who want a simple pass/fail assessment.
Implementations§
Source§impl UserProfile
impl UserProfile
Sourcepub const TYPE_NAME: &'static str = "profile"
pub const TYPE_NAME: &'static str = "profile"
Type identifier for error messages (DIP: shared validation pattern).
Sourcepub const VALID_NAMES: &'static [&'static str]
pub const VALID_NAMES: &'static [&'static str]
List of valid profile names for error messages.
Sourcepub fn from_name(name: &str) -> Option<Self>
pub fn from_name(name: &str) -> Option<Self>
Get profile from string name (case-insensitive).
Returns Some(UserProfile) for valid names (including aliases like
"poweruser" and "remote"), or None for unrecognized names.
§Example
use netspeed_cli::profiles::UserProfile;
// Canonical names
assert_eq!(UserProfile::from_name("power-user"), Some(UserProfile::PowerUser));
assert_eq!(UserProfile::from_name("gamer"), Some(UserProfile::Gamer));
assert_eq!(UserProfile::from_name("streamer"), Some(UserProfile::Streamer));
assert_eq!(UserProfile::from_name("remote-worker"), Some(UserProfile::RemoteWorker));
assert_eq!(UserProfile::from_name("casual"), Some(UserProfile::Casual));
// Aliases
assert_eq!(UserProfile::from_name("poweruser"), Some(UserProfile::PowerUser));
assert_eq!(UserProfile::from_name("remote"), Some(UserProfile::RemoteWorker));
// Case-insensitive
assert_eq!(UserProfile::from_name("GAMER"), Some(UserProfile::Gamer));
assert_eq!(UserProfile::from_name("Casual"), Some(UserProfile::Casual));
// Invalid names return None
assert_eq!(UserProfile::from_name("admin"), None);Sourcepub fn is_valid_name(name: &str) -> bool
pub fn is_valid_name(name: &str) -> bool
Check if a profile name is valid without returning the profile.
§Example
use netspeed_cli::profiles::UserProfile;
// Canonical names are valid
assert!(UserProfile::is_valid_name("power-user"));
assert!(UserProfile::is_valid_name("gamer"));
// Aliases are also valid
assert!(UserProfile::is_valid_name("poweruser"));
assert!(UserProfile::is_valid_name("remote"));
// Case-insensitive
assert!(UserProfile::is_valid_name("GAMER"));
// Invalid names
assert!(!UserProfile::is_valid_name("admin"));
assert!(!UserProfile::is_valid_name(""));Sourcepub fn validate(name: &str) -> Result<(), String>
pub fn validate(name: &str) -> Result<(), String>
Validate this profile name and return error message if invalid.
Returns Ok(()) if valid, Err(msg) with the list of valid options if invalid.
Use this for config-file validation where you need an error message;
use from_name() if you just need the UserProfile value.
§Example
use netspeed_cli::profiles::UserProfile;
// Valid names pass validation
assert!(UserProfile::validate("power-user").is_ok());
assert!(UserProfile::validate("gamer").is_ok());
assert!(UserProfile::validate("streamer").is_ok());
assert!(UserProfile::validate("remote-worker").is_ok());
assert!(UserProfile::validate("casual").is_ok());
// Invalid names produce a descriptive error
let err = UserProfile::validate("admin").unwrap_err();
assert!(err.contains("Invalid profile"));
assert!(err.contains("admin"));
assert!(err.contains("gamer")); // lists valid optionsSourcepub fn name(&self) -> &'static str
pub fn name(&self) -> &'static str
CLI-friendly name for the profile.
§Example
use netspeed_cli::profiles::UserProfile;
assert_eq!(UserProfile::PowerUser.name(), "power-user");
assert_eq!(UserProfile::Gamer.name(), "gamer");
assert_eq!(UserProfile::Streamer.name(), "streamer");
assert_eq!(UserProfile::RemoteWorker.name(), "remote-worker");
assert_eq!(UserProfile::Casual.name(), "casual");Sourcepub fn display_name(&self) -> &'static str
pub fn display_name(&self) -> &'static str
Display name with emoji for headers.
§Example
use netspeed_cli::profiles::UserProfile;
assert_eq!(UserProfile::PowerUser.display_name(), "⚙️ Power User");
assert_eq!(UserProfile::Gamer.display_name(), "🎮 Gamer");
assert_eq!(UserProfile::Streamer.display_name(), "📺 Streamer");
assert_eq!(UserProfile::RemoteWorker.display_name(), "💼 Remote Worker");
assert_eq!(UserProfile::Casual.display_name(), "👤 Casual");Sourcepub fn description(&self) -> &'static str
pub fn description(&self) -> &'static str
Description for help text.
§Example
use netspeed_cli::profiles::UserProfile;
// Each description highlights the profile's focus
assert!(UserProfile::Gamer.description().contains("Latency"));
assert!(UserProfile::Gamer.description().contains("jitter"));
assert!(UserProfile::Streamer.description().contains("Download"));
assert!(UserProfile::Streamer.description().contains("streaming"));
assert!(UserProfile::RemoteWorker.description().contains("Upload"));
assert!(UserProfile::RemoteWorker.description().contains("video calls"));
assert!(UserProfile::Casual.description().contains("pass/fail"));
assert!(UserProfile::PowerUser.description().contains("All metrics"));Sourcepub fn scoring_weights(&self) -> (f64, f64, f64, f64)
pub fn scoring_weights(&self) -> (f64, f64, f64, f64)
Scoring weights for overall connection rating (ping, jitter, download, upload).
Returns (ping_weight, jitter_weight, download_weight, upload_weight).
Weights always sum to ~1.0, but the distribution reflects each profile’s
priorities.
§Example
use netspeed_cli::profiles::UserProfile;
// Gamer prioritizes latency and jitter
let (ping, jitter, dl, ul) = UserProfile::Gamer.scoring_weights();
assert!(ping > dl, "gamer weights ping over download");
assert!(jitter > ul, "gamer weights jitter over upload");
// Streamer prioritizes download speed
let (_, _, dl, _) = UserProfile::Streamer.scoring_weights();
assert!(dl >= 0.5, "streamer weights download highest");
// RemoteWorker prioritizes upload speed
let (_, _, _, ul) = UserProfile::RemoteWorker.scoring_weights();
assert!(ul >= 0.35, "remote-worker weights upload highest");
// All profiles' weights sum to ~1.0
for profile in [UserProfile::PowerUser, UserProfile::Gamer,
UserProfile::Streamer, UserProfile::RemoteWorker,
UserProfile::Casual] {
let (p, j, d, u) = profile.scoring_weights();
assert!((p + j + d + u - 1.0).abs() < 0.01,
"weights must sum to ~1.0 for {profile:?}");
}Sourcepub fn excellent_speed_threshold(&self) -> f64
pub fn excellent_speed_threshold(&self) -> f64
Speed rating thresholds for “Excellent” (in Mbps).
Lower values = easier to achieve. PowerUser demands the highest bandwidth; Casual is satisfied with the least.
§Example
use netspeed_cli::profiles::UserProfile;
// PowerUser requires 500 Mbps for "Excellent"
assert_eq!(UserProfile::PowerUser.excellent_speed_threshold(), 500.0);
// Gamer and RemoteWorker need only 100 Mbps (latency matters more)
assert_eq!(UserProfile::Gamer.excellent_speed_threshold(), 100.0);
assert_eq!(UserProfile::RemoteWorker.excellent_speed_threshold(), 100.0);
// Streamer needs 200 Mbps (4K streaming headroom)
assert_eq!(UserProfile::Streamer.excellent_speed_threshold(), 200.0);
// Casual is happy with 50 Mbps
assert_eq!(UserProfile::Casual.excellent_speed_threshold(), 50.0);Sourcepub fn excellent_ping_threshold(&self) -> f64
pub fn excellent_ping_threshold(&self) -> f64
Ping rating thresholds for “Excellent” (in ms).
Lower values = harder to achieve. Gamer demands ultra-low latency; Casual/Streamer tolerate higher ping.
§Example
use netspeed_cli::profiles::UserProfile;
// Gamer needs ≤5 ms for "Excellent" ping
assert_eq!(UserProfile::Gamer.excellent_ping_threshold(), 5.0);
// PowerUser needs ≤10 ms
assert_eq!(UserProfile::PowerUser.excellent_ping_threshold(), 10.0);
// RemoteWorker tolerates ≤20 ms
assert_eq!(UserProfile::RemoteWorker.excellent_ping_threshold(), 20.0);
// Streamer and Casual are fine with ≤30 ms
assert_eq!(UserProfile::Streamer.excellent_ping_threshold(), 30.0);
assert_eq!(UserProfile::Casual.excellent_ping_threshold(), 30.0);Sourcepub fn excellent_jitter_threshold(&self) -> f64
pub fn excellent_jitter_threshold(&self) -> f64
Jitter rating thresholds for “Excellent” (in ms).
Lower values = harder to achieve. Gamer needs the most consistent latency; Casual/Streamer tolerate more variation.
§Example
use netspeed_cli::profiles::UserProfile;
// Gamer needs ≤1 ms jitter for "Excellent"
assert_eq!(UserProfile::Gamer.excellent_jitter_threshold(), 1.0);
// PowerUser needs ≤2 ms
assert_eq!(UserProfile::PowerUser.excellent_jitter_threshold(), 2.0);
// RemoteWorker tolerates ≤3 ms
assert_eq!(UserProfile::RemoteWorker.excellent_jitter_threshold(), 3.0);
// Streamer and Casual are fine with ≤5 ms
assert_eq!(UserProfile::Streamer.excellent_jitter_threshold(), 5.0);
assert_eq!(UserProfile::Casual.excellent_jitter_threshold(), 5.0);Sourcepub fn show_latency_details(&self) -> bool
pub fn show_latency_details(&self) -> bool
Whether to show detailed latency section.
All profiles except Casual show latency details.
§Example
use netspeed_cli::profiles::UserProfile;
assert!(UserProfile::PowerUser.show_latency_details());
assert!(UserProfile::Gamer.show_latency_details());
assert!(!UserProfile::Casual.show_latency_details()); // minimal outputSourcepub fn show_bufferbloat(&self) -> bool
pub fn show_bufferbloat(&self) -> bool
Whether to show bufferbloat grade.
Only PowerUser and Gamer
care about bufferbloat.
§Example
use netspeed_cli::profiles::UserProfile;
assert!(UserProfile::PowerUser.show_bufferbloat());
assert!(UserProfile::Gamer.show_bufferbloat());
assert!(!UserProfile::Streamer.show_bufferbloat());
assert!(!UserProfile::Casual.show_bufferbloat());Sourcepub fn show_stability(&self) -> bool
pub fn show_stability(&self) -> bool
Whether to show stability analysis (CV%).
PowerUser and RemoteWorker
need consistent connections for their use cases.
§Example
use netspeed_cli::profiles::UserProfile;
assert!(UserProfile::PowerUser.show_stability());
assert!(UserProfile::RemoteWorker.show_stability());
assert!(!UserProfile::Gamer.show_stability());
assert!(!UserProfile::Casual.show_stability());Sourcepub fn show_percentiles(&self) -> bool
pub fn show_percentiles(&self) -> bool
Sourcepub fn show_usage_check(&self) -> bool
pub fn show_usage_check(&self) -> bool
Whether to show usage check targets.
All profiles except Casual show usage checks.
§Example
use netspeed_cli::profiles::UserProfile;
assert!(UserProfile::PowerUser.show_usage_check());
assert!(UserProfile::Gamer.show_usage_check());
assert!(!UserProfile::Casual.show_usage_check()); // minimal outputSourcepub fn show_estimates(&self) -> bool
pub fn show_estimates(&self) -> bool
Whether to show download time estimates.
PowerUser wants all metrics;
Casual benefits from practical time estimates.
§Example
use netspeed_cli::profiles::UserProfile;
assert!(UserProfile::PowerUser.show_estimates());
assert!(UserProfile::Casual.show_estimates());
assert!(!UserProfile::Gamer.show_estimates());
assert!(!UserProfile::Streamer.show_estimates());Sourcepub fn show_history(&self) -> bool
pub fn show_history(&self) -> bool
Whether to show historical comparison.
PowerUser tracks trends;
RemoteWorker monitors connection reliability over time.
§Example
use netspeed_cli::profiles::UserProfile;
assert!(UserProfile::PowerUser.show_history());
assert!(UserProfile::RemoteWorker.show_history());
assert!(!UserProfile::Gamer.show_history());
assert!(!UserProfile::Casual.show_history());Sourcepub fn show_ul_dl_ratio(&self) -> bool
pub fn show_ul_dl_ratio(&self) -> bool
Whether to show UL/DL ratio.
PowerUser wants all metrics;
RemoteWorker cares about upload relative to download.
§Example
use netspeed_cli::profiles::UserProfile;
assert!(UserProfile::PowerUser.show_ul_dl_ratio());
assert!(UserProfile::RemoteWorker.show_ul_dl_ratio());
assert!(!UserProfile::Streamer.show_ul_dl_ratio());
assert!(!UserProfile::Casual.show_ul_dl_ratio());Sourcepub fn show_peaks(&self) -> bool
pub fn show_peaks(&self) -> bool
Sourcepub fn show_latency_under_load(&self) -> bool
pub fn show_latency_under_load(&self) -> bool
Whether to show latency under load.
PowerUser wants all metrics;
Gamer needs to know if loaded latency spikes.
§Example
use netspeed_cli::profiles::UserProfile;
assert!(UserProfile::PowerUser.show_latency_under_load());
assert!(UserProfile::Gamer.show_latency_under_load());
assert!(!UserProfile::Streamer.show_latency_under_load());
assert!(!UserProfile::Casual.show_latency_under_load());Trait Implementations§
Source§impl Clone for UserProfile
impl Clone for UserProfile
Source§fn clone(&self) -> UserProfile
fn clone(&self) -> UserProfile
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for UserProfile
impl Debug for UserProfile
Source§impl Default for UserProfile
impl Default for UserProfile
Source§fn default() -> UserProfile
fn default() -> UserProfile
Source§impl<'de> Deserialize<'de> for UserProfile
impl<'de> Deserialize<'de> for UserProfile
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl PartialEq for UserProfile
impl PartialEq for UserProfile
Source§impl Serialize for UserProfile
impl Serialize for UserProfile
impl Copy for UserProfile
impl Eq for UserProfile
impl StructuralPartialEq for UserProfile
Auto Trait Implementations§
impl Freeze for UserProfile
impl RefUnwindSafe for UserProfile
impl Send for UserProfile
impl Sync for UserProfile
impl Unpin for UserProfile
impl UnsafeUnpin for UserProfile
impl UnwindSafe for UserProfile
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,
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