sscanf 0.4.2

A sscanf (inverse of format!()) Macro based on Regex
Documentation
# Changelog

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

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

The changes and version numbers apply to both [sscanf_macro](https://crates.io/crates/sscanf_macro)
and its wrapper crate [sscanf](https://crates.io/crates/sscanf), as neither works without the other
and versions are always released in parallel.


## [0.4.2]https://github.com/mich101mich/sscanf/releases/tag/0.4.2 2024-07-21

### Fixed
- Fixed `"unused variable"` in the code generated by the derive macro
- Fixed tests on 32-bit platforms ([#10]https://github.com/mich101mich/sscanf/issues/10)

## [0.4.1]https://github.com/mich101mich/sscanf/releases/tag/0.4.1 - 2023-05-20

### Added
- More attributes for deriving [`FromScanf`]https://docs.rs/sscanf/0.4.1/sscanf/derive.FromScanf.html
  - For Fields: `filter_map` `from`, `try_from`
  - For Structs and Variants: `transparent`
  - For Enums: `autogen` (or `autogenerate`)
- [`FromScanf::from_str`]https://docs.rs/sscanf/0.4.1/sscanf/trait.FromScanf.html#method.from_str
  as a direct shortcut to do string->type conversion without calling `sscanf`
- This changelog

## [0.4.0]https://github.com/mich101mich/sscanf/releases/tag/0.4.0 - 2022-11-22

### Added
- [`FromScanf`]https://docs.rs/sscanf/0.4.0/sscanf/trait.FromScanf.html trait and
  [`FromScanf`]https://docs.rs/sscanf/0.4.0/sscanf/derive.FromScanf.html derive as a new way to
  add custom types
  - The trait should not be manually implemented. It can be obtained by deriving or as a blanket
    implementation for the previous system of `RegexRepresentation` + `FromStr`

### Changed
- Custom Regex Format Options `{:/.../}` now use a **different escape syntax**
  - Only inner `'/'` characters need to be escaped with `'\'` (in addition to the escaping of `'\'`
    itself as `'\\'` in non-raw strings), making the syntax consistent with similar applications
    like [JavaScript's regex]https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping
- `f32` and `f64` now match against their full syntax in accordance with their [`FromStr`
  implementation](https://doc.rust-lang.org/std/primitive.f32.html#impl-FromStr-for-f32). This was
  previously emulated by the [`FullF32`]https://docs.rs/sscanf/0.3.1/sscanf/struct.FullF32.html
  and [`FullF64`]https://docs.rs/sscanf/0.3.1/sscanf/struct.FullF64.html types
- The [`Error`]https://docs.rs/sscanf/0.4.0/sscanf/enum.Error.html type has been reworked
- Shadow-renamed `scanf` -> `sscanf` to be consistent with the crate name
  - 'Shadow', because the old version is still available to avoid breaking changes, it just no
    longer shows up in the documentation

### Deprecated
- [`FullF32`]https://docs.rs/sscanf/0.4.0/sscanf/struct.FullF32.html and [`FullF64`]https://docs.rs/sscanf/0.4.0/sscanf/struct.FullF64.html,
  as they no longer provide any benefit

### Removed
- The `chrono` integration

## [0.3.1]https://github.com/mich101mich/sscanf/releases/tag/0.3.1 - 2022-06-27

### Changed
- `scanf` now uses `Deref<Target=str>` instead of `AsRef<Target=str>` to capture the input
  - This should not break any existing implementations, only allow more possible inputs and provide
    better compiler errors for incorrect inputs

## [0.3.0]https://github.com/mich101mich/sscanf/releases/tag/0.3.0 - 2022-06-25

### Changed
- Significant performance improvements
- Custom implementations of [`RegexRepresentation`]https://docs.rs/sscanf/0.3.0/sscanf/trait.RegexRepresentation.html
  and regex format options `{:/.../}` can no longer use capture groups (unescaped round brackets
  `(...)`). Existing groups have to be made non-capturing by adding `?:` like this:
  `(?:...)`

## [0.2.2]https://github.com/mich101mich/sscanf/releases/tag/0.2.2 - 2022-06-25

### Changed
- Backport of some improvements from the [0.3.0]#030---2022-06-25 release above, but without the
  breaking changes to stay semver-compliant

## [0.2.1]https://github.com/mich101mich/sscanf/releases/tag/0.2.1 - 2022-02-03

### Added
- Ability to use `str` as the type to match. This will match any text, similar to using `String`,
  but will borrow from the input string instead of cloning the substring
  - Using this requires that the input lives longer than the return value

## [0.2.0]https://github.com/mich101mich/sscanf/releases/tag/0.2.0 - 2022-02-02

### Added
- Ability to place the type directly in the corresponding placeholder
  - Imitates the [Rust format!() behavior since 1.58]https://blog.rust-lang.org/2022/01/13/Rust-1.58.0.html#captured-identifiers-in-format-strings

### Changed
- Format Options have to be prefixed with a `:` now to separate them from types!
  - `scanf!(input, "{x}", i32)` is now written as either `scanf!(input, "{:x}", i32)` or
    `scanf!(input, "{i32:x}")`
- Return type of `scanf!` is now a `Result` instead of `Option`, returning the
  [`Error`]https://docs.rs/sscanf/0.2.0/sscanf/enum.Error.html type if the parsing fails
  - New Signature: `scanf!(<input>, "<format>", <types>...) -> Result<(<types>...), Error>`

## [0.1.4]https://github.com/mich101mich/sscanf/releases/tag/0.1.4 - 2021-12-01

### Added
- New format option for supplying a custom regex
  - Syntax: A regex surrounded by `/` on both sides: `{/.../}`

## [0.1.3]https://github.com/mich101mich/sscanf/releases/tag/0.1.3 - 2021-09-12

### Added
- Format Options
  - Placing `x`, `o`, or `b` inside of a `{}` placeholder like: `{x}` causes the number to be
    parsed from a hex/octal/binary string with optional prefix like `0x`
  - Using `r2` - `r36` in the placeholder allows parsing number types from any base between 2
    and 36
- [`chrono`]https://crates.io/crates/chrono integration
  - Ability to parse from `chrono`'s types by specifying a [date format]https://docs.rs/chrono/latest/chrono/format/strftime/index.html inside of the `{}` placeholders
  - Requires activating the `chrono` feature of `sscanf` in your `Cargo.toml`

### Deprecated
- [`HexNumber`]https://docs.rs/sscanf/0.1.3/sscanf/struct.HexNumber.html. Use the `{x}` format
  option instead

## [0.1.2]https://github.com/mich101mich/sscanf/releases/tag/0.1.2 - 2021-05-18

### Changed
- Performance improvements

## [0.1.1]https://github.com/mich101mich/sscanf/releases/tag/0.1.1 - 2021-04-15

### Added
- [`HexNumber`]https://docs.rs/sscanf/0.1.1/sscanf/struct.HexNumber.html, a type to parse
  integers from hexadecimal strings

## [0.1.0]https://github.com/mich101mich/sscanf/releases/tag/0.1.0 - 2021-03-10

Initial Release

### Added
- [`scanf`]https://docs.rs/sscanf/0.1.0/sscanf/macro.scanf.html macro to parse an input string
  according to a format
  - Signature: `scanf!(<input>, "<format>", <types>...) -> Option<(<types>...)>`
- [`scanf_unescaped`]https://docs.rs/sscanf/0.1.0/sscanf/macro.scanf_unescaped.html and
  [`scanf_get_regex`]https://docs.rs/sscanf/0.1.0/sscanf/macro.scanf_get_regex.html macros
- [`RegexRepresentation`]https://docs.rs/sscanf/0.1.0/sscanf/trait.RegexRepresentation.html trait
  to allow custom types to be parsed by `scanf`. Note that the types also need to implement
  [`std::str::FromStr`]https://doc.rust-lang.org/std/str/trait.FromStr.html