diff options
-rw-r--r-- | src/app.cpp | 23 | ||||
-rw-r--r-- | src/layers.cpp | 30 |
2 files changed, 30 insertions, 23 deletions
diff --git a/src/app.cpp b/src/app.cpp index 871222f..29f84f7 100644 --- a/src/app.cpp +++ b/src/app.cpp @@ -79,28 +79,7 @@ struct result<surface_id_to_layer_map> std::ifstream i(filename); i >> jids; - auto m = to_surface_id_to_layer_map(jids["mappings"]); - - if (m.is_ok()) { - auto i = m.unwrap(); - - auto jtests = jids.value("tests", json()); - - std::vector<std::pair<int, int>> tests; - std::transform(std::cbegin(jtests), std::cend(jtests), - std::back_inserter(tests), [](json const &j) { - return std::make_pair(get<int>(j["surface_id"]), - get<int>(j["expect_layer_id"])); - }); - - for (auto sid : tests) { - if (i.get_layer_for_surface(sid.first).value_or(-1) != sid.second) { - return Err<surface_id_to_layer_map>("ID Map embedded test failed!"); - } - } - } - - return m; + return to_surface_id_to_layer_map(jids); } } // namespace diff --git a/src/layers.cpp b/src/layers.cpp index d3ec7cf..f475556 100644 --- a/src/layers.cpp +++ b/src/layers.cpp @@ -10,6 +10,8 @@ namespace wm { +using json = nlohmann::json; + surface_id_to_layer::surface_id_to_layer(nlohmann::json const &j) { // DB(j); if (j["type"] == "range") { @@ -27,8 +29,9 @@ struct result<struct surface_id_to_layer_map> to_surface_id_to_layer_map( DB(j); try { surface_id_to_layer_map stl{}; + auto m = j["mappings"]; std::transform( - std::cbegin(j), std::cend(j), + std::cbegin(m), std::cend(m), std::inserter(stl.mapping, stl.mapping.end()), [](nlohmann::json const &j) { return surface_id_to_layer(j); }); for (auto i : stl.mapping) { @@ -41,6 +44,31 @@ struct result<struct surface_id_to_layer_map> to_surface_id_to_layer_map( "Found invalid/unset IDs in mapping"); } } + + // Check lookup + auto jtests = j.value("tests", json()); + + if (! jtests.empty()) { + DB("Embedded tests..."); + std::vector<std::pair<int, int>> tests; + tests.reserve(jtests.size()); + std::transform(std::cbegin(jtests), std::cend(jtests), + std::back_inserter(tests), [](json const &j) { + return std::make_pair(get<int>(j["surface_id"]), + get<int>(j["expect_layer_id"])); + }); + + for (auto sid : tests) { + int lid = stl.get_layer_for_surface(sid.first).value_or(-1); + DB("this=" << sid.first << ", that=" << lid + << ", expect=" << sid.second); + if (lid != sid.second) { + return Err<surface_id_to_layer_map>( + "ID Map embedded test failed!"); + } + } + } + return Ok(stl); } catch (std::exception &e) { return Err<struct surface_id_to_layer_map>(e.what()); |