зеркало из https://github.com/mozilla/gecko-dev.git
a548b924b4
Differential Revision: https://phabricator.services.mozilla.com/D71463 |
||
---|---|---|
.. | ||
ci | ||
examples | ||
src | ||
tests | ||
.cargo-checksum.json | ||
CHANGELOG.md | ||
Cargo.lock | ||
Cargo.toml | ||
LICENSE-APACHE | ||
LICENSE-MIT | ||
README.md | ||
ci.sh | ||
compiletest.sh |
README.md
pin-project
A crate for safe and ergonomic pin-projection.
Usage
Add this to your Cargo.toml
:
[dependencies]
pin-project = "0.4"
The current pin-project requires Rust 1.33 or later.
Examples
pin_project
attribute creates a projection struct covering all the fields.
use pin_project::pin_project;
use std::pin::Pin;
#[pin_project]
struct Struct<T, U> {
#[pin]
pinned: T,
unpinned: U,
}
impl<T, U> Struct<T, U> {
fn foo(self: Pin<&mut Self>) {
let this = self.project();
let _: Pin<&mut T> = this.pinned; // Pinned reference to the field
let _: &mut U = this.unpinned; // Normal reference to the field
}
}
Code like this will be generated
See API documentation for more details.
Also, there are examples and generated code of each feature in examples directory.
License
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.