aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/jid.ml16
1 files changed, 16 insertions, 0 deletions
diff --git a/lib/jid.ml b/lib/jid.ml
index 827cf9d..2ca0795 100644
--- a/lib/jid.ml
+++ b/lib/jid.ml
@@ -8,6 +8,22 @@ exception InvalidUTF8
type uchars = Uchar.t list
+let uchars_of_string s : uchars =
+ let open Uchar in
+ let len = String.length s in
+ let rec loop acc i =
+ if i >= len then
+ List.rev acc
+ else
+ let c = String.get_utf_8_uchar s i in
+ if not (utf_decode_is_valid c)
+ then raise InvalidUTF8
+ else
+ let k = utf_decode_length c in
+ let u = utf_decode_uchar c in
+ loop (u :: acc) (i + k)
+ in loop [] (String.length s)
+
let of_string (jid : string) : t =
let open Uchar in
let len = String.length jid in