tag | aff57fdb77b58502c6f4a70067aac95f8f82cf08 | |
---|---|---|
tagger | The Android Open Source Project <initial-contribution@android.com> | Wed Dec 08 18:10:50 2021 -0800 |
object | 5b2facf7d953887b390afa3d537bb9ba2b95c7f9 |
Android mainline 12.0.0 release 9
commit | 5b2facf7d953887b390afa3d537bb9ba2b95c7f9 | [log] [tgz] |
---|---|---|
author | Bob Badour <bbadour@google.com> | Sat Feb 27 02:49:30 2021 +0000 |
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | Sat Feb 27 02:49:30 2021 +0000 |
tree | ee785501b096808438284c8623ebf9f736577dbe | |
parent | 8a9b32b0c60703ad7f802ff3b6897ac5117b72c6 [diff] | |
parent | de9d34bf5af86f451dda11d8ab2810584be15721 [diff] |
[LSC] Add LOCAL_LICENSE_KINDS to external/rust/crates/rustversion am: d376700887 am: 5f00680ecd am: a1fb86143a am: de9d34bf5a Original change: https://android-review.googlesource.com/c/platform/external/rust/crates/rustversion/+/1609836 MUST ONLY BE SUBMITTED BY AUTOMERGER Change-Id: Ia67b5d71e338c8b5c041eba2c0f89c9af9299be7
This crate provides macros for conditional compilation according to rustc compiler version, analogous to #[cfg(...)]
and #[cfg_attr(...)]
.
[dependencies] rustversion = "1.0"
#[rustversion::stable]
—
True on any stable compiler.
#[rustversion::stable(1.34)]
—
True on exactly the specified stable compiler.
#[rustversion::beta]
—
True on any beta compiler.
#[rustversion::nightly]
—
True on any nightly compiler or dev build.
#[rustversion::nightly(2019-01-01)]
—
True on exactly one nightly.
#[rustversion::since(1.34)]
—
True on that stable release and any later compiler, including beta and nightly.
#[rustversion::since(2019-01-01)]
—
True on that nightly and all newer ones.
#[rustversion::before(
version or date)]
—
Negative of #[rustversion::since(...)].
#[rustversion::not(
selector)]
—
Negative of any selector; for example #[rustversion::not(nightly)].
#[rustversion::any(
selectors...)]
—
True if any of the comma-separated selectors is true; for example #[rustversion::any(stable, beta)].
#[rustversion::all(
selectors...)]
—
True if all of the comma-separated selectors are true; for example #[rustversion::all(since(1.31), before(1.34))].
#[rustversion::attr(
selector,
attribute)]
—
For conditional inclusion of attributes; analogous to cfg_attr
.
Providing additional trait impls as types are stabilized in the standard library without breaking compatibility with older compilers; in this case Pin<P> stabilized in Rust 1.33:
#[rustversion::since(1.33)] use std::pin::Pin; #[rustversion::since(1.33)] impl<P: MyTrait> MyTrait for Pin<P> { /* ... */ }
Similar but for language features; the ability to control alignment greater than 1 of packed structs was stabilized in Rust 1.33.
#[rustversion::attr(before(1.33), repr(packed))] #[rustversion::attr(since(1.33), repr(packed(2)))] struct Six(i16, i32); fn main() { println!("{}", std::mem::align_of::<Six>()); }
Augmenting code with const
as const impls are stabilized in the standard library. This use of const
as an attribute is recognized as a special case by the rustversion::attr macro.
use std::time::Duration; #[rustversion::attr(since(1.32), const)] fn duration_as_days(dur: Duration) -> u64 { dur.as_secs() / 60 / 60 / 24 }