pub struct Session {
pub config: Config,
pub config_file: PathBuf,
pub resolved: Option<Resolved>,
pub render: Context,
pub global: GlobalArgs,
}Expand description
Everything a command implementation needs, assembled once.
Fields§
§config: Config§config_file: PathBufWhere config came from, so auth login can write back to it.
resolved: Option<Resolved>§render: Context§global: GlobalArgsImplementations§
Source§impl Session
impl Session
Sourcepub fn resolved(&self) -> Result<&Resolved, ConfigError>
pub fn resolved(&self) -> Result<&Resolved, ConfigError>
The active profile, or an auth error explaining how to get one.
Sourcepub async fn client_for(
&self,
target: &str,
) -> Result<(Client, String), ExitCode>
pub async fn client_for( &self, target: &str, ) -> Result<(Client, String), ExitCode>
Split a possibly profile-qualified target and build the client for it.
Queue keys are only unique inside an organisation: two profiles can
both see a LMS, and LMS-12 then names two different issues. So the
key decides the profile, in this order:
work/LMS-12says which, and is always obeyed.- Otherwise the profile that can see queue
LMSis used, even when it is not the default one. Sending the request to a profile known not to have the queue only produces a 403 that reads like a rights problem. - Two profiles in different organisations seeing one queue key is the genuinely ambiguous case, and is refused rather than guessed at.
- A bare number is the issue’s number in the profile’s default queue.
42andPROJ-42then name the same issue, which is what somebody reading a board and typing a key by hand actually has in front of them. Without a default queue it is refused: there is nothing to complete it with, and a number is not a key.
Sourcepub async fn routed(
&self,
target: &str,
) -> Result<(Client, String, String), ExitCode>
pub async fn routed( &self, target: &str, ) -> Result<(Client, String, String), ExitCode>
Self::client_for, and the name of the profile that answered.
The name is what a person recognises; the organisation the client carries is what two profiles onto the same Tracker have in common. A command that has to remember something about “where this went” wants both.
Sourcepub fn announce(&self, resolved: &Resolved)
pub fn announce(&self, resolved: &Resolved)
Say which profile and organisation this answer came from.
Once per run, on stderr. Every command says it, not only the writes: an answer from the wrong organisation looks exactly like an answer from the right one, and “which profile was that” should never be a question the output leaves open. stderr because stdout is the data channel.
Sourcepub fn client(&self) -> Result<Client, ExitCode>
pub fn client(&self) -> Result<Client, ExitCode>
Build an API client for the active profile.
Every failure on the way here — no profile, no stored token, a token the keychain will not release — is an auth problem from the caller’s point of view, and reports as one.
Sourcepub fn client_with(&self, resolved: &Resolved) -> Result<Client, ExitCode>
pub fn client_with(&self, resolved: &Resolved) -> Result<Client, ExitCode>
A client for a specific profile.
Sourcepub fn display(&self) -> Display
pub fn display(&self) -> Display
Display defaults for the active profile, or the built-in ones.
Sourcepub fn default_queue(&self) -> Option<&str>
pub fn default_queue(&self) -> Option<&str>
The queue to act on when the command did not name one.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Session
impl RefUnwindSafe for Session
impl Send for Session
impl Sync for Session
impl Unpin for Session
impl UnsafeUnpin for Session
impl UnwindSafe for Session
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> 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> 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);