diff options
Diffstat (limited to 'README.md')
-rw-r--r-- | README.md | 40 |
1 files changed, 35 insertions, 5 deletions
@@ -11,8 +11,8 @@ [docs-url]: https://docs.rs/pin-project [license-badge]: https://img.shields.io/badge/license-Apache--2.0%20OR%20MIT-blue.svg [license]: #license -[rustc-badge]: https://img.shields.io/badge/rustc-1.34+-lightgray.svg -[rustc-url]: https://blog.rust-lang.org/2019/04/11/Rust-1.34.0.html +[rustc-badge]: https://img.shields.io/badge/rustc-1.37+-lightgray.svg +[rustc-url]: https://blog.rust-lang.org/2019/08/15/Rust-1.37.0.html A crate for safe and ergonomic [pin-projection]. @@ -22,10 +22,10 @@ Add this to your `Cargo.toml`: ```toml [dependencies] -pin-project = "0.4" +pin-project = "1" ``` -The current pin-project requires Rust 1.34 or later. +The current pin-project requires Rust 1.37 or later. ## Examples @@ -54,10 +54,40 @@ impl<T, U> Struct<T, U> { [*code like this will be generated*][struct-default-expanded] +To use `#[pin_project]` on enums, you need to name the projection type +returned from the method. + +```rust +use pin_project::pin_project; +use std::pin::Pin; + +#[pin_project(project = EnumProj)] +enum Enum<T, U> { + Pinned(#[pin] T), + Unpinned(U), +} + +impl<T, U> Enum<T, U> { + fn method(self: Pin<&mut Self>) { + match self.project() { + EnumProj::Pinned(x) => { + let _: Pin<&mut T> = x; + } + EnumProj::Unpinned(y) => { + let _: &mut U = y; + } + } + } +} +``` + +[*code like this will be generated*][enum-default-expanded] + See [documentation][docs-url] for more details, and see [examples] directory for more examples and generated code. -[`pin_project`]: https://docs.rs/pin-project/0.4/pin_project/attr.pin_project.html +[`pin_project`]: https://docs.rs/pin-project/1/pin_project/attr.pin_project.html +[enum-default-expanded]: examples/enum-default-expanded.rs [examples]: examples/README.md [pin-projection]: https://doc.rust-lang.org/nightly/std/pin/index.html#projections-and-structural-pinning [struct-default-expanded]: examples/struct-default-expanded.rs |