confique 0.3.0

Type-safe, layered, light-weight, `serde`-based configuration library
Documentation
# Changelog

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


## [Unreleased]

## [0.3.0] - 2024-10-18

- **Breaking**: Raise MSRV to 1.61.0
- **Breaking**: `toml`, `yaml` and `json5` are no longer default features ([`19d9ddc`]https://github.com/LukasKalbertodt/confique/commit/19d9ddc9537baf4e82274591ba92f02d4c5c1f36). You now have to manually specify the features you need in `Cargo.toml`.
- **Breaking**: env vars set to an empty string, which fail to deserialize/parse/validate are now treated as not set. This is technically a breaking change, but I think this is the expected behavior and shouldn't affect you. ([#39]https://github.com/LukasKalbertodt/confique/pull/39)
- ⭐ Add validation feature ([#40]https://github.com/LukasKalbertodt/confique/pull/40)
  - `#[config(validate = path::to::function)] field: u32` to call the given function during field deserialization.
  - `#[config(validate(!s.is_empty(), "user must not be empty"))] user: String` is a `assert!`-style syntax to simple validation checks.
  - Validation can also be added to full structs.
  - See docs and examples for more information!
- Stop including `Error::source` in the `Display` output of `Error` ([`d454f0957`]https://github.com/LukasKalbertodt/confique/commit/d454f0957eb1cb4d566ebc448224b323a609d080)
- Improve & refactor docs of `derive(Config` a bit
- Update dependencies (syn to 2.0, heck to 0.5): this shouldn't affect you, except for faster compile times due to smaller dependency tree.


## [0.2.6] - 2024-10-10
- Fix compile errors when using `confique` derive without having `serde` in your direct dependencies (see [#38]https://github.com/LukasKalbertodt/confique/issues/38).
- Update `toml` dependency to 0.8
- Fix some typos in docs

## [0.2.5] - 2023-12-10
- Add `#[config(partial_attr(...))]` struct attribute to specify attributes for
  the partial type.
- Allow "yes" and "no" as values when deserializing `bool` from env. Also, the
  match is done completely case insensitive now, such that e.g. "True", "tRuE"
  are accepted now.

## [0.2.4] - 2023-07-02
- Fixed enum deserialization from env values

## [0.2.3] - 2023-03-10
### Fixed
- Add `#[allow(missing_docs)]` to some generated code to avoid problems in
  crates that `#[forbid(missing_docs)]` globally.
- Fix badge in README

### Added
- Add short docs to generated module (to explains its purpose and avoid
  confusion when people find it in their docs)

### Changed
- Internal change that potentially improves compile time a tiny bit.

## [0.2.2] - 2022-11-25
### Fixed
- Use fully qualified paths for all symbols emitted by the derive macro.
  Before this, the derive would throw errors if you shadowed any of the symbols
  `Result`, `Option`, `Ok`, `None` or `Some`. A test has been added to make sure
  this does not happen again in the future.
  (Partially in [#23]https://github.com/LukasKalbertodt/confique/pull/23, thanks @aschey)


## [0.2.1] - 2022-11-06
### Added
- `parse_env` attribute for custom parsing of environment variables (allows you
  to load lists and other complex objects from env vars).
  (in [#22]https://github.com/LukasKalbertodt/confique/pull/22, thanks @cyphersnake)

### Changed
- Updated `serde_yaml` to 0.9 (this is only an internal dependency).

## [0.2.0] - 2022-10-21
### Added
- Add support for **array default values**, e.g. `#[config(default = [1, 2, 3])`
- Add support for **map default values**, e.g. `#[config(default = { "cat": 3, "dog": 5 })`
- **Add JSON5 support**
- Show environment variable key in config template
- Impl `PartialEq` for all `meta` items
- Impl `Serialize` for `meta::Expr`

### Changed
- **Breaking**: rename `{toml,yaml}::format` to `template`
- **Breaking**: make `FormatOptions` and some `meta` types `#[non_exhaustive]`
- Move to Rust 2021 (bumps MSRV to 1.56)
- Improved docs

### Fixed
- Fix type inference for float default values
- Fix name clash with generated helper functions
- Fix incorrect newlines for string default values in YAML config template

### Internal
- Rewrite large parts of the crate, mostly to deduplicate logic
- Add lots of tests

## [0.1.4] - 2022-10-14
### Fixed
- Derive attribute `env` can now be used together with `deserialize_with` (#2)

## [0.1.3] - 2022-04-07
### Fixed
- Derive macro does not product unparsable output anymore if the visibility
  modifier of the struct is `pub` or `pub(in path)`.

### Changed
- The output of `toml::format` now emits empty lines above nested objects in a
  more useful manner.


## [0.1.2] - 2022-03-30
### Fixed
- Fixed output of `toml::format` when leaf fields were listed after `nested`
  fields in a configuration.


## [0.1.1] - 2021-11-03
### Added
- `deserialize_with` attribute which is (basically) forwarded to `serde`

### Fixed
- Improve some spans in error messages


## 0.1.0 - 2021-07-28
### Added
- Everything.


[Unreleased]: https://github.com/LukasKalbertodt/confique/compare/v0.3.0...HEAD
[0.3.0]: https://github.com/LukasKalbertodt/confique/compare/v0.2.6...v0.3.0
[0.2.6]: https://github.com/LukasKalbertodt/confique/compare/v0.2.5...v0.2.6
[0.2.5]: https://github.com/LukasKalbertodt/confique/compare/v0.2.4...v0.2.5
[0.2.4]: https://github.com/LukasKalbertodt/confique/compare/v0.2.3...v0.2.4
[0.2.3]: https://github.com/LukasKalbertodt/confique/compare/v0.2.2...v0.2.3
[0.2.2]: https://github.com/LukasKalbertodt/confique/compare/v0.2.1...v0.2.2
[0.2.1]: https://github.com/LukasKalbertodt/confique/compare/v0.2.0...v0.2.1
[0.2.0]: https://github.com/LukasKalbertodt/confique/compare/v0.1.4...v0.2.0
[0.1.4]: https://github.com/LukasKalbertodt/confique/compare/v0.1.3...v0.1.4
[0.1.3]: https://github.com/LukasKalbertodt/confique/compare/v0.1.2...v0.1.3
[0.1.2]: https://github.com/LukasKalbertodt/confique/compare/v0.1.1...v0.1.2
[0.1.1]: https://github.com/LukasKalbertodt/confique/compare/v0.1.0...v0.1.1