All notable changes to this project will be documented in this file.
This project adheres to Semantic Versioning.
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