blob: dc0fbb73ec8ba99e00bf5990565a197d0ac4912a (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
;; Tuples of an RNT relation, as Translator.ml writes and reads them: a
;; tuple is #(Type #m(Name Value ...)), its type, names and strings
;; binaries, and its integers no wider than an OCaml int.
(defmodule rnt
(export (recv 1) (send 1)))
;; A tuple from the bytes RNT sent.
(defun recv (bytes) (holdable (binary_to_term bytes '(safe))))
;; The bytes RNT reads a tuple from.
(defun send (tuple) (term_to_binary (holdable tuple)))
;; The tuple, if RNT can hold it.
(defun holdable
(((= (tuple type attributes) tuple)) (when (is_binary type) (is_map attributes))
(if (lists:all (fun attribute? 1) (maps:to_list attributes))
tuple
(error 'badarg (list tuple))))
((tuple) (error 'badarg (list tuple))))
(defun attribute?
(((tuple name value)) (when (is_binary name) (is_binary value)) 'true)
(((tuple name value))
(when (is_binary name) (is_integer value) (>= value (- (bsl 1 62))) (< value (bsl 1 62)))
'true)
((_) 'false))
|