native-cli.tri (2216B)
1 !import base as B 2 !import io_v2 as IO 3 !export compile 4 !export pure 5 !export write 6 !export unsupported 7 !export inspect 8 !export capabilities 9 !export groups 10 !export failed 11 !export cancelled 12 !export divergent 13 !export legacy 14 !export future 15 16 pure = IO.io (IO.pure 42) 17 write path = IO.io <| IO.scope (owner : IO.require (IO.openWriter owner path) (writer : 18 IO.require (IO.writeSome writer [0 255 65]) IO.pure)) 19 diverge seed = diverge seed 20 unsupported seed = IO.io <| IO.bind (IO.request "tcp" 1 "connect" (diverge seed)) (reply : case reply of 21 (t, (["unsupported" "tcp/connect" _ "none"], t)) = IO.pure 1 22 _ = IO.fail "invalid unsupported reply") 23 inspect seed = IO.io <| IO.require (IO.inspect (IO.request "file" 1 "open-reader" (diverge seed))) (reply : case reply of 24 ["facility" "file" 1 "open-reader" "available"] = IO.pure 1 25 _ = IO.fail "invalid inspection") 26 find key rows = case rows of 27 [[name value] | rest] = case name of 28 ^key = value 29 _ = find key rest 30 _ = t 31 capabilities = IO.io <| IO.require IO.capabilities (rows : case [(find "backend" rows) (find "authority" rows) (find "io-version" rows)] of 32 ["zig-native" "os-process" 2] = IO.pure 1 33 _ = IO.fail "invalid capabilities") 34 failed seed = IO.io (IO.fail (diverge seed)) 35 cancelled seed = IO.io (IO.cancelled (diverge seed)) 36 divergent seed = IO.io (diverge seed) 37 legacy = B.pair "tricuIO" (B.pair 1 (B.pair 0 23)) 38 future seed = B.pair "tricuIO" (B.pair 3 (diverge seed)) 39 40 compile worker workspace root identity name = IO.io <| IO.require (worker workspace root identity name) 41 (built : IO.pure (B.fst built)) 42 43 groups = IO.io <| IO.require IO.capabilities (rows : case find "groups" rows of 44 [["runtime" 1 ["capabilities" "inspect"]] 45 ["resource" 1 ["close"]] 46 ["stream" 1 ["read" "write"]] 47 ["file" 1 ["open-reader" "open-writer" "open-appender" "open-update" "seek" "position" "size" "resize" "sync"]] 48 ["path" 1 ["stat" "lstat" "remove-file" "rename"]] 49 ["directory" 1 ["create" "remove" "sync"]] 50 ["stage" 1 ["open" "seal" "publish"]] 51 ["digest" 1 ["open" "update" "finish"]] 52 ["indexed-tree" 1 ["read" "hash" "write" "verify"]] 53 ["utf8" 1 ["encode" "decode"]]] = IO.pure 1 54 _ = IO.fail "incorrect advertised groups")