pub struct ActorChain { /* private fields */ }Expand description
A first-class RFC 8693 §4.1 actor chain.
origin serializes as the top-level sub claim: the human principal the
request is ultimately on behalf of. actors serializes as nested act
claims in RFC order, with the current actor outermost and prior actors
nested beneath it. For authorization, only the top-level token claims and
ActorChain::current are authoritative. The audit-not-authz rule is that
nested actors are audit history only and must not be used to grant access.
Implementations§
Source§impl ActorChain
impl ActorChain
Sourcepub fn new(origin: impl Into<String>) -> Self
pub fn new(origin: impl Into<String>) -> Self
Create a chain with only an originating subject and no acting agents.
pub fn new_with_scopes<I, S>(origin: impl Into<String>, scopes: I) -> Self
Sourcepub fn from_parts<I, S>(origin: impl Into<String>, actors: I) -> Self
pub fn from_parts<I, S>(origin: impl Into<String>, actors: I) -> Self
Build a chain from actors already ordered current-first, matching the
RFC 8693 nested act traversal order.
pub fn from_entries<I>(origin: ActorChainEntry, actors: I) -> Selfwhere
I: IntoIterator<Item = ActorChainEntry>,
pub fn push_entry(&mut self, actor: ActorChainEntry)
Sourcepub fn pushed(self, actor: impl Into<String>) -> Self
pub fn pushed(self, actor: impl Into<String>) -> Self
Chainable form of ActorChain::push.
pub fn pushed_with_scopes<I, S>( self, actor: impl Into<String>, scopes: I, ) -> Self
pub fn pushed_entry(self, actor: ActorChainEntry) -> Self
Sourcepub fn current(&self) -> &str
pub fn current(&self) -> &str
The actor that authorization checks should consider authoritative.
When no delegation has occurred, the originating subject is also the current actor.
Sourcepub fn origin(&self) -> &str
pub fn origin(&self) -> &str
The originating human principal carried in the top-level sub claim.
pub fn origin_entry(&self) -> &ActorChainEntry
pub fn current_entry(&self) -> &ActorChainEntry
Sourcepub fn actors(&self) -> impl Iterator<Item = &str>
pub fn actors(&self) -> impl Iterator<Item = &str>
Acting agents in RFC nested-act order: current actor first.
pub fn actor_entries(&self) -> impl Iterator<Item = &ActorChainEntry>
Sourcepub fn iter(&self) -> ActorChainIter<'_> ⓘ
pub fn iter(&self) -> ActorChainIter<'_> ⓘ
All principals from current actor through the originating subject.
pub fn entries(&self) -> ActorChainEntryIter<'_> ⓘ
pub fn parent_chain(&self) -> Option<Self>
pub fn is_delegated(&self) -> bool
Sourcepub fn may_act(&self) -> Option<&str>
pub fn may_act(&self) -> Option<&str>
Authorized actor hint from the optional RFC 8693 §4.4 may_act claim.
pub fn set_may_act(&mut self, may_act: impl Into<String>)
pub fn with_may_act(self, may_act: impl Into<String>) -> Self
pub fn clear_may_act(&mut self)
pub fn validate_scope_attenuation( &self, policy: &ScopeAttenuationPolicy, ) -> Result<(), ScopeAttenuationViolation>
pub fn to_json_value(&self) -> Value
pub fn from_json_value(value: &Value) -> Result<Self, ActorChainError>
pub fn to_vm_value(&self) -> VmValue
pub fn from_vm_value(value: &VmValue) -> Result<Self, ActorChainError>
Trait Implementations§
Source§impl Clone for ActorChain
impl Clone for ActorChain
Source§fn clone(&self) -> ActorChain
fn clone(&self) -> ActorChain
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ActorChain
impl Debug for ActorChain
Source§impl<'de> Deserialize<'de> for ActorChain
impl<'de> Deserialize<'de> for ActorChain
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>,
impl Eq for ActorChain
Source§impl From<&ActorChain> for VmValue
impl From<&ActorChain> for VmValue
Source§fn from(chain: &ActorChain) -> Self
fn from(chain: &ActorChain) -> Self
Source§impl From<ActorChain> for VmValue
impl From<ActorChain> for VmValue
Source§fn from(chain: ActorChain) -> Self
fn from(chain: ActorChain) -> Self
Source§impl Hash for ActorChain
impl Hash for ActorChain
Source§impl<'a> IntoIterator for &'a ActorChain
impl<'a> IntoIterator for &'a ActorChain
Source§impl PartialEq for ActorChain
impl PartialEq for ActorChain
Source§fn eq(&self, other: &ActorChain) -> bool
fn eq(&self, other: &ActorChain) -> bool
self and other values to be equal, and is used by ==.Source§impl Serialize for ActorChain
impl Serialize for ActorChain
impl StructuralPartialEq for ActorChain
Source§impl TryFrom<&Value> for ActorChain
impl TryFrom<&Value> for ActorChain
Auto Trait Implementations§
impl Freeze for ActorChain
impl RefUnwindSafe for ActorChain
impl Send for ActorChain
impl Sync for ActorChain
impl Unpin for ActorChain
impl UnsafeUnpin for ActorChain
impl UnwindSafe for ActorChain
Blanket Implementations§
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> 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,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
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);