changeset 221:9aca3267809c

Various fixes to JSON writing for static output data
author Chris Cannam <cannam@all-day-breakfast.com>
date Fri, 09 Jun 2017 13:06:11 +0100
parents 02de5df3a884
children e0e3d9efa774
files vamp-json/VampJson.h
diffstat 1 files changed, 34 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/vamp-json/VampJson.h	Thu Jun 08 16:17:03 2017 +0100
+++ b/vamp-json/VampJson.h	Fri Jun 09 13:06:11 2017 +0100
@@ -603,11 +603,33 @@
 
         json11::Json::object statinfo;
         auto souts = d.staticOutputInfo;
-        for (auto &s: souts) jo[s.first] = fromStaticOutputDescriptor(s.second);
+        for (auto &s: souts) {
+            statinfo[s.first] = fromStaticOutputDescriptor(s.second);
+        }
+        jo["staticOutputInfo"] = statinfo;
         
         return json11::Json(jo);
     }
 
+    static StaticOutputInfo
+    toStaticOutputInfo(json11::Json j, std::string &err) {
+
+        if (j == json11::Json()) return {};
+
+        if (!j.is_object()) {
+            err = "object expected for static output info";
+            return {};
+        }
+
+        StaticOutputInfo sinfo;
+        auto items = j.object_items();
+        for (auto i: items) {
+            sinfo[i.first] = toStaticOutputDescriptor(i.second, err);
+            if (failed(err)) return {};
+        }
+        return sinfo;                    
+    }
+    
     static PluginStaticData
     toPluginStaticData(json11::Json j, std::string &err) {
 
@@ -658,6 +680,11 @@
             
             err = "array expected for basicOutputInfo";
 
+        } else if (!j["staticOutputInfo"].is_null() &&
+                   !j["staticOutputInfo"].is_object()) {
+            
+            err = "object expected for staticOutputInfo";
+
         } else {
 
             PluginStaticData psd;
@@ -705,7 +732,12 @@
                 if (failed(err)) return {};
                 psd.basicOutputInfo.push_back(b);
             }
-            
+
+            StaticOutputInfo sinfo =
+                toStaticOutputInfo(j["staticOutputInfo"], err);
+            if (failed(err)) return {};
+            psd.staticOutputInfo = sinfo;
+
             return psd;
         }