pub struct Env {
pub profile: Profile,
/* private fields */
}
env
only.Expand description
A Provider
that sources its values from environment variables.
All key-lookups and comparisons are case insensitive, facilitated by the
UncasedStr
and Uncased
types. By default, environment variable names
are lowercased before being emitted as key paths in the provided data, but
this default can be changed with Env::lowercase()
. Environment variable
values can contain structured data, parsed as a Value
, with syntax
resembling TOML:
Bool
:true
,false
(e.g,APP_VAR=true
)Num::F64
: any float containing.
: (e.g,APP_VAR=1.2
,APP_VAR=-0.002
)Num::USize
: any unsigned integer (e.g,APP_VAR=10
)Num::Isize
: any negative integer (e.g,APP_VAR=-10
)Array
: delimited by[]
(e.g,APP_VAR=[true, 1.0, -1]
)Dict
: in the form{key=value}
(e.g,APP_VAR={key="value",num=10}
)String
: delimited by"
(e.g,APP_VAR=\"hi\"
)String
: anything else (e.g,APP_VAR=hi
,APP_VAR=[hi
)
Additionally, keys and strings delimited with "
can contain the following
escaped characters:
\b - backspace (U+0008)
\t - tab (U+0009)
\n - linefeed (U+000A)
\f - form feed (U+000C)
\r - carriage return (U+000D)
\" - quote (U+0022)
\\ - backslash (U+005C)
\uXXXX - unicode (U+XXXX)
\UXXXXXXXX - unicode (U+XXXXXXXX)
For example:
APP_VAR=\"hello\\nthere\" => (what in Rust is) "hello\nthere"
APP_VAR=\"hi\\u1234there\" => (what in Rust is) "hi\u{1234}there"
APP_VAR=\"abc\\td\\n\" => (what in Rust is) "abc\td\n"
APP_VAR={\"key\\nkey\"=123}`)
APP_VAR={\"key.key\"=123}`)
Undelimited strings, or strings with invalid escape sequences, are interpreted exactly as written without any escaping.
§Key Paths (nesting)
Because environment variables names are emitted as key paths in the
provided data, a nested dictionary is created for every component of the
name delimited by .
, each a parent of the next, with the leaf mapping to
environment variable Value
. For example, the environment variable
a.b.c=3
creates the mapping a -> b -> c -> 3
in the emitted data.
Environment variable names cannot typically contain the .
character, but
another character can be used in its place by replacing that character in
the name with .
with Env::map()
. The Env::split()
method is a
convenience method that does exactly this.
§Provider Details
-
Profile
This provider does not set a profile.
-
Metadata
This provider is named
environment variable(s)
. It does not specify aSource
. Interpolation makes path parts uppercase and delimited with a.
. -
Data
The data emitted by this provider is single-level dictionary with the keys and values returned by
Env::iter()
, which reads from the currently set environment variables and is customizable via the various inherent methods. The dictionary is emitted to the profileprofile
, configurable viaEnv::profile()
.
Fields§
§profile: Profile
The profile config data will be emitted to. Defaults to
Profile::Default
.
Implementations§
Source§impl Env
impl Env
Sourcepub fn raw() -> Env
pub fn raw() -> Env
Constructs and Env
provider that does not filter or map any
environment variables.
use serde::Deserialize;
use figment::{Figment, Jail, providers::Env};
#[derive(Debug, PartialEq, Deserialize)]
struct Config {
numbers: Vec<usize>,
app_bar: String,
}
Jail::expect_with(|jail| {
jail.set_env("NUMBERS", "[1, 2, 3]");
jail.set_env("APP_BAR", "hi");
let config: Config = Figment::from(Env::raw()).extract()?;
assert_eq!(config, Config {
numbers: vec![1, 2, 3],
app_bar: "hi".into(),
});
Ok(())
});
Sourcepub fn prefixed(prefix: &str) -> Env
pub fn prefixed(prefix: &str) -> Env
Return an Env
provider that filters environment variables to those
with the prefix prefix
and maps to one without the prefix.
use serde::Deserialize;
use figment::{Figment, Jail, providers::Env};
#[derive(Debug, PartialEq, Deserialize)]
struct Config {
foo: usize,
bar: String,
}
Jail::expect_with(|jail| {
jail.set_env("APP_FOO", 100);
jail.set_env("APP_BAR", "hi");
let config: Config = Figment::from(Env::prefixed("APP_")).extract()?;
assert_eq!(config, Config { foo: 100, bar: "hi".into() });
Ok(())
});
Sourcepub fn filter<F>(self, filter: F) -> Env
pub fn filter<F>(self, filter: F) -> Env
Applys an additional filter to the keys of environment variables being considered.
use figment::{Jail, providers::Env};
Jail::expect_with(|jail| {
jail.set_env("FOO_FOO", 100);
jail.set_env("BAR_BAR", "hi");
jail.set_env("foobar", "hi");
// We'll be left with `FOO_FOO=100` and `foobar=hi`.
let env = Env::raw().filter(|k| k.starts_with("foo"));
assert_eq!(env.iter().count(), 2);
// Filters chain, like iterator adapters. `FOO_FOO=100` remains.
let env = env.filter(|k| k.as_str().contains('_'));
assert_eq!(env.iter().count(), 1);
Ok(())
});
Sourcepub fn map<F>(self, mapper: F) -> Env
pub fn map<F>(self, mapper: F) -> Env
Applys an additional mapping to the keys of environment variables being considered.
use figment::{Jail, providers::Env};
Jail::expect_with(|jail| {
jail.set_env("FOO_FOO", 100);
jail.set_env("BAR_FOO", "hi");
jail.set_env("foobar", "hi");
// This is like `prefixed("foo_")` without the filtering.
let env = Env::raw().map(|k| match k.starts_with("foo_") {
true => k["foo_".len()..].into(),
false => k.into()
});
// We now have `FOO=100`, `BAR_FOO=hi`, and `bar=hi`.
assert_eq!(env.clone().filter(|k| k == "foo").iter().count(), 1);
// Mappings chain, like iterator adapters.
let env = env.map(|k| match k.starts_with("bar_") {
true => k["bar_".len()..].into(),
false => k.into()
});
// We now have `FOO=100`, `FOO=hi`, and `bar=hi`.
assert_eq!(env.filter(|k| k == "foo").iter().count(), 2);
Ok(())
});
Sourcepub fn filter_map<F>(self, f: F) -> Env
pub fn filter_map<F>(self, f: F) -> Env
Simultanously filters and maps the keys of environment variables being considered.
The returned Env
only yields values for which f
returns Some
.
use std::collections::HashMap;
use figment::{Jail, providers::Env};
use uncased::AsUncased;
Jail::expect_with(|jail| {
jail.clear_env();
jail.set_env("FOO_FOO", 100);
jail.set_env("BAR_BAR", "hi");
jail.set_env("BAZ_BAZ", "200");
// We starts with all three variables in `Env::raw();
let env = Env::raw();
assert_eq!(env.iter().count(), 3);
// This is like `prefixed("foo_")` but with two prefixes.
let env = env.filter_map(|k| {
if k.starts_with("foo_") {
Some(k["foo_".len()..].into())
} else if k.starts_with("baz_") {
Some(k["baz_".len()..].into())
} else {
None
}
});
// Now we have `FOO=100`, `BAZ="200"`.
let values = env.iter().collect::<HashMap<_, _>>();
assert_eq!(values.len(), 2);
assert_eq!(values["foo".as_uncased()], "100");
assert_eq!(values["baz".as_uncased()], "200");
Ok(())
});
Sourcepub fn lowercase(self, lowercase: bool) -> Env
pub fn lowercase(self, lowercase: bool) -> Env
Whether to lowercase keys before emitting them. Defaults to true
.
§Example
use std::collections::HashMap;
use figment::{Jail, Profile, Provider};
use figment::providers::Env;
Jail::expect_with(|jail| {
jail.clear_env();
jail.set_env("FOO_BAR_BAZ", 1);
jail.set_env("FOO_barBaz", 2);
// The default is to lower-case variable name keys.
let env = Env::prefixed("FOO_");
let data = env.data().unwrap();
assert!(data[&Profile::Default].contains_key("bar_baz"));
assert!(data[&Profile::Default].contains_key("barbaz"));
// This can be changed with `lowercase(false)`. You'll need to
// arrange for deserialization to account for casing.
let env = Env::prefixed("FOO_").lowercase(false);
let data = env.data().unwrap();
assert!(data[&Profile::Default].contains_key("BAR_BAZ"));
assert!(data[&Profile::Default].contains_key("barBaz"));
Ok(())
});
Sourcepub fn split<P>(self, pattern: P) -> Env
pub fn split<P>(self, pattern: P) -> Env
Splits each environment variable key at pattern
, creating nested
dictionaries for each split. Specifically, nested dictionaries are
created for components delimited by pattern
in the environment
variable string (3 in A_B_C
if pattern
is _
), each dictionary
mapping to its parent.
This is equivalent to: self.map(|key| key.replace(pattern, "."))
.
§Example
use serde::Deserialize;
use figment::{Figment, Jail, util::map, value::Dict, providers::Env};
#[derive(Debug, PartialEq, Deserialize)]
struct Foo {
key: usize,
}
#[derive(Debug, PartialEq, Deserialize)]
struct Config {
foo: Foo,
map: Dict,
}
Jail::expect_with(|jail| {
// Without splitting: using structured data.
jail.set_env("APP_FOO", "{key=10}");
jail.set_env("APP_MAP", "{one=1,two=2.0}");
let config: Config = Figment::from(Env::prefixed("APP_")).extract()?;
assert_eq!(config, Config {
foo: Foo { key: 10 },
map: map!["one".into() => 1u8.into(), "two".into() => 2.0.into()],
});
// With splitting.
jail.set_env("APP_FOO_KEY", 20);
jail.set_env("APP_MAP_ONE", "1.0");
jail.set_env("APP_MAP_TWO", "dos");
let config: Config = Figment::new()
.merge(Env::prefixed("APP_").split("_"))
.extract()?;
assert_eq!(config, Config {
foo: Foo { key: 20 },
map: map!["one".into() => 1.0.into(), "two".into() => "dos".into()],
});
Ok(())
});
Sourcepub fn ignore(self, keys: &[&str]) -> Env
pub fn ignore(self, keys: &[&str]) -> Env
Filters out all environment variable keys contained in keys
.
use figment::{Jail, providers::Env};
Jail::expect_with(|jail| {
jail.set_env("FOO_FOO", 1);
jail.set_env("FOO_BAR", 2);
jail.set_env("FOO_BAZ", 3);
jail.set_env("FOO_BAM", 4);
let env = Env::prefixed("FOO_").ignore(&["bar", "baz"]);
assert_eq!(env.clone().iter().count(), 2);
// Ignores chain.
let env = env.ignore(&["bam"]);
assert_eq!(env.iter().count(), 1);
Ok(())
});
Sourcepub fn only(self, keys: &[&str]) -> Env
pub fn only(self, keys: &[&str]) -> Env
Filters out all environment variables keys not contained in keys
.
use figment::{Jail, providers::Env};
Jail::expect_with(|jail| {
jail.set_env("FOO_FOO", 1);
jail.set_env("FOO_BAR", 2);
jail.set_env("FOO_BAZ_BOB", 3);
jail.set_env("FOO_BAM_BOP", 4);
let env = Env::prefixed("FOO_").only(&["bar", "baz_bob", "zoo"]);
assert_eq!(env.iter().count(), 2);
jail.set_env("FOO_ZOO", 5);
assert_eq!(env.iter().count(), 3);
let env = Env::prefixed("FOO_").split("_");
assert_eq!(env.clone().only(&["bar", "baz.bob"]).iter().count(), 2);
assert_eq!(env.clone().only(&["bar", "bam_bop"]).iter().count(), 1);
Ok(())
});
Sourcepub fn iter<'a>(
&'a self,
) -> impl Iterator<Item = (Uncased<'static>, String)> + 'a
pub fn iter<'a>( &'a self, ) -> impl Iterator<Item = (Uncased<'static>, String)> + 'a
Returns an iterator over all of the environment variable (key, value)
pairs that will be considered by self
. The order is not specified.
Keys are lower-cased with leading and trailing whitespace removed. Empty keys, or partially empty keys, are not emitted.
Any non-Unicode sequences in values are replaced with U+FFFD REPLACEMENT CHARACTER
. Values are otherwise unmodified.
use figment::{Jail, providers::Env};
Jail::expect_with(|jail| {
jail.set_env("FOO_B", 2);
jail.set_env("FOO_A", 1);
jail.set_env("FOO_C", 3);
let env = Env::prefixed("FOO_");
let mut pairs: Vec<_> = env.iter().collect();
pairs.sort_by(|(k1, _), (k2, _)| k1.cmp(k2));
assert_eq!(pairs.len(), 3);
assert_eq!(pairs[0], ("a".into(), "1".into()));
assert_eq!(pairs[1], ("b".into(), "2".into()));
assert_eq!(pairs[2], ("c".into(), "3".into()));
jail.set_env("FOO_D", 4);
let mut pairs: Vec<_> = env.iter().collect();
pairs.sort_by(|(k1, _), (k2, _)| k1.cmp(k2));
assert_eq!(pairs.len(), 4);
assert_eq!(pairs[3], ("d".into(), "4".into()));
Ok(())
});
Sourcepub fn profile<P>(self, profile: P) -> Env
pub fn profile<P>(self, profile: P) -> Env
Sets the profile config data will be emitted to.
use figment::{Profile, providers::Env};
let env = Env::raw();
assert_eq!(env.profile, Profile::Default);
let env = env.profile("debug");
assert_eq!(env.profile, Profile::from("debug"));
Sourcepub fn global(self) -> Env
pub fn global(self) -> Env
Sets the profile config data will be emitted to to global
.
use figment::{Profile, providers::Env};
let env = Env::raw();
assert_eq!(env.profile, Profile::Default);
let env = env.global();
assert_eq!(env.profile, Profile::Global);
Sourcepub fn var(name: &str) -> Option<String>
pub fn var(name: &str) -> Option<String>
A convenience method to retrieve the value for an environment variable
with name name
. Retrieval is case-insensitive.
use figment::{Jail, providers::Env};
Jail::expect_with(|jail| {
jail.set_env("TESTING", 123);
assert_eq!(Env::var("testing"), Some("123".to_string()));
Ok(())
});
Sourcepub fn var_or<S>(name: &str, default: S) -> String
pub fn var_or<S>(name: &str, default: S) -> String
A convenience method to retrieve the value for an environment variable
with name name
or a default default
if one is not set. Retrieval
is case-insensitive.
use figment::{Jail, providers::Env};
Jail::expect_with(|jail| {
jail.set_env("TESTING", 123);
assert_eq!(Env::var_or("testing", "whoops"), "123");
assert_eq!(Env::var_or("hi", "whoops"), "whoops");
Ok(())
});
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Env
impl !RefUnwindSafe for Env
impl !Send for Env
impl !Sync for Env
impl Unpin for Env
impl !UnwindSafe for Env
Blanket Implementations§
Source§impl<'a, T> AsTaggedExplicit<'a> for Twhere
T: 'a,
impl<'a, T> AsTaggedExplicit<'a> for Twhere
T: 'a,
Source§impl<'a, T> AsTaggedImplicit<'a> for Twhere
T: 'a,
impl<'a, T> AsTaggedImplicit<'a> 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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Choices> CoproductSubsetter<CNil, HNil> for Choices
impl<Choices> CoproductSubsetter<CNil, HNil> for Choices
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.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>
§impl<T> IntoCollection<T> for T
impl<T> IntoCollection<T> for T
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<T> IntoSql for T
impl<T> IntoSql for T
Source§fn into_sql<T>(self) -> Self::Expression
fn into_sql<T>(self) -> Self::Expression
self
to an expression for Diesel’s query builder. Read moreSource§fn as_sql<'a, T>(&'a self) -> <&'a Self as AsExpression<T>>::Expression
fn as_sql<'a, T>(&'a self) -> <&'a Self as AsExpression<T>>::Expression
&self
to an expression for Diesel’s query builder. Read moreSource§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>
Returns self
with the
fg()
set to
Color::BrightBlack
.
§Example
println!("{}", value.bright_black());
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>
Returns self
with the
fg()
set to
Color::BrightGreen
.
§Example
println!("{}", value.bright_green());
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Returns self
with the
fg()
set to
Color::BrightYellow
.
§Example
println!("{}", value.bright_yellow());
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>
Returns self
with the
fg()
set to
Color::BrightMagenta
.
§Example
println!("{}", value.bright_magenta());
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>
Returns self
with the
fg()
set to
Color::BrightWhite
.
§Example
println!("{}", value.bright_white());
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>
Returns self
with the
bg()
set to
Color::BrightBlack
.
§Example
println!("{}", value.on_bright_black());
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>
Returns self
with the
bg()
set to
Color::BrightGreen
.
§Example
println!("{}", value.on_bright_green());
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Returns self
with the
bg()
set to
Color::BrightYellow
.
§Example
println!("{}", value.on_bright_yellow());
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Returns self
with the
bg()
set to
Color::BrightBlue
.
§Example
println!("{}", value.on_bright_blue());
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Returns self
with the
bg()
set to
Color::BrightMagenta
.
§Example
println!("{}", value.on_bright_magenta());
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Returns self
with the
bg()
set to
Color::BrightCyan
.
§Example
println!("{}", value.on_bright_cyan());
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Returns self
with the
bg()
set to
Color::BrightWhite
.
§Example
println!("{}", value.on_bright_white());
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 underline(&self) -> Painted<&T>
fn underline(&self) -> Painted<&T>
Returns self
with the
attr()
set to
Attribute::Underline
.
§Example
println!("{}", value.underline());
Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Returns self
with the
attr()
set to
Attribute::RapidBlink
.
§Example
println!("{}", value.rapid_blink());
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>
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);
Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T, Conn> RunQueryDsl<Conn> for T
impl<T, Conn> RunQueryDsl<Conn> for T
Source§fn execute<'conn, 'query>(
self,
conn: &'conn mut Conn,
) -> <Conn as AsyncConnection>::ExecuteFuture<'conn, 'query>
fn execute<'conn, 'query>( self, conn: &'conn mut Conn, ) -> <Conn as AsyncConnection>::ExecuteFuture<'conn, 'query>
Source§fn load<'query, 'conn, U>(
self,
conn: &'conn mut Conn,
) -> AndThen<Self::LoadFuture<'conn>, TryCollect<Self::Stream<'conn>, Vec<U>>, fn(_: Self::Stream<'conn>) -> TryCollect<Self::Stream<'conn>, Vec<U>>>
fn load<'query, 'conn, U>( self, conn: &'conn mut Conn, ) -> AndThen<Self::LoadFuture<'conn>, TryCollect<Self::Stream<'conn>, Vec<U>>, fn(_: Self::Stream<'conn>) -> TryCollect<Self::Stream<'conn>, Vec<U>>>
Source§fn load_stream<'conn, 'query, U>(
self,
conn: &'conn mut Conn,
) -> Self::LoadFuture<'conn>where
Conn: AsyncConnection,
U: 'conn,
Self: LoadQuery<'query, Conn, U> + 'query,
fn load_stream<'conn, 'query, U>(
self,
conn: &'conn mut Conn,
) -> Self::LoadFuture<'conn>where
Conn: AsyncConnection,
U: 'conn,
Self: LoadQuery<'query, Conn, U> + 'query,
Source§fn get_result<'query, 'conn, U>(
self,
conn: &'conn mut Conn,
) -> AndThen<Self::LoadFuture<'conn>, Map<StreamFuture<Pin<Box<Self::Stream<'conn>>>>, fn(_: (Option<Result<U, Error>>, Pin<Box<Self::Stream<'conn>>>)) -> Result<U, Error>>, fn(_: Self::Stream<'conn>) -> Map<StreamFuture<Pin<Box<Self::Stream<'conn>>>>, fn(_: (Option<Result<U, Error>>, Pin<Box<Self::Stream<'conn>>>)) -> Result<U, Error>>>
fn get_result<'query, 'conn, U>( self, conn: &'conn mut Conn, ) -> AndThen<Self::LoadFuture<'conn>, Map<StreamFuture<Pin<Box<Self::Stream<'conn>>>>, fn(_: (Option<Result<U, Error>>, Pin<Box<Self::Stream<'conn>>>)) -> Result<U, Error>>, fn(_: Self::Stream<'conn>) -> Map<StreamFuture<Pin<Box<Self::Stream<'conn>>>>, fn(_: (Option<Result<U, Error>>, Pin<Box<Self::Stream<'conn>>>)) -> Result<U, Error>>>
Source§fn get_results<'query, 'conn, U>(
self,
conn: &'conn mut Conn,
) -> AndThen<Self::LoadFuture<'conn>, TryCollect<Self::Stream<'conn>, Vec<U>>, fn(_: Self::Stream<'conn>) -> TryCollect<Self::Stream<'conn>, Vec<U>>>
fn get_results<'query, 'conn, U>( self, conn: &'conn mut Conn, ) -> AndThen<Self::LoadFuture<'conn>, TryCollect<Self::Stream<'conn>, Vec<U>>, fn(_: Self::Stream<'conn>) -> TryCollect<Self::Stream<'conn>, Vec<U>>>
Vec
with the affected rows. Read moreSource§fn first<'query, 'conn, U>(
self,
conn: &'conn mut Conn,
) -> AndThen<<Self::Output as LoadQuery<'query, Conn, U>>::LoadFuture<'conn>, Map<StreamFuture<Pin<Box<<Self::Output as LoadQuery<'query, Conn, U>>::Stream<'conn>>>>, fn(_: (Option<Result<U, Error>>, Pin<Box<<Self::Output as LoadQuery<'query, Conn, U>>::Stream<'conn>>>)) -> Result<U, Error>>, fn(_: <Self::Output as LoadQuery<'query, Conn, U>>::Stream<'conn>) -> Map<StreamFuture<Pin<Box<<Self::Output as LoadQuery<'query, Conn, U>>::Stream<'conn>>>>, fn(_: (Option<Result<U, Error>>, Pin<Box<<Self::Output as LoadQuery<'query, Conn, U>>::Stream<'conn>>>)) -> Result<U, Error>>>
fn first<'query, 'conn, U>( self, conn: &'conn mut Conn, ) -> AndThen<<Self::Output as LoadQuery<'query, Conn, U>>::LoadFuture<'conn>, Map<StreamFuture<Pin<Box<<Self::Output as LoadQuery<'query, Conn, U>>::Stream<'conn>>>>, fn(_: (Option<Result<U, Error>>, Pin<Box<<Self::Output as LoadQuery<'query, Conn, U>>::Stream<'conn>>>)) -> Result<U, Error>>, fn(_: <Self::Output as LoadQuery<'query, Conn, U>>::Stream<'conn>) -> Map<StreamFuture<Pin<Box<<Self::Output as LoadQuery<'query, Conn, U>>::Stream<'conn>>>>, fn(_: (Option<Result<U, Error>>, Pin<Box<<Self::Output as LoadQuery<'query, Conn, U>>::Stream<'conn>>>)) -> Result<U, Error>>>
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.