wasi

This module exposes a Kotlin/Wasm API inspired from WASI Preview2 in order to expose low level WASI Preview1 capabilities.

fun main() {
    print()
    clock()
    random()
    filesystem()
    cli()
}

private fun print() {
    Wasi.out.println("== Print ==")
    Wasi.out.println("Hello, world!")
    Wasi.err.println("Error")
}

private fun clock() {
    Wasi.out.println("\n== Clock ==")
    val now = Wasi.wallClock.now()
    Wasi.out.println(now)
}

private fun filesystem() {
    Wasi.out.println("\n== Filesystem ==")
    Wasi.createDirectoryAt("testDir")
    val descriptor = Wasi.openAt("testFile",
        OpenFlags(create = true),
        DescriptorFlags(read = true, write = true)
    )
    val content = "Hello, file!"
    Wasi.write(descriptor, content.encodeToByteArray())
    val readResult = Wasi.read(descriptor, content.length.toULong())
    Wasi.out.println(readResult.data.decodeToString())
    Wasi.readDirectory(StandardDescriptor.FIRST_PREOPEN,".").forEach { Wasi.out.println(it) }
}

private fun random() {
    Wasi.out.println("\n== Random ==")
    val pseudoGenerator = Wasi.seededRandom()
    Wasi.out.println("Pseudo random number generator")
    Wasi.out.println(pseudoGenerator.nextLong())
    Wasi.out.println(pseudoGenerator.nextLong())
    val secureGenerator = Wasi.secureRandom()
    Wasi.out.println("Secure random number generator")
    Wasi.out.println(secureGenerator.nextLong())
    Wasi.out.println(secureGenerator.nextLong())
}

private fun cli() {
    Wasi.out.println("\n== CLI ==")
    Wasi.args.forEach { Wasi.out.println(it) }
    Wasi.envVars.forEach { Wasi.out.println(it) }
}

Packages

Link copied to clipboard

Package for WASI public API.