Small, portable WASIp1 I/O SDK for building MoonBit CLI tools and agent skills.
///|
test "copy text between files" {
let dir = "readme_copy_text"
@miniio.remove(dir) catch {
Noent => ()
Notempty => @miniio.rmdir(dir, recursive=true)
e => raise e
}
@miniio.mkdir(dir)
defer (@miniio.rmdir(dir, recursive=true) catch { _ => () })
@miniio.write_text_file(dir + "/input.txt", "hello\n")
@miniio.copy_file(dir + "/input.txt", dir + "/output.txt")
inspect(@miniio.read_text_file(dir + "/output.txt"), content="hello\n")
}///|
test "append log file" {
let dir = "readme_append_log"
@miniio.remove(dir) catch {
Noent => ()
Notempty => @miniio.rmdir(dir, recursive=true)
e => raise e
}
@miniio.mkdir(dir)
defer (@miniio.rmdir(dir, recursive=true) catch { _ => () })
let path = dir + "/tool.log"
@miniio.write_text_file(path, "start\n")
@miniio.write_text_file(path, "done\n", append=true)
inspect(@miniio.read_text_file(path), content="start\ndone\n")
}///|
test "read and write json" {
let dir = "readme_json"
@miniio.remove(dir) catch {
Noent => ()
Notempty => @miniio.rmdir(dir, recursive=true)
e => raise e
}
@miniio.mkdir(dir)
defer (@miniio.rmdir(dir, recursive=true) catch { _ => () })
let path = dir + "/manifest.json"
@miniio.write_json_file(path, { "name": "miniio", "portable": true })
inspect(
@miniio.read_json_file(path).stringify(),
content="{\"name\":\"miniio\",\"portable\":true}",
)
}///|
test "list and remove directories" {
let dir = "readme_list_remove"
@miniio.remove(dir) catch {
Noent => ()
Notempty => @miniio.rmdir(dir, recursive=true)
e => raise e
}
@miniio.mkdir(dir)
@miniio.write_text_file(dir + "/b.txt", "b")
@miniio.write_text_file(dir + "/a.txt", "a")
debug_inspect(
@miniio.readdir(dir, sort=true),
content="[\"a.txt\", \"b.txt\"]",
)
@miniio.rmdir(dir, recursive=true)
inspect(@miniio.exists(dir), content="false")
}wasmtime run --dir ./data::data _build/wasm/debug/build/<module>/<package>.wasm data/input.txtprintf '{"name":"miniio","ok":true}' | moon run -c 'import {
"moonbit-community/miniio" @miniio,
"moonbit-community/miniio/io",
"moonbitlang/core/json" @json,
}
fn main {
try {
let input = @miniio.stdin.read_all().text()
let value = @json.parse(input)
@miniio.stdout.write_text(value.stringify(indent=2) + "\n")
} catch {
e => {
@miniio.stderr.write_text("jq failed: \{e}\n") catch { _ => () }
@miniio.exit(1)
}
}
}'moon check
moon test
deno task testmoon run demopub(all) suberror Errno {
Success
TooBig
Acces
Addrinuse
Addrnotavail
Afnosupport
Again
Already
Badf
Badmsg
Busy
Canceled
Child
Connaborted
Connrefused
Connreset
Deadlock
Destaddrreq
Dom
Dquot
Exist
Fault
Fbig
Hostunreach
Idrm
Ilseq
Inprogress
Intr
Inval
IO
Isconn
Isdir
Loop
Mfile
Mlink
Msgsize
Multihop
Nametoolong
Netdown
Netreset
Netunreach
Nfile
Nobufs
Nodev
Noent
Noexec
Nolck
Nolink
Nomem
Nomsg
Noprotoopt
Nospc
Nosys
Notconn
Notdir
Notempty
Notrecoverable
Notsock
Notsup
Notty
Nxio
Overflow
Ownerdead
Perm
Pipe
Proto
Protonosupport
Prototype
Range
Rofs
Spipe
Srch
Stale
Timedout
Txtbsy
Xdev
Notcapable
} derive(Eq, Debug)type Filefn copy_file(src : StringView, dst : StringView, append? : Bool, create_mode? : CreateMode) -> Unit raise Errnofn open(path : StringView, mode? : Mode, append? : Bool, create_mode? : CreateMode, follow_symlink? : Bool) -> File raise Errnofn write_file(path : StringView, data : &Data, append? : Bool, create_mode? : CreateMode) -> Unit raise Errnofn write_json_file(path : StringView, json : Json, append? : Bool, create_mode? : CreateMode) -> Unit raise Errnofn write_text_file(path : StringView, text : StringView, append? : Bool, create_mode? : CreateMode) -> Unit raise ErrnoSmall, portable WASIp1 I/O SDK for building MoonBit CLI tools and agent skills.