#[non_exhaustive]pub enum PlatformSpec {
Always,
Platforms(Vec<Arc<Platform>>),
Any,
}Expand description
A specifier for a set of platforms.
Some uses of guppy care about one or more specific platforms, and others
care about queries against the intersection of all hypothetical platforms,
or against a union of any of them. PlatformSpec represents this notion.
§Ordering
For any dependency status, the results of queries against these specs are
ordered (by EnabledTernary’s Ord impl, where Disabled < Unknown < Enabled) as:
Platforms([]) <= Always <= Platforms(non-empty) <= AnyPlatforms over every known platform is still not the same as Any, since
the latter also covers platforms that guppy does not know about.
PlatformSpec does not currently support expressions, but it might in the future, using an
SMT solver.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
Always
The intersection of all platforms.
Dependency queries performed against this variant will return EnabledTernary::Enabled if
and only if a dependency is not platform-dependent. They can never return
EnabledTernary::Unknown.
This variant does not currently understand expressions that always evaluate to true
(tautologies), like cfg(any(unix, not(unix))) or cfg(all()). In the future, an SMT
solver would be able to handle such expressions.
Platforms(Vec<Arc<Platform>>)
The union of a set of individual platforms.
Dependency queries performed against this variant will return
EnabledTernary::Enabled if and only if a dependency is enabled on at
least one platform. They may also return EnabledTernary::Unknown if
the dependency isn’t definitely enabled on any platform, but the status
is unknown on at least one platform (due to target features being
unknown).
If the list is empty, every query against it returns
EnabledTernary::Disabled, even for dependencies that are not
platform-dependent.
Queries against this variant obey the following laws, where | is the
K3 OR on EnabledTernary:
- The order of platforms doesn’t matter, and duplicates don’t change the result.
Platforms(a ++ b)produces the same result asPlatforms(a) | Platforms(b).- For platform-dependent statuses,
Platforms([p])produces the same result asPlatformEval::evalagainstp.
Any
The union of all platforms.
Dependency queries performed against this variant will return EnabledTernary::Enabled if
a dependency is enabled on any platform.
This variant does not currently understand expressions that always evaluate to false
(contradictions), like cfg(all(unix, not(unix))) or cfg(any()). In the future, an SMT
solver would be able to handle such expressions.
Implementations§
Source§impl PlatformSpec
impl PlatformSpec
Sourcepub fn build_target() -> Result<Self, TargetSpecError>
pub fn build_target() -> Result<Self, TargetSpecError>
Returns a PlatformSpec corresponding to the target platform, as
determined at build time.
Returns an error if the build target was unknown to the version of
target-spec in use.
Trait Implementations§
Source§impl Clone for PlatformSpec
impl Clone for PlatformSpec
Source§fn clone(&self) -> PlatformSpec
fn clone(&self) -> PlatformSpec
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 PlatformSpec
impl Debug for PlatformSpec
Auto Trait Implementations§
impl Freeze for PlatformSpec
impl RefUnwindSafe for PlatformSpec
impl Send for PlatformSpec
impl Sync for PlatformSpec
impl Unpin for PlatformSpec
impl UnsafeUnpin for PlatformSpec
impl UnwindSafe for PlatformSpec
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<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