diff --git a/toml/get.hpp b/toml/get.hpp index 430c4cc..056da64 100644 --- a/toml/get.hpp +++ b/toml/get.hpp @@ -276,5 +276,48 @@ get_or(const toml::Table& tab, const toml::key& ky, T&& opt) typename std::remove_reference::type>::type>(tab.find(ky)->second); } +// ============================================================================ +// expect + +template +auto expect(const toml::value& v) + -> result(v)), std::string> +{ + try + { + return ok(get(v)); + } + catch(const type_error& te) + { + return err(te.what()); + } +} +template +auto expect(toml::value& v) + -> result(v)), std::string> +{ + try + { + return ok(get(v)); + } + catch(const type_error& te) + { + return err(te.what()); + } +} +template +auto expect(toml::value&& v) + -> result(std::move(v))), std::string> +{ + try + { + return ok(get(std::move(v))); + } + catch(const type_error& te) + { + return err(te.what()); + } +} + } // toml #endif// TOML11_GET