From 7d1911572000d1353c1c0109402431323fcd8639 Mon Sep 17 00:00:00 2001 From: Ander Conselvan de Oliveira Date: Fri, 22 Feb 2019 09:31:21 +0200 Subject: [core] Don't use exceptions in MapObserver::onDidFailLoadingMap Using different exception pointers to specify the loading failure makes an awkward API. Most users rethrow the exception only to figure out what type of error happened so it can be reported properly. So replace the exception pointer with a enum an string description of the failure. --- src/mbgl/map/map_impl.cpp | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/mbgl/map/map_impl.cpp b/src/mbgl/map/map_impl.cpp index fc67d3cf56..863604f99c 100644 --- a/src/mbgl/map/map_impl.cpp +++ b/src/mbgl/map/map_impl.cpp @@ -2,6 +2,7 @@ #include #include #include +#include namespace mbgl { @@ -97,7 +98,26 @@ void Map::Impl::onStyleLoaded() { } void Map::Impl::onStyleError(std::exception_ptr error) { - observer.onDidFailLoadingMap(error); + MapLoadError type; + std::string description; + + try { + std::rethrow_exception(error); + } catch (const mbgl::util::StyleParseException& e) { + type = MapLoadError::StyleParseError; + description = e.what(); + } catch (const mbgl::util::StyleLoadException& e) { + type = MapLoadError::StyleLoadError; + description = e.what(); + } catch (const mbgl::util::NotFoundException& e) { + type = MapLoadError::NotFoundError; + description = e.what(); + } catch (const std::exception& e) { + type = MapLoadError::UnknownError; + description = e.what(); + } + + observer.onDidFailLoadingMap(type, description); } #pragma mark - Map::Impl RendererObserver -- cgit v1.2.1