1# Changelog 2 3All notable changes to this project will be documented in this file. 4 5This project adheres to [Semantic Versioning](https://semver.org). 6 7<!-- 8Note: In this file, do not use the hard wrap in the middle of a sentence for compatibility with GitHub comment style markdown rendering. 9--> 10 11## [Unreleased] 12 13## [1.0.6] - 2021-03-25 14 15- [Suppress `clippy::semicolon_if_nothing_returned` lint in generated code.](https://github.com/taiki-e/pin-project/pull/318) 16 17## [1.0.5] - 2021-02-03 18 19- [Suppress `deprecated` lint in generated code.](https://github.com/taiki-e/pin-project/pull/313) 20 21## [1.0.4] - 2021-01-09 22 23- [Suppress `clippy::ref_option_ref` lint in generated code.](https://github.com/taiki-e/pin-project/pull/308) 24 25## [1.0.3] - 2021-01-05 26 27- Exclude unneeded files from crates.io. 28 29## [1.0.2] - 2020-11-18 30 31- [Suppress `clippy::unknown_clippy_lints` lint in generated code.](https://github.com/taiki-e/pin-project/pull/303) 32 33## [1.0.1] - 2020-10-15 34 35- [Fix warnings when `#[pin_project]` attribute used within `macro_rules!` macros.](https://github.com/taiki-e/pin-project/pull/298) 36 37## [1.0.0] - 2020-10-13 38 39- [Remove deprecated `#[project]`, `#[project_ref]`, and `#[project_replace]` attributes.](https://github.com/taiki-e/pin-project/pull/265) 40 41 Name the projected type by passing an argument with the same name as the method to the `#[pin_project]` attribute instead: 42 43 ```diff 44 - #[pin_project] 45 + #[pin_project(project = EnumProj)] 46 enum Enum<T> { 47 Variant(#[pin] T), 48 } 49 50 - #[project] 51 fn func<T>(x: Pin<&mut Enum<T>>) { 52 - #[project] 53 match x.project() { 54 - Enum::Variant(_) => { /* ... */ } 55 + EnumProj::Variant(_) => { /* ... */ } 56 } 57 } 58 ``` 59 60- [Remove deprecated `Replace` argument from `#[pin_project]` attribute.](https://github.com/taiki-e/pin-project/pull/266) Use `project_replace` argument instead. 61 62- [Optimize code generation when used on enums.](https://github.com/taiki-e/pin-project/pull/270) 63 64- [Raise the minimum supported Rust version of this crate from Rust 1.34 to Rust 1.37.](https://github.com/taiki-e/pin-project/pull/292) 65 66- Suppress `explicit_outlives_requirements`, `box_pointers`, `clippy::large_enum_variant`, `clippy::pattern_type_mismatch`, `clippy::implicit_return`, and `clippy::redundant_pub_crate` lints in generated code. ([#276](https://github.com/taiki-e/pin-project/pull/276), [#277](https://github.com/taiki-e/pin-project/pull/277), [#284](https://github.com/taiki-e/pin-project/pull/284)) 67 68- Diagnostic improvements. 69 70Changes since the 1.0.0-alpha.1 release: 71 72- [Fix drop order of pinned fields in `project_replace`.](https://github.com/taiki-e/pin-project/pull/287) 73 74- Update minimal version of `syn` to 1.0.44 75 76## [1.0.0-alpha.1] - 2020-09-22 77 78- [Remove deprecated `#[project]`, `#[project_ref]`, and `#[project_replace]` attributes.](https://github.com/taiki-e/pin-project/pull/265) 79 80 Name the projected type by passing an argument with the same name as the method to the `#[pin_project]` attribute instead: 81 82 ```diff 83 - #[pin_project] 84 + #[pin_project(project = EnumProj)] 85 enum Enum<T> { 86 Variant(#[pin] T), 87 } 88 89 - #[project] 90 fn func<T>(x: Pin<&mut Enum<T>>) { 91 - #[project] 92 match x.project() { 93 - Enum::Variant(_) => { /* ... */ } 94 + EnumProj::Variant(_) => { /* ... */ } 95 } 96 } 97 ``` 98 99- [Remove deprecated `Replace` argument from `#[pin_project]` attribute.](https://github.com/taiki-e/pin-project/pull/266) Use `project_replace` argument instead. 100 101- [Optimize code generation when used on enums.](https://github.com/taiki-e/pin-project/pull/270) 102 103- Suppress `explicit_outlives_requirements`, `box_pointers`, `clippy::large_enum_variant`, `clippy::pattern_type_mismatch`, and `clippy::implicit_return` lints in generated code. ([#276](https://github.com/taiki-e/pin-project/pull/276), [#277](https://github.com/taiki-e/pin-project/pull/277)) 104 105- Diagnostic improvements. 106 107See also [tracking issue for 1.0 release](https://github.com/taiki-e/pin-project/issues/264). 108 109## [0.4.27] - 2020-10-11 110 111- Update minimal version of `syn` to 1.0.44 112 113## [0.4.26] - 2020-10-04 114 115- [Fix drop order of pinned fields in `project_replace`.](https://github.com/taiki-e/pin-project/pull/287) 116 117## [0.4.25] - 2020-10-01 118 119- [Suppress `drop_bounds` lint, which will be added to rustc in the future.](https://github.com/taiki-e/pin-project/pull/273) See [#272](https://github.com/taiki-e/pin-project/issues/272) for more details. 120 121 (Note: 1.0.0-alpha.1 already contains this change.) 122 123## [0.4.24] - 2020-09-26 124 125- [Fix compatibility of generated code with `forbid(future_incompatible)`.](https://github.com/taiki-e/pin-project/pull/282) 126 127 Note: This does not guarantee compatibility with `forbid(future_incompatible)` in the future. 128 If rustc adds a new lint, we may not be able to keep this. 129 130## [0.4.23] - 2020-07-27 131 132- [Fix compile error with `?Sized` type parameters.](https://github.com/taiki-e/pin-project/pull/263) 133 134## [0.4.22] - 2020-06-14 135 136- Documentation improvements. 137 138## [0.4.21] - 2020-06-13 139 140- [Deprecated `#[project]`, `#[project_ref]`, and `#[project_replace]` attributes due to some unfixable limitations.](https://github.com/taiki-e/pin-project/pull/244) 141 142 Consider naming the projected type by passing an argument with the same name as the method to the `#[pin_project]` attribute instead. 143 144 ```rust 145 #[pin_project(project = EnumProj)] 146 enum Enum<T> { 147 Variant(#[pin] T), 148 } 149 150 fn func<T>(x: Pin<&mut Enum<T>>) { 151 match x.project() { 152 EnumProj::Variant(y) => { 153 let _: Pin<&mut T> = y; 154 } 155 } 156 } 157 ``` 158 159 See [#225](https://github.com/taiki-e/pin-project/pull/225) for more details. 160 161- [Support `Self` in fields and generics in type definitions.](https://github.com/taiki-e/pin-project/pull/245) 162 163- [Fix errors involving *"`self` value is a keyword only available in methods with `self` parameter"* in apparently correct code.](https://github.com/taiki-e/pin-project/pull/250) 164 165- Diagnostic improvements. 166 167## [0.4.20] - 2020-06-07 168 169- [You can now use `project_replace` argument without Replace argument.](https://github.com/taiki-e/pin-project/pull/243) 170 This used to require you to specify both. 171 172 ```diff 173 - #[pin_project(Replace, project_replace = EnumProjOwn)] 174 + #[pin_project(project_replace = EnumProjOwn)] 175 enum Enum<T> { 176 Variant(#[pin] T) 177 } 178 ``` 179 180- [Makes `project_replace` argument an alias for `Replace` argument so that it can be used without a value.](https://github.com/taiki-e/pin-project/pull/243) 181 182 ```rust 183 #[pin_project(project_replace)] 184 enum Enum<T> { 185 Variant(#[pin] T) 186 } 187 ``` 188 189 *The `Replace` argument will be deprecated in the future.* 190 191- [Suppress `unreachable_pub` lint in generated code.](https://github.com/taiki-e/pin-project/pull/240) 192 193## [0.4.19] - 2020-06-04 194 195- [Suppress `unused_results` lint in generated code.](https://github.com/taiki-e/pin-project/pull/239) 196 197## [0.4.18] - 2020-06-04 198 199- [Support `Self` in more syntax positions inside `#[pinned_drop]` impl.](https://github.com/taiki-e/pin-project/pull/230) 200 201- [Suppress `clippy::type_repetition_in_bounds` and `clippy::used_underscore_binding` lints in generated code.](https://github.com/taiki-e/pin-project/pull/233) 202 203- Documentation improvements. 204 205- Diagnostic improvements. 206 207## [0.4.17] - 2020-05-18 208 209- [Support naming the projection types.](https://github.com/taiki-e/pin-project/pull/202) 210 211 By passing an argument with the same name as the method to the attribute, you can name the projection type returned from the method: 212 213 ```rust 214 #[pin_project(project = EnumProj)] 215 enum Enum<T> { 216 Variant(#[pin] T), 217 } 218 219 fn func<T>(x: Pin<&mut Enum<T>>) { 220 match x.project() { 221 EnumProj::Variant(y) => { 222 let _: Pin<&mut T> = y; 223 } 224 } 225 } 226 ``` 227 228## [0.4.16] - 2020-05-11 229 230- [Fixed an issue that users can call internal function generated by `#[pinned_drop]`.](https://github.com/taiki-e/pin-project/pull/223) 231 232## [0.4.15] - 2020-05-10 233 234- [`#[project]` attribute can now handle all `project*` attributes in that scope with one wrapper attribute.](https://github.com/taiki-e/pin-project/pull/220) 235 236## [0.4.14] - 2020-05-09 237 238- [Added `!Unpin` option to `#[pin_project]` attribute for guarantee the type is `!Unpin`.](https://github.com/taiki-e/pin-project/pull/219) 239 240 ```rust 241 #[pin_project(!Unpin)] 242 struct Struct<T, U> { 243 field: T, 244 } 245 ``` 246 247 This is equivalent to use `#[pin]` attribute for `PhantomPinned` field. 248 249 ```rust 250 #[pin_project] 251 struct Struct<T, U> { 252 field: T, 253 #[pin] // Note that using `PhantomPinned` without `#[pin]` attribute has no effect. 254 _pin: PhantomPinned, 255 } 256 ``` 257 258 *[Note: This raises the minimum supported Rust version of this crate from Rust 1.33 to Rust 1.34.](https://github.com/taiki-e/pin-project/pull/219#pullrequestreview-408644187)* 259 260- [Fixed an issue where duplicate `#[project]` attributes were ignored.](https://github.com/taiki-e/pin-project/pull/218) 261 262- [Suppress `single_use_lifetimes` lint in generated code.](https://github.com/taiki-e/pin-project/pull/217) 263 264- [Support overlapping lifetime names in HRTB.](https://github.com/taiki-e/pin-project/pull/217) 265 266- [Hide generated items from --document-private-items.](https://github.com/taiki-e/pin-project/pull/211) See [#211](https://github.com/taiki-e/pin-project/pull/211) for details. 267 268- Documentation improvements. 269 270## [0.4.13] - 2020-05-07 271 272- [Fixed a regression in 0.4.11.](https://github.com/taiki-e/pin-project/pull/207) 273 274 Changes from [0.4.10](https://github.com/taiki-e/pin-project/releases/tag/v0.4.10) and [0.4.12](https://github.com/taiki-e/pin-project/releases/tag/v0.4.12): 275 276 - [Fixed an issue that `#[project]` on non-statement expression does not work without unstable features.](https://github.com/taiki-e/pin-project/pull/197) 277 278 - [Support overwriting the name of core crate.](https://github.com/taiki-e/pin-project/pull/199) 279 280 - [Suppress `clippy::needless_pass_by_value` lint in generated code of `#[pinned_drop]`.](https://github.com/taiki-e/pin-project/pull/200) 281 282 - Documentation improvements. 283 284 - Diagnostic improvements. 285 286## [0.4.12] - 2020-05-07 287 288- A release to avoid [a regression in 0.4.11](https://github.com/taiki-e/pin-project/issues/206). No code changes from [0.4.10](https://github.com/taiki-e/pin-project/releases/tag/v0.4.10). 289 290## [0.4.11] - 2020-05-07 291 292**Note: This release has been yanked.** See [#206](https://github.com/taiki-e/pin-project/issues/206) for details. 293 294- [Fixed an issue that `#[project]` on non-statement expression does not work without unstable features.](https://github.com/taiki-e/pin-project/pull/197) 295 296- [Support overwriting the name of core crate.](https://github.com/taiki-e/pin-project/pull/199) 297 298- [Suppress `clippy::needless_pass_by_value` lint in generated code of `#[pinned_drop]`.](https://github.com/taiki-e/pin-project/pull/200) 299 300- Documentation improvements. 301 302- Diagnostic improvements. 303 304## [0.4.10] - 2020-05-04 305 306- [Added `project_replace` method and `#[project_replace]` attribute.](https://github.com/taiki-e/pin-project/pull/194) 307 `project_replace` method is optional and can be enabled by passing the `Replace` argument to `#[pin_project]` attribute. 308 See [the documentation](https://docs.rs/pin-project/0.4/pin_project/attr.pin_project.html#project_replace) for more details. 309 310- [Support `Self` and `self` in more syntax positions inside `#[pinned_drop]` impl.](https://github.com/taiki-e/pin-project/pull/190) 311 312- [Hided all generated items except for projected types from calling code.](https://github.com/taiki-e/pin-project/pull/192) See [#192](https://github.com/taiki-e/pin-project/pull/192) for details. 313 314## [0.4.9] - 2020-04-14 315 316- [Fixed lifetime inference error when associated types are used in fields.](https://github.com/taiki-e/pin-project/pull/188) 317 318- [Fixed compile error with tuple structs with `where` clauses.](https://github.com/taiki-e/pin-project/pull/186) 319 320- [`#[project]` attribute can now be used for `if let` expressions.](https://github.com/taiki-e/pin-project/pull/181) 321 322## [0.4.8] - 2020-01-27 323 324- [Ensured that users cannot implement `PinnedDrop` without proper attribute argument.](https://github.com/taiki-e/pin-project/pull/180) 325 326- [Fixed use of `Self` in expression position inside `#[pinned_drop]` impl.](https://github.com/taiki-e/pin-project/pull/177) 327 328## [0.4.7] - 2020-01-20 329 330- [Fixed support for lifetime bounds.](https://github.com/taiki-e/pin-project/pull/176) 331 332## [0.4.6] - 2019-11-20 333 334- [Fixed compile error when there is `Self` in the where clause.](https://github.com/taiki-e/pin-project/pull/169) 335 336## [0.4.5] - 2019-10-21 337 338- [Fixed compile error with `dyn` types.](https://github.com/taiki-e/pin-project/pull/158) 339 340## [0.4.4] - 2019-10-17 341 342- [Fixed an issue where `PinnedDrop` implementations can call unsafe code without an unsafe block.](https://github.com/taiki-e/pin-project/pull/149) 343 344## [0.4.3] - 2019-10-15 345 346**Note: This release has been yanked.** See [#148](https://github.com/taiki-e/pin-project/pull/148) for details. 347 348- [`#[pin_project]` can now interoperate with `#[cfg_attr()]`.](https://github.com/taiki-e/pin-project/pull/135) 349 350- [`#[pin_project]` can now interoperate with `#[cfg()]` on tuple structs and tuple variants.](https://github.com/taiki-e/pin-project/pull/135) 351 352- [Fixed support for DSTs(Dynamically Sized Types) on `#[pin_project(UnsafeUnpin)]`](https://github.com/taiki-e/pin-project/pull/120) 353 354- Diagnostic improvements. 355 356## [0.4.2] - 2019-09-29 357 358**Note: This release has been yanked.** See [#148](https://github.com/taiki-e/pin-project/pull/148) for details. 359 360- [Fixed support for DSTs(Dynamically Sized Types).](https://github.com/taiki-e/pin-project/pull/113) 361 362## [0.4.1] - 2019-09-26 363 364**Note: This release has been yanked.** See [#148](https://github.com/taiki-e/pin-project/pull/148) for details. 365 366- [Fixed an issue that caused an error when using `#[pin_project]` on a type that has `#[pin]` + `!Unpin` field with no generics or lifetime.](https://github.com/taiki-e/pin-project/pull/111) 367 368## [0.4.0] - 2019-09-25 369 370**Note: This release has been yanked.** See [#148](https://github.com/taiki-e/pin-project/pull/148) for details. 371 372- [**Pin projection has become a safe operation.**](https://github.com/taiki-e/pin-project/pull/18) In the absence of other unsafe code that you write, it is impossible to cause undefined behavior. 373 374- `#[unsafe_project]` attribute has been replaced with `#[pin_project]` attribute. ([#18](https://github.com/taiki-e/pin-project/pull/18), [#33](https://github.com/taiki-e/pin-project/pull/33)) 375 376- [The `Unpin` argument has been removed - an `Unpin` impl is now generated by default.](https://github.com/taiki-e/pin-project/pull/18) 377 378- Drop impls must be specified with `#[pinned_drop]` instead of via a normal `Drop` impl. ([#18](https://github.com/taiki-e/pin-project/pull/18), [#33](https://github.com/taiki-e/pin-project/pull/33), [#86](https://github.com/taiki-e/pin-project/pull/86)) 379 380- [`Unpin` impls must be specified with an impl of `UnsafeUnpin`, instead of implementing the normal `Unpin` trait.](https://github.com/taiki-e/pin-project/pull/18) 381 382- [`#[pin_project]` attribute now determines the visibility of the projection type/method is based on the original type.](https://github.com/taiki-e/pin-project/pull/96) 383 384- [`#[pin_project]` can now be used for public type with private field types.](https://github.com/taiki-e/pin-project/pull/53) 385 386- [`#[pin_project]` can now interoperate with `#[cfg()]`.](https://github.com/taiki-e/pin-project/pull/77) 387 388- [Added `project_ref` method to `#[pin_project]` types.](https://github.com/taiki-e/pin-project/pull/93) 389 390- [Added `#[project_ref]` attribute.](https://github.com/taiki-e/pin-project/pull/93) 391 392- [Removed "project_attr" feature and always enable `#[project]` attribute.](https://github.com/taiki-e/pin-project/pull/94) 393 394- [`#[project]` attribute can now be used for `impl` blocks.](https://github.com/taiki-e/pin-project/pull/46) 395 396- [`#[project]` attribute can now be used for `use` statements.](https://github.com/taiki-e/pin-project/pull/85) 397 398- [`#[project]` attribute now supports `match` expressions at the position of the initializer expression of `let` expressions.](https://github.com/taiki-e/pin-project/pull/51) 399 400Changes since the 0.4.0-beta.1 release: 401 402- [Fixed an issue that caused an error when using `#[pin_project(UnsafeUnpin)]` and not providing a manual `UnsafeUnpin` implementation on a type with no generics or lifetime.](https://github.com/taiki-e/pin-project/pull/107) 403 404## [0.4.0-beta.1] - 2019-09-21 405 406- [Changed the argument type of project method back to `self: Pin<&mut Self>`.](https://github.com/taiki-e/pin-project/pull/90) 407 408- [Removed "project_attr" feature and always enable `#[project]` attribute.](https://github.com/taiki-e/pin-project/pull/94) 409 410- [Removed "renamed" feature.](https://github.com/taiki-e/pin-project/pull/100) 411 412- [`#[project]` attribute can now be used for `use` statements.](https://github.com/taiki-e/pin-project/pull/85) 413 414- [Added `project_ref` method and `#[project_ref]` attribute.](https://github.com/taiki-e/pin-project/pull/93) 415 416- [`#[pin_project]` attribute now determines the visibility of the projection type/method is based on the original type.](https://github.com/taiki-e/pin-project/pull/96) 417 418## [0.4.0-alpha.11] - 2019-09-11 419 420- [Changed #[pinned_drop] to trait implementation.](https://github.com/taiki-e/pin-project/pull/86) 421 422 ```rust 423 #[pinned_drop] 424 impl<T> PinnedDrop for Foo<'_, T> { 425 fn drop(mut self: Pin<&mut Self>) { 426 **self.project().was_dropped = true; 427 } 428 } 429 ``` 430 431- Added some examples and generated code. 432 433- Diagnostic improvements. 434 435## [0.4.0-alpha.10] - 2019-09-07 436 437- [`#[pin_project]` can now interoperate with `#[cfg()]`.](https://github.com/taiki-e/pin-project/pull/77) 438 439- Documentation improvements. 440 441## [0.4.0-alpha.9] - 2019-09-05 442 443- [Added 'project_into' method to `#[pin_project]` types](https://github.com/taiki-e/pin-project/pull/69). This can be useful when returning a pin projection from a method. 444 445 ```rust 446 fn get_pin_mut(self: Pin<&mut Self>) -> Pin<&mut T> { 447 self.project_into().pinned 448 } 449 ``` 450 451- [Prevented UnpinStruct from appearing in the document by default.](https://github.com/taiki-e/pin-project/pull/71) See [#71](https://github.com/taiki-e/pin-project/pull/71) for more details. 452 453## [0.4.0-alpha.8] - 2019-09-03 454 455- [Improved document of generated code.](https://github.com/taiki-e/pin-project/pull/62). Also added an option to control the document of generated code. See [#62](https://github.com/taiki-e/pin-project/pull/62) for more details. 456 457- [Diagnostic improvements.](https://github.com/taiki-e/pin-project/pull/61) 458 459## [0.4.0-alpha.7] - 2019-09-02 460 461- [Suppress `dead_code` lint in generated types.](https://github.com/taiki-e/pin-project/pull/57) 462 463## [0.4.0-alpha.6] - 2019-09-01 464 465- [Allowed using `#[pin_project]` type with private field types](https://github.com/taiki-e/pin-project/pull/53) 466 467## [0.4.0-alpha.5] - 2019-08-24 468 469- [`#[project]` attribute now supports `match` expressions at the position of the initializer expression of `let` expressions.](https://github.com/taiki-e/pin-project/pull/51) 470 471## [0.4.0-alpha.4] - 2019-08-23 472 473- Suppress `clippy::drop_bounds` lint in generated code. 474 475## [0.4.0-alpha.3] - 2019-08-23 476 477- [Changed `project` method generated by `#[pin_project]` attribute to take an `&mut Pin<&mut Self>` argument.](https://github.com/taiki-e/pin-project/pull/47) 478 479- [`#[project]` attribute can now be used for impl blocks.](https://github.com/taiki-e/pin-project/pull/46) 480 481- [`#[pin_project]` attribute can now detect that the type used does not have its own drop implementation without actually implementing drop.](https://github.com/taiki-e/pin-project/pull/48) This removed some restrictions. 482 483## [0.4.0-alpha.2] - 2019-08-13 484 485- Updated `proc-macro2`, `syn`, and `quote` to 1.0. 486 487## [0.4.0-alpha.1] - 2019-08-11 488 489- **Pin projection has become a safe operation.** 490 491- `#[unsafe_project]` has been replaced with `#[pin_project]`. 492 493- The `Unpin` argument has been removed - an `Unpin` impl is now generated by default. 494 495- Drop impls must be specified with `#[pinned_drop]` instead of via a normal `Drop` impl. 496 497- `Unpin` impls must be specified with an impl of `UnsafeUnpin`, instead of implementing the normal `Unpin` trait. 498 499- Made `#[project]` attribute disabled by default. 500 501See also [tracking issue for 0.4 release](https://github.com/taiki-e/pin-project/issues/21). 502 503## [0.3.5] - 2019-08-14 504 505- Updated `proc-macro2`, `syn`, and `quote` to 1.0. 506 507## [0.3.4] - 2019-07-21 508 509- Diagnostic improvements. 510 511## [0.3.3] - 2019-07-15 512 513**Note: This release has been yanked.** See [#16](https://github.com/taiki-e/pin-project/issues/16) for details. 514 515- Diagnostic improvements. 516 517## [0.3.2] - 2019-03-30 518 519- Avoided suffixes on tuple index. 520 521## [0.3.1] - 2019-03-02 522 523- Documentation improvements. 524 525- Updated minimum `syn` version to 0.15.22. 526 527## [0.3.0] - 2019-02-20 528 529- Removed `unsafe_fields` attribute. 530 531- Removed `unsafe_variants` attribute. 532 533## [0.2.2] - 2019-02-20 534 535- Fixed a bug that generates incorrect code for the some structures with trait bounds on type generics. 536 537## [0.2.1] - 2019-02-20 538 539- Fixed a bug that generates incorrect code for the structures with where clause and associated type fields. 540 541## [0.2.0] - 2019-02-11 542 543- Made `unsafe_fields` optional. 544 545- Documentation improvements. 546 547## [0.1.8] - 2019-02-02 548 549- Added the feature to create projected enums to `unsafe_project`. 550 551- Added `project` attribute to support pattern matching. 552 553## [0.1.7] - 2019-01-19 554 555- Fixed documentation. 556 557## [0.1.6] - 2019-01-19 558 559- `unsafe_fields` can now opt-out. 560 561- Added `unsafe_variants` attribute. This attribute is available if pin-project is built with the "unsafe_variants" feature. 562 563## [0.1.5] - 2019-01-17 564 565- Added support for tuple struct to `unsafe_project`. 566 567## [0.1.4] - 2019-01-12 568 569- Added options for automatically implementing `Unpin` to both `unsafe_project` and `unsafe_fields`. 570 571## [0.1.3] - 2019-01-11 572 573- Fixed dependencies. 574 575- Added `unsafe_fields` attribute. 576 577## [0.1.2] - 2019-01-09 578 579- Documentation improvements. 580 581## [0.1.1] - 2019-01-08 582 583- Renamed from `unsafe_pin_project` to `unsafe_project`. 584 585## [0.1.0] - 2019-01-08 586 587**Note: This release has been yanked.** 588 589Initial release 590 591[Unreleased]: https://github.com/taiki-e/pin-project/compare/v1.0.6...HEAD 592[1.0.6]: https://github.com/taiki-e/pin-project/compare/v1.0.5...v1.0.6 593[1.0.5]: https://github.com/taiki-e/pin-project/compare/v1.0.4...v1.0.5 594[1.0.4]: https://github.com/taiki-e/pin-project/compare/v1.0.3...v1.0.4 595[1.0.3]: https://github.com/taiki-e/pin-project/compare/v1.0.2...v1.0.3 596[1.0.2]: https://github.com/taiki-e/pin-project/compare/v1.0.1...v1.0.2 597[1.0.1]: https://github.com/taiki-e/pin-project/compare/v1.0.0...v1.0.1 598[1.0.0]: https://github.com/taiki-e/pin-project/compare/v1.0.0-alpha.1...v1.0.0 599[1.0.0-alpha.1]: https://github.com/taiki-e/pin-project/compare/v0.4.23...v1.0.0-alpha.1 600[0.4.27]: https://github.com/taiki-e/pin-project/compare/v0.4.26...v0.4.27 601[0.4.26]: https://github.com/taiki-e/pin-project/compare/v0.4.25...v0.4.26 602[0.4.25]: https://github.com/taiki-e/pin-project/compare/v0.4.24...v0.4.25 603[0.4.24]: https://github.com/taiki-e/pin-project/compare/v0.4.23...v0.4.24 604[0.4.23]: https://github.com/taiki-e/pin-project/compare/v0.4.22...v0.4.23 605[0.4.22]: https://github.com/taiki-e/pin-project/compare/v0.4.21...v0.4.22 606[0.4.21]: https://github.com/taiki-e/pin-project/compare/v0.4.20...v0.4.21 607[0.4.20]: https://github.com/taiki-e/pin-project/compare/v0.4.19...v0.4.20 608[0.4.19]: https://github.com/taiki-e/pin-project/compare/v0.4.18...v0.4.19 609[0.4.18]: https://github.com/taiki-e/pin-project/compare/v0.4.17...v0.4.18 610[0.4.17]: https://github.com/taiki-e/pin-project/compare/v0.4.16...v0.4.17 611[0.4.16]: https://github.com/taiki-e/pin-project/compare/v0.4.15...v0.4.16 612[0.4.15]: https://github.com/taiki-e/pin-project/compare/v0.4.14...v0.4.15 613[0.4.14]: https://github.com/taiki-e/pin-project/compare/v0.4.13...v0.4.14 614[0.4.13]: https://github.com/taiki-e/pin-project/compare/v0.4.11...v0.4.13 615[0.4.12]: https://github.com/taiki-e/pin-project/compare/v0.4.10...v0.4.12 616[0.4.11]: https://github.com/taiki-e/pin-project/compare/v0.4.10...v0.4.11 617[0.4.10]: https://github.com/taiki-e/pin-project/compare/v0.4.9...v0.4.10 618[0.4.9]: https://github.com/taiki-e/pin-project/compare/v0.4.8...v0.4.9 619[0.4.8]: https://github.com/taiki-e/pin-project/compare/v0.4.7...v0.4.8 620[0.4.7]: https://github.com/taiki-e/pin-project/compare/v0.4.6...v0.4.7 621[0.4.6]: https://github.com/taiki-e/pin-project/compare/v0.4.5...v0.4.6 622[0.4.5]: https://github.com/taiki-e/pin-project/compare/v0.4.4...v0.4.5 623[0.4.4]: https://github.com/taiki-e/pin-project/compare/v0.4.3...v0.4.4 624[0.4.3]: https://github.com/taiki-e/pin-project/compare/v0.4.2...v0.4.3 625[0.4.2]: https://github.com/taiki-e/pin-project/compare/v0.4.1...v0.4.2 626[0.4.1]: https://github.com/taiki-e/pin-project/compare/v0.4.0...v0.4.1 627[0.4.0]: https://github.com/taiki-e/pin-project/compare/v0.4.0-beta.1...v0.4.0 628[0.4.0-beta.1]: https://github.com/taiki-e/pin-project/compare/v0.4.0-alpha.11...v0.4.0-beta.1 629[0.4.0-alpha.11]: https://github.com/taiki-e/pin-project/compare/v0.4.0-alpha.10...v0.4.0-alpha.11 630[0.4.0-alpha.10]: https://github.com/taiki-e/pin-project/compare/v0.4.0-alpha.9...v0.4.0-alpha.10 631[0.4.0-alpha.9]: https://github.com/taiki-e/pin-project/compare/v0.4.0-alpha.8...v0.4.0-alpha.9 632[0.4.0-alpha.8]: https://github.com/taiki-e/pin-project/compare/v0.4.0-alpha.7...v0.4.0-alpha.8 633[0.4.0-alpha.7]: https://github.com/taiki-e/pin-project/compare/v0.4.0-alpha.6...v0.4.0-alpha.7 634[0.4.0-alpha.6]: https://github.com/taiki-e/pin-project/compare/v0.4.0-alpha.5...v0.4.0-alpha.6 635[0.4.0-alpha.5]: https://github.com/taiki-e/pin-project/compare/v0.4.0-alpha.4...v0.4.0-alpha.5 636[0.4.0-alpha.4]: https://github.com/taiki-e/pin-project/compare/v0.4.0-alpha.3...v0.4.0-alpha.4 637[0.4.0-alpha.3]: https://github.com/taiki-e/pin-project/compare/v0.4.0-alpha.2...v0.4.0-alpha.3 638[0.4.0-alpha.2]: https://github.com/taiki-e/pin-project/compare/v0.4.0-alpha.1...v0.4.0-alpha.2 639[0.4.0-alpha.1]: https://github.com/taiki-e/pin-project/compare/v0.3.5...v0.4.0-alpha.1 640[0.3.5]: https://github.com/taiki-e/pin-project/compare/v0.3.4...v0.3.5 641[0.3.4]: https://github.com/taiki-e/pin-project/compare/v0.3.3...v0.3.4 642[0.3.3]: https://github.com/taiki-e/pin-project/compare/v0.3.2...v0.3.3 643[0.3.2]: https://github.com/taiki-e/pin-project/compare/v0.3.1...v0.3.2 644[0.3.1]: https://github.com/taiki-e/pin-project/compare/v0.3.0...v0.3.1 645[0.3.0]: https://github.com/taiki-e/pin-project/compare/v0.2.2...v0.3.0 646[0.2.2]: https://github.com/taiki-e/pin-project/compare/v0.2.1...v0.2.2 647[0.2.1]: https://github.com/taiki-e/pin-project/compare/v0.2.0...v0.2.1 648[0.2.0]: https://github.com/taiki-e/pin-project/compare/v0.1.8...v0.2.0 649[0.1.8]: https://github.com/taiki-e/pin-project/compare/v0.1.7...v0.1.8 650[0.1.7]: https://github.com/taiki-e/pin-project/compare/v0.1.6...v0.1.7 651[0.1.6]: https://github.com/taiki-e/pin-project/compare/v0.1.5...v0.1.6 652[0.1.5]: https://github.com/taiki-e/pin-project/compare/v0.1.4...v0.1.5 653[0.1.4]: https://github.com/taiki-e/pin-project/compare/v0.1.3...v0.1.4 654[0.1.3]: https://github.com/taiki-e/pin-project/compare/v0.1.2...v0.1.3 655[0.1.2]: https://github.com/taiki-e/pin-project/compare/v0.1.1...v0.1.2 656[0.1.1]: https://github.com/taiki-e/pin-project/compare/v0.1.0...v0.1.1 657[0.1.0]: https://github.com/taiki-e/pin-project/releases/tag/v0.1.0 658