aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/lux/world/env.jvm.lux
blob: 29266cc8409980920219a0b52cb9ee6dd2fb8a6e (plain)
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
(;module:
  lux
  (lux (data [text]
             (format [context #+ Context])
             (coll [list "L/" Functor<List>]
                   ["d" dict]))
       [io #- run]
       [host #+ jvm-import]))

(jvm-import java.lang.String)

(jvm-import (java.util.Map$Entry k v)
  (getKey [] k)
  (getValue [] v))

(jvm-import (java.util.Iterator a)
  (hasNext [] boolean)
  (next [] a))

(jvm-import (java.util.Set a)
  (iterator [] (Iterator a)))

(jvm-import (java.util.Map k v)
  (entrySet [] (Set (Map$Entry k v))))

(jvm-import java.lang.System
  (#static getenv [] (java.util.Map String String)))

(def: (consume-iterator f iterator)
  (All [a b] (-> (-> a b) (Iterator a) (List b)))
  (if (Iterator.hasNext [] iterator)
    (#;Cons (f (Iterator.next [] iterator))
            (consume-iterator f iterator))
    #;Nil))

(def: (entry-to-kv entry)
  (All [k v] (-> (Map$Entry k v) [k v]))
  [(Map$Entry.getKey [] entry)
   (Map$Entry.getValue [] entry)])

(def: #export read
  (IO Context)
  (io (|> (System.getenv [])
          (Map.entrySet [])
          (Set.iterator [])
          (consume-iterator entry-to-kv)
          (d;from-list text;Hash<Text>))))