Skip to content

Better diagnostic for value_to errors on described structures #1069

Description

@sdebionne

Given the following use case that comes from the documentation:

#include <iostream>
#include <string>

#include <boost/json/src.hpp>
#include <boost/describe.hpp>
#include <boost/exception/diagnostic_information.hpp>

struct money
{
    std::string currency;
    double value;
};

BOOST_DESCRIBE_STRUCT(money, (), (currency, value))

struct test
{
    double pi;
    bool happy;
    money object;
};

BOOST_DESCRIBE_STRUCT(test, (), (pi, happy, object))

int main()
{
    boost::json::value jv = {
        { "pi", 3.141 },
        { "happy", true },
        {"object", {
            //{ "currency", "USD" },
            { "value", 42.99 }
        }}
        };

    try {
        test res = boost::json::value_to<test>(jv);
    }
    catch (std::exception const& ex) {
        std::cerr << boost::diagnostic_information(ex, true) << std::endl;
    }

    return 0;
}

The missing currency member gives the following exception:

Dynamic exception type: boost::detail::with_throw_location<boost::system::system_error>
std::exception::what: unknown name [boost.json:39 at /nobackup/lid00lima21/debionne/miniconda3/envs/lima2/include/boost/json/detail/value_to.hpp:371 in function 'operator()']

It would be interesting to have an information where the exception occurred in the json value during value_to conversion. Ideally something like errinfo_json_path="object.concurreny".

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions