aboutsummaryrefslogtreecommitdiff
path: root/editor/j/j.ml
diff options
context:
space:
mode:
Diffstat (limited to 'editor/j/j.ml')
-rwxr-xr-xeditor/j/j.ml47
1 files changed, 47 insertions, 0 deletions
diff --git a/editor/j/j.ml b/editor/j/j.ml
new file mode 100755
index 0000000..96b22e0
--- /dev/null
+++ b/editor/j/j.ml
@@ -0,0 +1,47 @@
+type ('a, 'b) prop = Jv.prop'
+
+let prop
+ : string -> ('a, 'b) prop
+ = Jstr.of_string
+
+let get
+ : 'a -> ('a, 'b) prop -> 'b option
+ = fun obj prop ->
+ Jv.get' (Jv.Id.to_jv obj) prop
+ |> Jv.to_option Jv.Id.of_jv
+
+let set
+ : 'a -> ('a, 'b) prop -> 'b -> unit
+ = fun obj prop value ->
+ Jv.set'
+ (Jv.Id.to_jv obj)
+ prop
+ (Jv.Id.to_jv value)
+
+(* Objects *)
+
+type 'a constr = (Jstr.t * Jv.t)
+
+let c
+ : ('a, 'b) prop -> 'b -> 'a constr
+ = fun prop v ->
+ (prop, Jv.Id.to_jv v)
+
+let obj
+ : 'a constr Array.t -> 'a
+ = fun props ->
+ Jv.Id.of_jv @@ Jv.obj' props
+
+(* Arrays *)
+
+type 'a array = Jv.t
+
+let to_array
+ : 'a array -> 'a Array.t
+ = fun arr ->
+ Jv.to_array Jv.Id.of_jv arr
+
+let of_array
+ : 'a Array.t -> 'a array
+ = fun arr ->
+ Jv.of_array Jv.Id.to_jv arr