summaryrefslogtreecommitdiff
path: root/bs5/universal/native/shared/ServerFunctions.re
diff options
context:
space:
mode:
Diffstat (limited to 'bs5/universal/native/shared/ServerFunctions.re')
-rw-r--r--bs5/universal/native/shared/ServerFunctions.re80
1 files changed, 80 insertions, 0 deletions
diff --git a/bs5/universal/native/shared/ServerFunctions.re b/bs5/universal/native/shared/ServerFunctions.re
new file mode 100644
index 0000000..24d94a5
--- /dev/null
+++ b/bs5/universal/native/shared/ServerFunctions.re
@@ -0,0 +1,80 @@
+open Melange_json.Primitives;
+
+module Notes = {
+ [@react.server.function]
+ let create = (~title: string, ~content: string): Js.Promise.t(Note.t) => {
+ let note = DB.addNote(~title, ~content);
+ let%lwt response =
+ switch%lwt (note) {
+ | Ok(note) => Lwt.return(note)
+ | Error(e) => failwith(e)
+ };
+ Lwt.return(response);
+ };
+
+ [@react.server.function]
+ let edit =
+ (~id: int, ~title: string, ~content: string): Js.Promise.t(Note.t) => {
+ let note = DB.editNote(~id, ~title, ~content);
+ let%lwt response =
+ switch%lwt (note) {
+ | Ok(note) => Lwt.return(note)
+ | Error(e) => failwith(e)
+ };
+
+ Lwt.return(response);
+ };
+
+ [@react.server.function]
+ let delete_ = (~id: int): Js.Promise.t(string) => {
+ let _ = DB.deleteNote(id);
+ Lwt.return("Note deleted");
+ };
+};
+
+[@react.server.function]
+let simpleResponse = (~name: string, ~age: int): Js.Promise.t(string) => {
+ Lwt.return(Printf.sprintf("Hello %s, you are %d years old", name, age));
+};
+
+[@react.server.function]
+let error = (): Js.Promise.t(string) => {
+ // Uncomment to see that it also works with Lwt.fail
+ Lwt.fail(
+ failwith("Error from server"),
+ // failwith(
+ // "Error from server",
+ // );
+ );
+};
+
+[@react.server.function]
+let formDataFunction = (formData: Js.FormData.t): Js.Promise.t(string) => {
+ let name =
+ switch (formData->Js.FormData.get("name")) {
+ | `String(name) => name
+ | exception _ => failwith("Invalid formData.")
+ };
+
+ let response = Printf.sprintf("Form data received: %s", name);
+
+ Lwt.return(response);
+};
+
+[@react.server.function]
+let formDataWithArg =
+ (timestamp: string, formData: Js.FormData.t): Js.Promise.t(string) => {
+ let country =
+ switch (formData->Js.FormData.get("country")) {
+ | `String(country) => country
+ };
+
+ let response =
+ Printf.sprintf(
+ "Form data received: %s, timestamp: %s",
+ country,
+ timestamp,
+ );
+
+ Lwt.return(response);
+};