summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcus Fritzsch <marcus_fritzsch@mentor.com>2017-08-01 16:05:10 +0200
committerMarcus Fritzsch <marcus_fritzsch@mentor.com>2017-08-08 17:24:00 +0200
commit75524b385a2b3adaa5feabf547b80d412f3a1c56 (patch)
tree42becf73dc29152aac4effde11cb108f91f6f715
parent6d5be0fb38f93a758127491f6c81de829554bf1d (diff)
app: simplify config loading code, handle errors too
Signed-off-by: Marcus Fritzsch <marcus_fritzsch@mentor.com>
-rw-r--r--src/app.cpp26
1 files changed, 20 insertions, 6 deletions
diff --git a/src/app.cpp b/src/app.cpp
index 8c929fe..353557e 100644
--- a/src/app.cpp
+++ b/src/app.cpp
@@ -59,12 +59,24 @@ result<struct layout> layout_from_json(json const &j) {
return Ok(l);
}
+result<json> file_to_json(char const *filename) {
+ std::ifstream i(filename);
+ if (i.fail()) {
+ return Err<json>("Could not open config file");
+ }
+ json j;
+ i >> j;
+ return Ok(j);
+}
+
struct result<layouts_type> load_layout(char const *filename) {
DB("loading layout from " << filename);
- json jlayouts;
- std::ifstream i(filename);
- i >> jlayouts;
+ auto j = file_to_json(filename);
+ if (j.is_err()) {
+ return Err<layouts_type>(j.unwrap_err());
+ }
+ json jlayouts = j.unwrap();
auto layouts = layouts_type();
layouts.reserve(jlayouts.size());
@@ -78,9 +90,11 @@ struct result<surface_id_to_layer_map>
load_layer_ids(char const *filename) {
DB("loading IDs from " << filename);
- json jids;
- std::ifstream i(filename);
- i >> jids;
+ auto j = file_to_json(filename);
+ if (j.is_err()) {
+ return Err<surface_id_to_layer_map>(j.unwrap_err());
+ }
+ json jids = j.unwrap();
return to_surface_id_to_layer_map(jids);
}