All notable changes to this project will be documented in this file.
This project adheres to Semantic Versioning.
Allowed naming the projected types.
By passing an argument with the same name as the method to the attribute, you can name the projection type returned from the method:
use pin_project::pin_project; use std::pin::Pin; #[pin_project(project = EnumProj)] enum Enum<T> { Variant(#[pin] T), } fn func<T>(x: Pin<&mut Enum<T>>) { match x.project() { EnumProj::Variant(y) => { let _: Pin<&mut T> = y; } } }
Added !Unpin
option to #[pin_project]
attribute for guarantee the type is !Unpin
.
use pin_project::pin_project; #[pin_project(!Unpin)] struct Struct<T, U> { field: T, }
This is equivalent to use #[pin]
attribute for PhantomPinned
field.
use pin_project::pin_project; use std::marker::PhantomPinned; #[pin_project] struct Struct<T, U> { field: T, #[pin] // Note that using `PhantomPinned` without `#[pin]` attribute has no effect. _pin: PhantomPinned, }
Note: This raises the minimum supported Rust version of this crate from rustc 1.33 to rustc 1.34.
Fixed an issue where duplicate #[project]
attributes were ignored.
Hide generated items from --document-private-items. See #211 for more details.
Improve documentation
Fixed an issue that #[project]
on non-statement expression does not work without unstable features.
Improve documentation
project_replace
method and #[project_replace]
attribute. project_replace
method is optional and can be enabled by passing the Replace
argument to #[pin_project]
attribute. See the documentation for more details.Fixed lifetime inference error when associated types are used in fields.
#[project]
attribute can now be used for if let
expressions.
#[pin_project]
can now interoperate with #[cfg()]
on tuple structs and tuple variants.
Fixed support for DSTs(Dynamically Sized Types) on #[pin_project(UnsafeUnpin)]
Pin projection has become a safe operation. In the absence of other unsafe code that you write, it is impossible to cause undefined behavior.
#[unsafe_project]
attribute has been replaced with #[pin_project]
attribute. (#18, #33)
The Unpin
argument has been removed - an Unpin
impl is now generated by default.
Drop impls must be specified with #[pinned_drop]
instead of via a normal Drop
impl. (#18, #33, #86)
#[pin_project]
can now be used for public type with private field types.
Removed "project_attr" feature and always enable #[project]
attribute.
Changes since the 0.4.0-beta.1 release:
Changed the argument type of project method back to self: Pin<&mut Self>
.
Removed "project_attr" feature and always enable #[project]
attribute.
Changed #[pinned_drop] to trait implementation.
#[pinned_drop] impl<T> PinnedDrop for Foo<'_, T> { fn drop(mut self: Pin<&mut Self>) { **self.project().was_dropped = true; } }
Added some examples and generated code.
Improve error messages.
Improved documentation.
Added 'project_into' method to #[pin_project] types. This can be useful when returning a pin projection from a method.
fn get_pin_mut(self: Pin<&mut Self>) -> Pin<&mut T> { self.project_into().pinned }
Prevented UnpinStruct from appearing in the document by default. See #71 for more details.
Improved document of generated code.. Also added an option to control the document of generated code. See #62 for more details.
#[pin_project]
attribute can now detect that the type used does not have its own drop implementation without actually implementing drop. This removed some restrictions.
proc-macro2
, syn
, and quote
to 1.0.Pin projection has become a safe operation.
#[unsafe_project]
has been replaced with #[pin_project]
.
The Unpin
argument has been removed - an Unpin
impl is now generated by default.
Drop impls must be specified with #[pinned_drop]
instead of via a normal Drop
impl.
Unpin
impls must be specified with an impl of UnsafeUnpin
, instead of implementing the normal Unpin
trait.
Made #[project]
attribute disabled by default.
See also tracking issue for 0.4 release.
proc-macro2
, syn
, and quote
to 1.0.Improved documentation.
Updated minimum syn
version to 0.15.22.
Removed unsafe_fields
attribute.
Removed unsafe_variants
attribute.
Made unsafe_fields
optional.
Improved documentation.
Added the feature to create projected enums to unsafe_project
.
Added project
attribute to support pattern matching.
unsafe_fields
can now opt-out.
Added unsafe_variants
attribute. This attribute is available if pin-project is built with the "unsafe_variants" feature.
unsafe_project
.Unpin
to both unsafe_project
and unsafe_fields
.Fixed dependencies.
Added unsafe_fields
attribute.
unsafe_pin_project
to unsafe_project
.Initial release