using Invercargill; using Invercargill.DataStructures; using InvercargillJson; using Statum; namespace ClankerSaddle { /** * Helpers for shaping Statum slot state. Because Statum's GObjectMapping * cannot serialise array/list fields, lists are built as a JsonArray and set * on a PropertyDictionary under a key, where stm-for-{x}-in can iterate them. */ public class StateJson : Object { /** * Builds a JSON array element from a lot of GObject row models, mapping * each row via GObjectMapping. Use the result as a slot public-data value: * `dict["tasks"] = StateJson.list(rows);` */ public static JsonElement list(Lot items) throws GLib.Error { var arr = new JsonArray(); foreach (var item in items) { var props = GObjectMapping.to_properties((Object) item); arr.add(new JsonElement.from_properties(props)); } return new JsonElement.from_elements(arr); } /** Same as {@link list} but accepts a Vala array. */ public static JsonElement list_array(T[] items) throws GLib.Error { var arr = new JsonArray(); foreach (var item in items) { var props = GObjectMapping.to_properties((Object) item); arr.add(new JsonElement.from_properties(props)); } return new JsonElement.from_elements(arr); } } }