From 6f304f768a914c9d8c678f2613597b469b8b6396 Mon Sep 17 00:00:00 2001 From: Marcus Fritzsch Date: Thu, 27 Jul 2017 23:12:17 +0200 Subject: layers: introduce layers.hpp and .cpp for layer related code Signed-off-by: Marcus Fritzsch --- src/layers.cpp | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 src/layers.cpp (limited to 'src/layers.cpp') diff --git a/src/layers.cpp b/src/layers.cpp new file mode 100644 index 0000000..8bd9b8f --- /dev/null +++ b/src/layers.cpp @@ -0,0 +1,48 @@ +// +// Created by m on 7/27/17. +// + +#include "layers.hpp" +#include "json_helper.hpp" +#include "util.hpp" + +namespace wm { + +surface_id_to_layer::surface_id_to_layer(nlohmann::json const &j) { + DB(j); + if (j["type"] == "range") { + this->id_min = get(j["first_surface_id"]); + this->id_max = get(j["last_surface_id"]); + } else { + this->id_min = this->id_max = get(j["surface_id"]); + } + this->name = j["name"].get(); + this->layer_id = get(j["layer_id"]); +} + +struct result to_surface_id_to_layer_map( + nlohmann::json const &j) { + DB(j); + try { + surface_id_to_layer_map stl{}; + std::transform( + std::cbegin(j), std::cend(j), + std::inserter(stl.mapping, stl.mapping.end()), + [](nlohmann::json const &j) { return surface_id_to_layer(j); }); + for (auto i : stl.mapping) { + if (i.name.empty()) { + return Err( + "Found mapping w/o name"); + } + if (i.layer_id == -1 || i.id_min == -1 || i.id_max == -1) { + return Err( + "Found invalid/unset IDs in mapping"); + } + } + return Ok(stl); + } catch (std::exception &e) { + return Err(e.what()); + } +} + +} // namespace wm -- cgit 1.2.3-korg