diff --git a/lib/utils/mu-xapian-utils.hh b/lib/utils/mu-xapian-utils.hh index 12f3c2ce..5712d050 100644 --- a/lib/utils/mu-xapian-utils.hh +++ b/lib/utils/mu-xapian-utils.hh @@ -1,5 +1,5 @@ /* -** Copyright (C) 2021 Dirk-Jan C. Binnema +** Copyright (C) 2021-2023 Dirk-Jan C. Binnema ** ** This program is free software; you can redistribute it and/or modify it ** under the terms of the GNU General Public License as published by the @@ -29,34 +29,34 @@ namespace Mu { // LCOV_EXCL_START // avoid exception-handling boilerplate. -template -void +template void xapian_try(Func&& func) noexcept try { func(); } catch (const Xapian::Error& xerr) { g_critical("%s: xapian error '%s'", __func__, xerr.get_msg().c_str()); } catch (const std::runtime_error& re) { - g_critical("%s: error: %s", __func__, re.what()); + g_critical("%s: runtime error: %s", __func__, re.what()); } catch (const std::exception& e) { - g_critical("%s: caught exception: %s", __func__, e.what()); + g_critical("%s: caught std::exception: %s", __func__, e.what()); } catch (...) { g_critical("%s: caught exception", __func__); } -template > -auto +template > auto xapian_try(Func&& func, Default&& def) noexcept -> std::decay_t try { return func(); +} catch (const Xapian::DocNotFoundError& xerr) { + return static_cast(def); } catch (const Xapian::Error& xerr) { - g_critical("%s: xapian error '%s'", __func__, xerr.get_msg().c_str()); + g_warning("%s: xapian error '%s'", __func__, xerr.get_msg().c_str()); return static_cast(def); } catch (const std::runtime_error& re) { - g_critical("%s: error: %s", __func__, re.what()); + g_critical("%s: runtime error: %s", __func__, re.what()); return static_cast(def); } catch (const std::exception& e) { - g_critical("%s: caught exception: %s", __func__, e.what()); + g_critical("%s: caught std::exception: %s", __func__, e.what()); return static_cast(def); } catch (...) { g_critical("%s: caught exception", __func__); @@ -64,8 +64,7 @@ try { } -template -auto +template auto xapian_try_result(Func&& func) noexcept -> std::decay_t try { return func(); @@ -74,7 +73,7 @@ try { } catch (const std::runtime_error& re) { return Err(Error::Code::Internal, "runtime error: %s", re.what()); } catch (const std::exception& e) { - return Err(Error::Code::Internal, "caught exception: %s", e.what()); + return Err(Error::Code::Internal, "caught std::exception: %s", e.what()); } catch (...) { return Err(Error::Code::Internal, "caught exception"); }