aboutsummaryrefslogtreecommitdiffstats
path: root/prototypes/connections/module-store.c
diff options
context:
space:
mode:
Diffstat (limited to 'prototypes/connections/module-store.c')
-rw-r--r--prototypes/connections/module-store.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/prototypes/connections/module-store.c b/prototypes/connections/module-store.c
index 941957b..6335903 100644
--- a/prototypes/connections/module-store.c
+++ b/prototypes/connections/module-store.c
@@ -38,7 +38,26 @@ static void close_document(void *context, void *document) {
pure_draft_close(document);
}
+static PureResult state(void *context, const char *name, PureDraft **out) {
+ return pure_state_open(context, name, out);
+}
+
+/* The document and the app's changed states in one tree commit. */
+static PureResult save(void *context, void *document, PureDraft *const *states, size_t count, int64_t *revision) {
+ (void)context;
+ PureDraft *drafts[2 * PURE_MODULE_STATES + 2] = {0};
+ int64_t revisions[2 * PURE_MODULE_STATES + 2] = {0};
+ size_t n = 0;
+ if (count > 2 * PURE_MODULE_STATES + 1) return PURE_LIMIT;
+ if (document) drafts[n++] = document;
+ for (size_t i = 0; i < count; ++i) drafts[n++] = states[i];
+ PureResult result = pure_draft_commit_all(drafts, n, revisions);
+ if (document) *revision = revisions[0];
+ return result;
+}
+
PureData pure_tree_data(const char *path) {
return (PureData){.context = (void *)path, .open = open_document, .version = version,
- .read = read, .splice = splice, .commit = commit, .close = close_document};
+ .read = read, .splice = splice, .commit = commit, .close = close_document,
+ .state = state, .save = save};
}