From c66e1dff85bf723019cab24abf70408da7c50e9b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?David=20B=C3=BChler?= <david.buhler@cea.fr>
Date: Fri, 17 Sep 2021 14:34:03 +0200
Subject: [PATCH] [server] New kernel request to save the current session.

---
 .../src/frama-c/api/generated/kernel/services/index.ts |  9 +++++++++
 src/plugins/server/kernel_main.ml                      | 10 ++++++++++
 2 files changed, 19 insertions(+)

diff --git a/ivette/src/frama-c/api/generated/kernel/services/index.ts b/ivette/src/frama-c/api/generated/kernel/services/index.ts
index 3419792ac5a..666ca9816dc 100644
--- a/ivette/src/frama-c/api/generated/kernel/services/index.ts
+++ b/ivette/src/frama-c/api/generated/kernel/services/index.ts
@@ -75,6 +75,15 @@ const load_internal: Server.SetRequest<string,string | undefined> = {
 /** Load a save file. Returns an error, if not successfull. */
 export const load: Server.SetRequest<string,string | undefined>= load_internal;
 
+const save_internal: Server.SetRequest<string,string | undefined> = {
+  kind: Server.RqKind.SET,
+  name:   'kernel.services.save',
+  input:  Json.jString,
+  output: Json.jString,
+};
+/** Save the current session. Returns an error, if not successfull. */
+export const save: Server.SetRequest<string,string | undefined>= save_internal;
+
 /** Source file positions. */
 export type source =
   { dir: string, base: string, file: string, line: number };
diff --git a/src/plugins/server/kernel_main.ml b/src/plugins/server/kernel_main.ml
index effed249b3a..3c5fb34a461 100644
--- a/src/plugins/server/kernel_main.ml
+++ b/src/plugins/server/kernel_main.ml
@@ -74,6 +74,16 @@ let () =
        try Project.load_all (Filepath.Normalized.of_string file); None
        with Project.IOError err -> Some err)
 
+
+let () =
+  Request.register ~package ~kind:`SET ~name:"save"
+    ~descr:(Md.plain "Save the current session. Returns an error, if not successfull.")
+    ~input:(module Jstring)
+    ~output:(module Joption(Jstring))
+    (fun file ->
+       try Project.save_all (Filepath.Normalized.of_string file); None
+       with Project.IOError err -> Some err)
+
 (* -------------------------------------------------------------------------- *)
 (* --- File Positions                                                     --- *)
 (* -------------------------------------------------------------------------- *)
-- 
GitLab