Glaze 5.4.0

good-penguin.png

Состоялся выпуск 5.4.0 высокопроизводительной библиотеки Glaze, предназначенной для чтения и записи JSON с удобными возможностями сериализации и десериализации данных.

Также поддерживаются форматы CSV, BEVE и EETF (Erlang External Term Format) (опционально, для компиляции требуются библиотеки Erlang).
Библиотека написана на языке C++ (header-only, стандарт C++23) и распространяется по лицензии MIT.

Список изменений:

  • Новая страница документации, которая была улучшена в этом выпуске.
  • Добавлена возможность переименования ключей во время компиляции:
struct renamed_t
{
   std::string first_name{};
   std::string last_name{};
   int age{};
};

template <>
struct glz::meta
{
   static constexpr std::string_view rename_key(const std::string_view key) {
      if (key == "first_name") {
         return "firstName";
      }
      else if (key == "last_name") {
         return "lastName";
      }
      return key;
   }
};

// Или даже более мощная возможность использования std::string во время компиляции для динамических преобразований ключей:

struct suffixed_keys_t
{
   std::string first{};
   std::string last{};
};

template <>
struct glz::meta
{
   static constexpr std::string rename_key(const auto key) {
      return std::string(key) + "_name";
   }
};
  • Добавлена поддержка glz::context для обработки ошибок при работе с glz::custom. Это позволяет выполнять сложную обработку ошибок в glz::custom даже с отключенными исключениями:
struct age_custom_error_obj
{
   int age{};
};

template <>
struct glz::meta
{
   using T = age_custom_error_obj;
   static constexpr auto read_x = [](T& s, int age, glz::context& ctx) {
      if (age < 21) {
         ctx.error = glz::error_code::constraint_violated;
         ctx.custom_error_message = "age too young";
      }
      else {
         s.age = age;
      }
   };
   static constexpr auto value = object("age", glz::custom);
};

// Код:
age_custom_error_obj obj{};
std::string s = R"({"age":18})";
auto ec = glz::read_json(obj, s);
auto err_msg = glz::format_error(ec, s);
std::cout << err_msg << '\n';

// выводит
1:10: constraint_violated
   {"age":18}
            ^ age too young
  • Удалена compile-time опция use_hash_comparison. Влияние этой опции уже давно уменьшилось из-за более нового подхода к хэшированию в Glaze. Удаление этой опции нарушает только тот код, который явно установил эту опцию в false (по умолчанию было true). Удалите ссылки на этот код, и всё будет работать нормально.
  • Удалён старый, уродливый подход с макросами и посещением функций-членов, что сократило время компиляции.
  • Добавлена поддержка буферов без завершающих нулей при чтении CSV.
  • В функцию prettify_json добавлена проверка максимального предела глубины рекурсии (max_recursive_depth_limit = 256).

>>> Подробности на GitHub

©  Linux.org.ru