rusty_ulid 2.0.0

Rust ULID (Universally Unique Lexicographically Sortable Identifier) generation and processing
Documentation
# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).

## [Unreleased][unreleased]

## [2.0.0] - 2023-01-28
### Added
- optional support for `schemars` and `rocket`. Thanks to [Rinat Shigapov]https://github.com/DXist for the contribution!

### Changed
- minimal Rust version is now 1.60.0
- moved `doc-comment` to `[dev-dependencies]` by using `cfg(doctest)` (see [cfg(doctest) is stable and you should use it]https://blog.guillaume-gomez.fr/articles/2020-03-07+cfg%28doctest%29+is+stable+and+you+should+use+it)
- `cargo update`
- switched default dependency from `chrono` to `time`
- prefer `time` over `chrono` to obtain current time if both dependencies are enabled.
- added `#[must_use]` to `ulid.offsetdatetime()`.
- fix executable to work with either `chrono` or `time`.

### Removed
- `ulid-generation` and `ulid-generation-time` dependency sets

## [1.0.0] - 2022-01-22
### Added
- optionally use `time` instead of `chrono`. Thanks to [tyhi]https://github.com/tyhi for the contribution!
### Changed
- minimum supported Rust version is now 1.56
- `cargo update`
- edition = “2021”

## [0.11.0] - 2021-07-04
### Changed
- minimum supported Rust version is now 1.41.0
- `cargo update`

## [0.10.1] - 2021-01-25
### Changed
- `cargo update`

### Removed
- dependency on `time 0.1` by disabling `oldclock` feature of `chrono` crate

## [0.10.0] - 2020-08-23
### Added
- support postprocessing of monotonic ULID values
    - `next_monotonic_from_timestamp_with_rng_and_postprocessor`
    - `next_strictly_monotonic_from_timestamp_with_rng_and_postrocessor`

### Changed
- `cargo update`
- Requires Rust 1.40 or later

## [0.9.3] - 2020-02-24
### Changed
- `cargo update`

### Fixed
- [`#![deny(warnings)]`]https://github.com/rust-unofficial/patterns/blob/main/anti_patterns/deny-warnings.md anti-pattern

## [0.9.2] - 2020-01-10
### Changed
- criterion 0.3
- `cargo update`

### Removed
- test of deprecated function result to fix build on 1.42-nightly

## [0.9.1] - 2019-08-17
### Added
- [Rust Safety Dance]https://github.com/rust-secure-code/safety-dance link
- fuzzing

### Changed
- rand 0.7
- minor `Display` performance improvement

## [0.9.0] - 2019-04-25
### Added
- test code in `README.md` using [doc-comment]https://crates.io/crates/doc-comment
- `impl TryFrom<&[u8]> for Ulid`
- [Miri]https://github.com/rust-lang/miri/ support

### Changed
- all dependencies are now optional but enabled by default

### Removed
- `Ulid::from_slice(&[u8])` in favor of `impl TryFrom<&[u8]> for Ulid`


## [0.8.0] - 2019-03-18
### Added
- `Ulid::from_slice(&[u8])`
- optional serde support

## [0.7.0] - 2018-12-07
### Changed
- edition = “2018”
- rand 0.6.1

## [0.6.1] - 2018-11-16
### Changed
- rand 0.6.0

## [0.6.0] - 2018-10-24
### Added
- derive `Copy` for `Ulid`.

### Changed
- renamed `Ulid::new()` to `Ulid::generate()`.
- renamed `new_ulid_string()` to `generate_ulid_string()`.
- renamed `new_ulid_bytes()` to `generate_ulid_bytes()`.

### Removed
- derive `Default` for `Ulid`.

## [0.5.0] - 2018-08-09
### Added
- support for monotonic ULID values. See `next_monotonic` and `next_strictly_monotonic`.

### Changed
- updated dependencies.

## [0.4.1] - 2018-07-02
### Changed
- `description()` of `DecodingError` is now returning deprecation message like Rust 1.27.

## [0.4.0] - 2018-05-23
### Added
- `append_crockford_u64_tuple` and `parse_crockford_u64_tuple`.

### Changed
- A `Ulid` is now using a private `(u64, u64)` instead of being a `u128`. This is a non-breaking change.
- Using `rand 0.5.0` dependency.
- `append_crockford_u128` appends exactly 26 characters.
- `parse_crockford_u128` requires exactly 26 characters.

### Removed
- `append_crockford_u64` and `parse_crockford_u64`.

### Fixed
- Performance regression. This version is faster than `0.2.0`, even with `rand 0.4.2`.

## [0.3.0] - 2018-05-12
### Added
- Conversion of `Ulid` to and from `u128`.
- `append_crockford_u128` and `parse_crockford_u128`.
- `parse()` quickstart example.
- Derived `Ord`, `Eq` and `Hash` traits for `Ulid`.
- Proper `rusty_ulid` executable functionality including example usage documentation.
- Apache-2.0 license. This crate is now dual-licensed.

### Changed
- A `Ulid` is now using an `u128` instead of being a `(u64, u64)`. This is a breaking change
  if you previously accessed the tuple elements directly.
- `DecodingError::InvalidChar` now contains a `char` instead of `Option<char>`.
- `append_crockford` was renamed to `append_crockford_u64`.
- `parse_crockford` was renamed to `parse_crockford_u64`.
- Panic message is now using proper ISO 8601 formatting for overflow datetime
  `+10889-08-02T05:31:50.655Z`.

### Removed
- `Copy` trait from `Ulid`.

## [0.2.1] - 2018-04-10
### Fixed
- Documentation test of `Ulid::from_timestamp_with_rng`.

## [0.2.0] - 2018-04-10
### Added
- This changelog.
- Some criterion benchmarks. Run the benchmarks by executing `cargo bench`.
- `DecodingError::DataTypeOverflow` that is used by `parse_crockford` and
  `Ulid::from_str` to indicate an overflow. Overflow means that the given string
  contains more bits than the respective data type could handle.

### Changed
- `parse_crockford` can now parse strings of length 13 if they don't cause an `u64`
  overflow. This means that `FZZZZZZZZZZZZ` can still be parsed but `G000000000000` will
  cause a `DecodingError::DataTypeOverflow`.  
  Strings of length 14 or more still result in `DecodingError::InvalidLength`.
- `Ulid::from_str` is now returning properly detecting timestamp overflows. This means
  that `7ZZZZZZZZZZZZZZZZZZZZZZZZZ` can still be parsed but `80000000000000000000000000`
  will cause a `DecodingError::DataTypeOverflow`.  
  Strings of length different than 26 still result in `DecodingError::InvalidLength`.
- `Ulid::from_timestamp_with_rng` will now panic if `timestamp` is bigger than
  `0xFFFF_FFFF_FFFF`.  
  This means that `Ulid::new()` will start to panic after `+10889-08-02T05:31:50.655Z`.  
  `#Y10889Bug`

## [0.1.0] - 2018-04-09
### Added
- Everything. This was the initial release.

[unreleased]: https://github.com/huxi/rusty_ulid/compare/2.0.0...HEAD
[2.0.0]: https://github.com/huxi/rusty_ulid/compare/1.0.0...2.0.0
[1.0.0]: https://github.com/huxi/rusty_ulid/compare/0.11.0...1.0.0
[0.11.0]: https://github.com/huxi/rusty_ulid/compare/0.10.1...0.11.0
[0.10.1]: https://github.com/huxi/rusty_ulid/compare/0.10.0...0.10.1
[0.10.0]: https://github.com/huxi/rusty_ulid/compare/0.9.3...0.10.0
[0.9.3]: https://github.com/huxi/rusty_ulid/compare/0.9.2...0.9.3
[0.9.2]: https://github.com/huxi/rusty_ulid/compare/0.9.1...0.9.2
[0.9.1]: https://github.com/huxi/rusty_ulid/compare/0.9.0...0.9.1
[0.9.0]: https://github.com/huxi/rusty_ulid/compare/0.8.0...0.9.0
[0.8.0]: https://github.com/huxi/rusty_ulid/compare/0.7.0...0.8.0
[0.7.0]: https://github.com/huxi/rusty_ulid/compare/0.6.1...0.7.0
[0.6.1]: https://github.com/huxi/rusty_ulid/compare/0.6.0...0.6.1
[0.6.0]: https://github.com/huxi/rusty_ulid/compare/0.5.0...0.6.0
[0.5.0]: https://github.com/huxi/rusty_ulid/compare/0.4.1...0.5.0
[0.4.1]: https://github.com/huxi/rusty_ulid/compare/0.4.0...0.4.1
[0.4.0]: https://github.com/huxi/rusty_ulid/compare/0.3.0...0.4.0
[0.3.0]: https://github.com/huxi/rusty_ulid/compare/0.2.1...0.3.0
[0.2.1]: https://github.com/huxi/rusty_ulid/compare/0.2.0...0.2.1
[0.2.0]: https://github.com/huxi/rusty_ulid/compare/0.1.0...0.2.0
[0.1.0]: https://github.com/huxi/rusty_ulid/compare/init...0.1.0