#[non_exhaustive]
pub enum DescribePackagesFilterName {
PackageId,
PackageName,
PackageStatus,
Unknown(UnknownVariantValue),
}
Expand description
When writing a match expression against DescribePackagesFilterName
, it is important to ensure
your code is forward-compatible. That is, if a match arm handles a case for a
feature that is supported by the service but has not been represented as an enum
variant in a current version of SDK, your code should continue to work when you
upgrade SDK to a future version in which the enum does include a variant for that
feature.
Here is an example of how you can make a match expression forward-compatible:
# let describepackagesfiltername = unimplemented!();
match describepackagesfiltername {
DescribePackagesFilterName::PackageId => { /* ... */ },
DescribePackagesFilterName::PackageName => { /* ... */ },
DescribePackagesFilterName::PackageStatus => { /* ... */ },
other @ _ if other.as_str() == "NewFeature" => { /* handles a case for `NewFeature` */ },
_ => { /* ... */ },
}
The above code demonstrates that when describepackagesfiltername
represents
NewFeature
, the execution path will lead to the second last match arm,
even though the enum does not contain a variant DescribePackagesFilterName::NewFeature
in the current version of SDK. The reason is that the variable other
,
created by the @
operator, is bound to
DescribePackagesFilterName::Unknown(UnknownVariantValue("NewFeature".to_owned()))
and calling as_str
on it yields "NewFeature"
.
This match expression is forward-compatible when executed with a newer
version of SDK where the variant DescribePackagesFilterName::NewFeature
is defined.
Specifically, when describepackagesfiltername
represents NewFeature
,
the execution path will hit the second last match arm as before by virtue of
calling as_str
on DescribePackagesFilterName::NewFeature
also yielding "NewFeature"
.
Explicitly matching on the Unknown
variant should
be avoided for two reasons:
- The inner data
UnknownVariantValue
is opaque, and no further information can be extracted. - It might inadvertently shadow other intended match arms.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
PackageId
PackageName
PackageStatus
Unknown(UnknownVariantValue)
Unknown
contains new variants that have been added since this code was generated.
Implementations§
Trait Implementations§
source§impl AsRef<str> for DescribePackagesFilterName
impl AsRef<str> for DescribePackagesFilterName
source§impl Clone for DescribePackagesFilterName
impl Clone for DescribePackagesFilterName
source§fn clone(&self) -> DescribePackagesFilterName
fn clone(&self) -> DescribePackagesFilterName
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for DescribePackagesFilterName
impl Debug for DescribePackagesFilterName
source§impl From<&str> for DescribePackagesFilterName
impl From<&str> for DescribePackagesFilterName
source§impl FromStr for DescribePackagesFilterName
impl FromStr for DescribePackagesFilterName
source§impl Hash for DescribePackagesFilterName
impl Hash for DescribePackagesFilterName
source§impl Ord for DescribePackagesFilterName
impl Ord for DescribePackagesFilterName
source§fn cmp(&self, other: &DescribePackagesFilterName) -> Ordering
fn cmp(&self, other: &DescribePackagesFilterName) -> Ordering
1.21.0 · source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
source§impl PartialEq<DescribePackagesFilterName> for DescribePackagesFilterName
impl PartialEq<DescribePackagesFilterName> for DescribePackagesFilterName
source§fn eq(&self, other: &DescribePackagesFilterName) -> bool
fn eq(&self, other: &DescribePackagesFilterName) -> bool
self
and other
values to be equal, and is used
by ==
.source§impl PartialOrd<DescribePackagesFilterName> for DescribePackagesFilterName
impl PartialOrd<DescribePackagesFilterName> for DescribePackagesFilterName
source§fn partial_cmp(&self, other: &DescribePackagesFilterName) -> Option<Ordering>
fn partial_cmp(&self, other: &DescribePackagesFilterName) -> Option<Ordering>
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read moreimpl Eq for DescribePackagesFilterName
impl StructuralEq for DescribePackagesFilterName
impl StructuralPartialEq for DescribePackagesFilterName
Auto Trait Implementations§
impl RefUnwindSafe for DescribePackagesFilterName
impl Send for DescribePackagesFilterName
impl Sync for DescribePackagesFilterName
impl Unpin for DescribePackagesFilterName
impl UnwindSafe for DescribePackagesFilterName
Blanket Implementations§
source§impl<Q, K> Equivalent<K> for Qwhere
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
impl<Q, K> Equivalent<K> for Qwhere
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.