Add JSON support (refs #28)

This commit is contained in:
Peter Dimov
2022-10-18 06:08:18 +03:00
parent 457147d1b0
commit 67a12199e6
4 changed files with 175 additions and 2 deletions
+5
View File
@@ -126,3 +126,8 @@ run variant_visit_by_index.cpp ;
run variant_ostream_insert.cpp ;
run is_output_streamable.cpp ;
local JSON = <library>/boost//json/<warnings>off "<toolset>msvc-14.0:<build>no" "<toolset>msvc-14.2:<cxxflags>-wd5104" ;
run variant_json_value_from.cpp : : : $(JSON) ;
run variant_json_value_to.cpp : : : $(JSON) ;
+41
View File
@@ -0,0 +1,41 @@
// Copyright 2022 Peter Dimov
// Distributed under the Boost Software License, Version 1.0.
// https://www.boost.org/LICENSE_1_0.txt
#include <boost/variant2/variant.hpp>
#include <boost/json/value_from.hpp>
#include <boost/json/serialize.hpp>
#include <boost/core/lightweight_test.hpp>
#include <string>
using namespace boost::variant2;
namespace json = boost::json;
int main()
{
{
monostate m;
json::value w = json::value_from( m );
BOOST_TEST_EQ( w, json::value( nullptr ) );
}
{
variant<monostate, int, std::string> v;
json::value w = json::value_from( v );
BOOST_TEST_EQ( w, json::value( nullptr ) );
}
{
variant<monostate, int, std::string> v( 17 );
json::value w = json::value_from( v );
BOOST_TEST_EQ( w, json::value( 17 ) );
}
{
variant<monostate, int, std::string> v( "test" );
json::value w = json::value_from( v );
BOOST_TEST_EQ( w, json::value( "test" ) );
}
return boost::report_errors();
}
+42
View File
@@ -0,0 +1,42 @@
// Copyright 2022 Peter Dimov
// Distributed under the Boost Software License, Version 1.0.
// https://www.boost.org/LICENSE_1_0.txt
#include <boost/variant2/variant.hpp>
#include <boost/json/value_to.hpp>
#include <boost/json/serialize.hpp>
#include <boost/core/lightweight_test.hpp>
using namespace boost::variant2;
namespace json = boost::json;
int main()
{
{
json::value v;
auto r = json::try_value_to<monostate>( v );
BOOST_TEST( r.has_value() );
}
using V = variant<monostate, int, std::string>;
{
json::value v;
auto r = json::try_value_to<V>( v );
BOOST_TEST( r.has_value() ) && BOOST_TEST_EQ( *r, V() );
}
{
json::value v( 12 );
auto r = json::try_value_to<V>( v );
BOOST_TEST( r.has_value() ) && BOOST_TEST_EQ( *r, V(12) );
}
{
json::value v( "test" );
auto r = json::try_value_to<V>( v );
BOOST_TEST( r.has_value() ) && BOOST_TEST_EQ( *r, V("test") );
}
return boost::report_errors();
}