forked from mirrors/gecko-dev
|
…
|
||
|---|---|---|
| .. | ||
| ci | ||
| examples | ||
| src | ||
| tests | ||
| .cargo-checksum.json | ||
| Cargo.lock | ||
| Cargo.toml | ||
| CHANGELOG.md | ||
| ci.sh | ||
| compiletest.sh | ||
| LICENSE-APACHE | ||
| LICENSE-MIT | ||
| 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.