userver
                                
                                
                                
                                    userver copied to clipboard
                            
                            
                            
                        feat formats: automatic serialization/deserialization based on Boost.PFR
Example
#include <userver/formats/json.hpp>
#include <userver/formats/universal/universal.hpp>
#include <userver/formats/universal/common_containers.hpp>
#include <iostream>
struct SomeStruct {
  std::optional<int> field;
  std::string field2;
};
template <>
inline constexpr auto userver::formats::universal::kSerialization<SomeStruct> =
  SerializationConfig<SomeStruct>()
  .With<"field">({.Maximum = 1221, .Minimum = 12, .Default = 124})
  .With<"field2">({.Pattern = kPattern<"^[0-9]+$">});
int main() {
  userver::formats::json::ValueBuilder builder(SomeStruct{{}, "121"});
  auto json = builder.ExtractValue();
  std::cout << userver::formats::json::ToString(json) << std::endl; // {"field":124,"field2":"121"}
  std::cout << json.As<SomeStruct>().field << std::endl; // 124
};
                                    
                                    
                                    
                                
In a separate .hpp, let's add an easy way to plug utils::TrivialBiMap into serialization of optionals
It should allow to write something like:
template <>
inline constexpr auto formats::enums::kEnumMapping<SomeEnum> = [](auto selector) {
  return selector
    .Case(SomeEnum::kFoo, "foo")
    .Case(SomeEnum::kBar, "bar");
};
and get:
ParseSerializeformats::enums::ToString(although it won't be ADL-found, but still useful)formats::enums::ParseFromString? (same ^)