// Copyright 2018-2022 Emil Dotchevski and Reverge Studios, Inc. // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) #ifdef BOOST_LEAF_TEST_SINGLE_HEADER # include "leaf.hpp" #else # include # include # include #endif #include "lightweight_test.hpp" namespace leaf = boost::leaf; enum class ErrorCode { E_GENERIC_UNEXPECTED, E_GENERIC_PARSE }; leaf::result test1( int a ) { if( a == 1 ) return leaf::new_error(ErrorCode::E_GENERIC_UNEXPECTED); return 32; } leaf::result test2(int a) { return leaf::try_handle_some( [&]() -> leaf::result { BOOST_LEAF_AUTO(val, test1(a)); (void) val; return 4.5; }, [](leaf::match) -> leaf::result { return leaf::new_error(ErrorCode::E_GENERIC_PARSE); } ); } void test3(int a) { int x = 0; leaf::try_handle_all( [&]() -> leaf::result { BOOST_LEAF_AUTO(val, test2(a)); (void) val; return {}; }, [&](leaf::match) { x = 1; }, [&](ErrorCode e) { x = 2; }, [&]() { x = 3; } ); BOOST_TEST_EQ(x, 1); } int main() { test3(1); return boost::report_errors(); }