Describe the proposed feature
At least in the context of CBOR and UBJSON support (all of json_ext/*?), the underlying basic_*_reader::read() and decode() functions support a non-throwing std::error_code interface, but then those get turned into exception objects that are either thrown or terminate in the implementations of decode_*().
Instead, providing an alternative interface that returns an std::expected-like object that could contain the value type or an error type that contains the underlying exception information (what()).
What other libraries (C++ or other) have this feature?
See getml/reflect-cpp#429 and reflect-cpp/include/rfl/Result.hpp
Include a code fragment with sample data that illustrates the use of this feature
Intead of the try { ... } catch(e) { ... } logic in getml/reflect-cpp#432, it could run something more like:
auto jsoncons_result = jsoncons::cbor::decode_cbor<jsoncons::json>(_bytes);
if( jsoncons_result ) {
auto r = Reader();
return Parser<T, Processors<Ps...>>::read(r, InputVarType{&jsoncons_result.value()});
} else {
std::string msg("Could not parse CBOR: ");
msg.append(jsoncons_result.error().what());
return rfl::error(msg);
}
Describe the proposed feature
At least in the context of CBOR and UBJSON support (all of
json_ext/*?), the underlyingbasic_*_reader::read()anddecode()functions support a non-throwingstd::error_codeinterface, but then those get turned into exception objects that are either thrown or terminate in the implementations ofdecode_*().Instead, providing an alternative interface that returns an
std::expected-like object that could contain the value type or an error type that contains the underlying exception information (what()).What other libraries (C++ or other) have this feature?
See getml/reflect-cpp#429 and reflect-cpp/include/rfl/Result.hpp
Include a code fragment with sample data that illustrates the use of this feature
Intead of the
try { ... } catch(e) { ... }logic in getml/reflect-cpp#432, it could run something more like: