Skip to content

v5.0.0

Latest
Compare
Choose a tag to compare
@stephenberry stephenberry released this 05 Mar 14:29
· 1 commit to main since this release

Version 5.0.0

Customizable Compile-Time Options

The glz::opts struct is now only the default options, and more specialized options can be added to user created option structs. See Options for new compile time option customization. In this transition we've moved lesser used options out of the default glz::opts. This reduces the length of compiler errors when using Glaze and makes handling more options in the future much more manageable.

The options moved out of the default glz::opts are the following:

// Add these fields to a custom options struct if you want to use them

bool validate_skipped = false;
// If full validation should be performed on skipped values

bool validate_trailing_whitespace = false;
// If, after parsing a value, we want to validate the trailing whitespace

bool concatenate = true;
// Concatenates ranges of std::pair into single objects when writing

bool allow_conversions = true;
// Whether conversions between convertible types are allowed in BEVE, e.g. double -> float

bool write_type_info = true;
// Write type info for meta objects in variants

bool shrink_to_fit = false;
// Shrinks dynamic containers to new size to save memory

bool hide_non_invocable = true;
// Hides non-invocable members from the cli_menu (may be applied elsewhere in the future)

Note

None of these options have been removed or deprecated. To use these options you simply need to create your own options struct with the additional options you wish to use. Simply inherit from glz::opts and add the fields you would like.

Removed detail namespace for to/from specializations

When writing custom serialization/parsing logic in Glaze, the to/from structs to specialize on have been removed from the detail namespace and are simply in glz.

Many other concepts and helper functions in Glaze have also been moved out of the detail namespace for cleaner custom serialization and parsing.

  • Removed detail from specializations like to/from in #1625

Changed glz::detail::read to glz::parse and glz::detail::write to glz::serialize

The helper type deduction functors named glz::detail::read and glz::detail::write were confusing, because these were different than the functions glz::read and glz::write. These helper functors have been moved out of the detail namespace and renamed to parse and serialize for easier to read custom serialization and parsing.

Generic Supported Concepts

The format specific concepts like: read_json_supported and write_beve_supported added extra boilerplate and did not allow custom formats. This change removes these non-generic functions and simply uses:

template <uint32_t Format, class T>
concept write_supported = requires { detail::to<Format, std::remove_cvref_t<T>>{}; };

template <uint32_t Format, class T>
concept read_supported = requires { detail::from<Format, std::remove_cvref_t<T>>{}; };

This more generic solution simplifies the code and makes adding new formats cleaner and possible for users without needing to modify the main Glaze repository.

  • Generic supported concepts in #1622

Minor fixes

In development

  • For glz::asio_server, if port is 0, allow access to assigned port in #1621

Full Changelog: v4.4.3...v5.0.0