pub struct ActionPattern {
pub service: String,
pub action: String,
}Expand description
A parsed IAM action pattern like “s3:GetObject” or “lambda:Update*”.
Fields§
§service: String§action: StringImplementations§
Source§impl ActionPattern
impl ActionPattern
Sourcepub fn parse(s: &str) -> Result<Self>
pub fn parse(s: &str) -> Result<Self>
Parse a string like “s3:GetObject” into an ActionPattern.
Both the service and action components must match [a-zA-Z0-9*?-]+
to prevent opaque STS errors from malformed policy documents.
Sourcepub fn to_iam_action(&self) -> String
pub fn to_iam_action(&self) -> String
Convert to IAM action string (AWS format: service:Action).
Sourcepub fn parse_gcp(s: &str) -> Result<Self>
pub fn parse_gcp(s: &str) -> Result<Self>
Parse a GCP permission like “storage.objects.get” or “compute.instances.list”.
Components are validated to contain only [a-zA-Z0-9.*?-]+ to prevent
null bytes or special characters from corrupting deny-list matching.
Sourcepub fn to_gcp_permission(&self) -> String
pub fn to_gcp_permission(&self) -> String
Convert to GCP permission string (service.resource.verb).
Sourcepub fn parse_azure(s: &str) -> Result<Self>
pub fn parse_azure(s: &str) -> Result<Self>
Parse an Azure permission like “Microsoft.Storage/storageAccounts/read”.
Components are validated to contain only [a-zA-Z0-9./*?-]+ to prevent
null bytes or special characters from corrupting deny-list matching.
Sourcepub fn to_azure_permission(&self) -> String
pub fn to_azure_permission(&self) -> String
Convert to Azure permission string (Microsoft.Service/resource/action).
Sourcepub fn matches(&self, other: &ActionPattern) -> bool
pub fn matches(&self, other: &ActionPattern) -> bool
Check if this pattern matches another action (for deny list checking). Supports wildcards: “iam:” matches “iam:CreateRole”, “:*” matches everything, “s3:*Object” matches “s3:GetObject” and “s3:PutObject”.
AWS IAM and GCP actions are case-insensitive, so comparison is
normalised to lowercase. R6-M26: Azure permissions preserve casing
in role definitions and resource providers; blanket lowercasing
could cause spurious deny-list matches against differently-cased
operator tokens (e.g. a deny rule on
Microsoft.Storage/storageAccounts/write comparing against a
user-supplied Microsoft.storage/storageaccounts/WRITE). When
either side looks like an Azure provider (service starts with
Microsoft.), compare with case preserved on both sides so the
match semantics mirror Azure’s own service-provider identifiers.
Trait Implementations§
Source§impl Clone for ActionPattern
impl Clone for ActionPattern
Source§fn clone(&self) -> ActionPattern
fn clone(&self) -> ActionPattern
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ActionPattern
impl Debug for ActionPattern
Source§impl<'de> Deserialize<'de> for ActionPattern
impl<'de> Deserialize<'de> for ActionPattern
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>,
Auto Trait Implementations§
impl Freeze for ActionPattern
impl RefUnwindSafe for ActionPattern
impl Send for ActionPattern
impl Sync for ActionPattern
impl Unpin for ActionPattern
impl UnsafeUnpin for ActionPattern
impl UnwindSafe for ActionPattern
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<D> DeserializeWith<JsonFormat> for Dwhere
D: DeserializeOwned,
impl<D> DeserializeWith<JsonFormat> for Dwhere
D: DeserializeOwned,
Source§fn deserialize_with(body: ResponseBody) -> Result<D, Error>
fn deserialize_with(body: ResponseBody) -> Result<D, Error>
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 more