Skip to content

Miniconf v0.8.0

Choose a tag to compare

@ryan-summers ryan-summers released this 03 Aug 13:50
· 1367 commits to main since this release
d03726d

Added

  • Traversal by names or indices has been added through Miniconf::traverse_by_key().
  • The Miniconf derive macro supports (unnamed) tuple structs.

Removed

  • [breaking] The Array and Option newtypes have been removed. Instead in structs
    the desired Miniconf<N> recursion depth for a field is indicated by an attribute
    #[miniconf(defer(N))] where N is a usize literal. The depth is communicated
    via the trait. For [T;N] and Option the depth up to 8 has been implemented.
    For structs it is arbitrary.

Changed

  • [breaking] The Miniconf trait is now generic over the Deserializer/Serializer. It
    doesn't enforce serde-json-core or u8 buffers or / as the path hierarchy
    separator anymore.
  • [breaking] Miniconf::iter_paths() takes the path hierarchy separator and passes
    it on to Miniconf::path() and Metadata::separator().
  • [breaking] The Miniconf trait has been stripped of the provided functions that depended
    on the serde-backend and path hierarchy separator. Those have been
    moved into the JsonCoreSlash trait that has been implemented for all Miniconf
    to provide the previously existing functionality.
  • [breaking] set() and get() have been renamed to set_json() and get_json()
    respectively to avoid overlap.
  • [breaking] Paths now start with the path separator (unless they are empty).
    This affects the Miniconf derive macro and the Miniconf implementation pairs
    for Option/Array.
    Downstram crates should ensure non-empty paths start with the separator and
    expect next_path paths to start with the separator or be empty.
  • The main serialization/deserialization methods are now Miniconf::{set,get}_by_key()
    They are generic over the key iterator Iterator<Item: miniconf::Key>.
  • The only required change for most direct downstream users the Miniconf trait
    to adapt to the above is to make sure the JsonCoreSlash trait is in scope
    (use miniconf::JsonCoreSlash) and to rename {set,get}() -> {set,get}_json().
    The MqttClient has seen no externally visible changes.
  • [breaking] iter_paths() and iter_paths_unchecked() now don't need the state
    size anymore as it's computed exactly at compile time.
  • [breaking] iter_paths/PathIter is now generic over the type
    to write the path into. Downstream crates should replace iter_paths::<L, TS>() with
    e.g. iter_paths::<heapless::String<TS>>().
  • [breaking] Re-exports of heapless and serde-json-core have been removed as they
    are not needed to work with the public API and would be a semver hazard.
  • [breaking] Metadata is now computed by default without taking into account
    path separators. These can be included using Metadata::separator().