.. | ||
examples | ||
src | ||
tests | ||
.cargo-checksum.json | ||
Cargo.lock | ||
Cargo.toml | ||
CHANGELOG.md | ||
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.34 or later.
Examples
#[pin_project]
attribute creates projection types
covering all the fields of struct or enum.
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 method(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 documentation for more details, and see examples directory for more examples and generated code.
Related Projects
- pin-project-lite: A lightweight version of pin-project written with declarative macros.
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.