3.3.0
=====

Features:

* Replace rand with fastrand for a significantly smaller dependency tree. Cryptographic randomness
  isn't necessary for temporary file names, and isn't all that helpful either.
* Add limited WASI support.
* Add a function to extract the inner data from a `SpooledTempFile`.

Bug Fixes:

* Make it possible to persist unnamed temporary files on linux by removing the `O_EXCL` flag.
* Fix redox minimum crate version.

3.2.0
=====

Features:

* Bump rand dependency to `0.8`.
* Bump cfg-if dependency to `1.0`

Other than that, this release mostly includes small cleanups and simplifications.

Breaking: The minimum rust version is now `1.40.0`.

3.1.0
=====

Features:

* Bump rand dependency to `0.7`.

Breaking: The minimum rust version is now `1.32.0`.

3.0.9
=====

Documentation:

* Add an example for reopening a named temporary file.
* Flesh out the security documentation.

Features:

* Introduce an `append` option to the builder.
* Errors:
  * No longer implement the soft-deprecated `description`.
  * Implement `source` instead of `cause`.

Breaking: The minimum rust version is now 1.30.

3.0.8
=====

This is a bugfix release.

Fixes:

* Export `PathPersistError`.
* Fix a bug where flushing a `SpooledTempFile` to disk could fail to write part
  of the file in some rare, yet-to-reproduced cases.

3.0.7
=====

Breaking:

* `Builder::prefix` and `Builder::suffix` now accept a generic `&AsRef<OsStr>`.
  This could affect type inference.
* Temporary files (except unnamed temporary files on Windows and Linux >= 3.11)
  now use absolute path names. This will break programs that create temporary
  files relative to their current working directory when they don't have the
  search permission (x) on some ancestor directory. This is only likely to
  affect programs with strange chroot-less filesystem sandboxes. If you believe
  you're affected by this issue, please comment on #40.

Features:

* Accept anything implementing `&AsRef<OsStr>` in the builder: &OsStr, &OsString, &Path, etc.

Fixes:

* Fix LFS support.
* Use absolute paths for named temporary files to guard against changes in the
  current directory.
* Use absolute paths when creating unnamed temporary files on platforms that
  can't create unlinked or auto-deleted temporary files. This fixes a very
  unlikely race where the current directory could change while the temporary
  file is being created.

Misc:

* Use modern stdlib features to avoid custom unsafe code. This reduces the
  number of unsafe blocks from 12 to 4.

3.0.6
=====

* Don't hide temporary files on windows, fixing #66 and #69.

3.0.5
=====

Features:

* Added a spooled temporary file implementation. This temporary file variant
  starts out as an in-memory temporary file but "rolls-over" onto disk when it
  grows over a specified size (#68).
* Errors are now annotated with paths to make debugging easier (#73).

Misc:

* The rand version has been bumped to 0.6 (#74).

Bugs:

* Tempfile compiles again on Redox (#75).

3.0.4
=====

* Now compiles on unsupported platforms.

3.0.3
=====

* update rand to 0.5

3.0.2
=====

* Actually *delete* temporary files on non-Linux unix systems (thanks to
@oliverhenshaw for the fix and a test case).

3.0.1
=====

* Restore NamedTempFile::new_in

3.0.0
=====

* Adds temporary directory support (@KodrAus)
* Allow closing named temporary files without deleting them (@jasonwhite)

2.2.0
=====

* Redox Support

2.1.6
=====

* Remove build script and bump minimum rustc version to 1.9.0

2.1.5
=====

* Don't build platform-specific dependencies on all platforms.
* Cleanup some documentation.

2.1.4
=====

* Fix crates.io tags. No interesting changes.

2.1.3
=====

Export `PersistError`.

2.1.2
=====

Add `Read`/`Write`/`Seek` impls on `&NamedTempFile`. This mirrors the
implementations on `&File`. One can currently just deref to a `&File` but these
implementations are more discoverable.

2.1.1
=====

Add LFS Support.

2.1.0
=====

* Implement `AsRef<File>` for `NamedTempFile` allowing named temporary files to
  be borrowed as `File`s.
* Add a method to convert a `NamedTempFile` to an unnamed temporary `File`.

2.0.1
=====

* Arm bugfix

2.0.0
=====

This release replaces `TempFile` with a `tempfile()` function that returnes
`std::fs::File` objects. These are significantly more useful because most rust
libraries expect normal `File` objects.

To continue supporting shared temporary files, this new version adds a
`reopen()` method to `NamedTempFile`.
