// Generated by Brevity. Do not edit. // cli/environment.wit // cli/exit.wit // cli/imports.wit // cli/run.wit // cli/stdio.wit // cli/terminal.wit package wit.wasi.cli.v0_2_0 import com.dylibso.chicory.runtime.ExportFunction import com.dylibso.chicory.runtime.HostFunction import com.dylibso.chicory.runtime.Instance import com.dylibso.chicory.runtime.Store import com.dylibso.chicory.runtime.WasmFunctionHandle import com.dylibso.chicory.wasm.types.FunctionType import com.dylibso.chicory.wasm.types.ValType import dev.wasmo.brevity.HostBridge import dev.wasmo.brevity.Result import dev.wasmo.brevity.World import dev.wasmo.brevity.`get` import kotlin.Byte import kotlin.Pair import kotlin.String import kotlin.UByteArray import kotlin.Unit import kotlin.collections.List import kotlin.text.encodeToByteArray import wit.wasi.clocks.v0_2_0.BridgeMonotonicClock import wit.wasi.clocks.v0_2_0.BridgeWallClock import wit.wasi.filesystem.v0_2_0.BridgePreopens import wit.wasi.filesystem.v0_2_0.BridgeTypes import wit.wasi.io.v0_2_0.BridgePoll import wit.wasi.io.v0_2_0.Error import wit.wasi.io.v0_2_0.Poll import wit.wasi.io.v0_2_0.Streams import wit.wasi.random.v0_2_0.BridgeInsecure import wit.wasi.random.v0_2_0.BridgeInsecureSeed import wit.wasi.random.v0_2_0.BridgeRandom import wit.wasi.sockets.v0_2_0.BridgeInstanceNetwork import wit.wasi.sockets.v0_2_0.BridgeIpNameLookup import wit.wasi.sockets.v0_2_0.BridgeTcpCreateSocket import wit.wasi.sockets.v0_2_0.BridgeUdpCreateSocket import wit.wasi.sockets.v0_2_0.IpNameLookup import wit.wasi.sockets.v0_2_0.Network import wit.wasi.sockets.v0_2_0.Tcp import wit.wasi.sockets.v0_2_0.Udp import wit.wasi.filesystem.v0_2_0.Types as FilesystemV0_2_0Types import wit.wasi.http.v0_2_0.Types as HttpV0_2_0Types internal class BridgeEnvironment( private val bridge: HostBridge, ) : Environment { internal lateinit var getEnvironment: ExportFunction internal lateinit var getArguments: ExportFunction internal lateinit var initialCwd: ExportFunction override fun getEnvironment(): List> { val result = getEnvironment.apply( ) val listAddress = bridge.memory.readInt(result[0].toInt()) val length = bridge.memory.readInt(result[0].toInt() + 4) val list = List>(length) { i -> val elementAddress = listAddress + i * 16 val stringAddress = bridge.memory.readInt(elementAddress) val stringByteCount = bridge.memory.readInt(elementAddress + 4) val stringAddress_ = bridge.memory.readInt(elementAddress + 8) val stringByteCount_ = bridge.memory.readInt(elementAddress + 12) (bridge.memory.readString(stringAddress, stringByteCount) to bridge.memory.readString(stringAddress_, stringByteCount_)) } return list } override fun getArguments(): List { val result = getArguments.apply( ) val listAddress = bridge.memory.readInt(result[0].toInt()) val length = bridge.memory.readInt(result[0].toInt() + 4) val list = List(length) { i -> val elementAddress = listAddress + i * 8 val stringAddress = bridge.memory.readInt(elementAddress) val stringByteCount = bridge.memory.readInt(elementAddress + 4) bridge.memory.readString(stringAddress, stringByteCount) } return list } override fun initialCwd(): String? { val result = initialCwd.apply( ) val variant = when (bridge.memory.read(result[0].toInt()).toInt()) { 0 -> { null } 1 -> { val stringAddress = bridge.memory.readInt(result[0].toInt() + 4) val stringByteCount = bridge.memory.readInt(result[0].toInt() + 8) bridge.memory.readString(stringAddress, stringByteCount) } else -> error("unexpected case") } return variant } } internal class BridgeExit( private val bridge: HostBridge, ) : Exit { internal lateinit var exit: ExportFunction override fun exit(status: Result<*, *>) { val variant = status val discriminator = when (variant) { is Result.Ok -> { 0 } is Result.Error -> { 1 } } exit.apply( discriminator.toLong(), ) } } public fun Imports.World(hostFactory: (Unit) -> Imports.Host): World { val bridge = HostBridge() val guest = Unit val host = hostFactory(guest) return BridgeImports(bridge, guest, host) } internal class BridgeImports( private val bridge: HostBridge, override val guest: Unit, override val host: Imports.Host, ) : World { override fun initExports(instance: Instance) { this.bridge.init(instance) } override fun initImports(store: Store) { store.addFunction( HostFunction( "wasi:cli/environment@0.2.0", "get-environment", FunctionType.of( listOf(ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = host.environment val result = self.getEnvironment() val resultParameter = args[0].toInt() val listAddress = bridge.allocate(result.size * 16) for (i in result.indices) { val elementAddress = listAddress + i * 16 val byteArray = result[i].first.encodeToByteArray() val stringAddress = bridge.allocate(byteArray.size) bridge.memory.write(stringAddress, byteArray) val stringAddress_ = stringAddress val stringByteCount = byteArray.size bridge.memory.writeI32(elementAddress, stringAddress_) bridge.memory.writeI32(elementAddress + 4, stringByteCount) val byteArray_ = result[i].second.encodeToByteArray() val stringAddress__ = bridge.allocate(byteArray_.size) bridge.memory.write(stringAddress__, byteArray_) val stringAddress___ = stringAddress__ val stringByteCount_ = byteArray_.size bridge.memory.writeI32(elementAddress + 8, stringAddress___) bridge.memory.writeI32(elementAddress + 12, stringByteCount_) } bridge.memory.writeI32(resultParameter, listAddress) bridge.memory.writeI32(resultParameter + 4, result.size) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:cli/environment@0.2.0", "get-arguments", FunctionType.of( listOf(ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = host.environment val result = self.getArguments() val resultParameter = args[0].toInt() val listAddress = bridge.allocate(result.size * 8) for (i in result.indices) { val elementAddress = listAddress + i * 8 val byteArray = result[i].encodeToByteArray() val stringAddress = bridge.allocate(byteArray.size) bridge.memory.write(stringAddress, byteArray) val stringAddress_ = stringAddress val stringByteCount = byteArray.size bridge.memory.writeI32(elementAddress, stringAddress_) bridge.memory.writeI32(elementAddress + 4, stringByteCount) } bridge.memory.writeI32(resultParameter, listAddress) bridge.memory.writeI32(resultParameter + 4, result.size) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:cli/environment@0.2.0", "initial-cwd", FunctionType.of( listOf(ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = host.environment val result = self.initialCwd() val resultParameter = args[0].toInt() val discriminator: Byte = when (val variant = result) { null -> { 0 } else -> { val byteArray = variant.encodeToByteArray() val stringAddress = bridge.allocate(byteArray.size) bridge.memory.write(stringAddress, byteArray) val stringAddress_ = stringAddress val stringByteCount = byteArray.size bridge.memory.writeI32(resultParameter + 4, stringAddress_) bridge.memory.writeI32(resultParameter + 8, stringByteCount) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:cli/exit@0.2.0", "exit", FunctionType.of( listOf(ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val variant = when (args[0].toInt()) { 0 -> { Result.Ok(kotlin.Unit) } 1 -> { Result.Error(kotlin.Unit) } else -> error("unexpected case") } val self = host.exit self.exit( status = variant, ) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:cli/stdin@0.2.0", "get-stdin", FunctionType.of( listOf(), listOf(ValType.I32), ), WasmFunctionHandle { instance, args -> val self = host.stdin val result = self.getStdin() return@WasmFunctionHandle longArrayOf(bridge.toId(result).toLong()) }, ) ) store.addFunction( HostFunction( "wasi:cli/stdout@0.2.0", "get-stdout", FunctionType.of( listOf(), listOf(ValType.I32), ), WasmFunctionHandle { instance, args -> val self = host.stdout val result = self.getStdout() return@WasmFunctionHandle longArrayOf(bridge.toId(result).toLong()) }, ) ) store.addFunction( HostFunction( "wasi:cli/stderr@0.2.0", "get-stderr", FunctionType.of( listOf(), listOf(ValType.I32), ), WasmFunctionHandle { instance, args -> val self = host.stderr val result = self.getStderr() return@WasmFunctionHandle longArrayOf(bridge.toId(result).toLong()) }, ) ) store.addFunction( HostFunction( "wasi:cli/terminal-stdin@0.2.0", "get-terminal-stdin", FunctionType.of( listOf(ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = host.terminalStdin val result = self.getTerminalStdin() val resultParameter = args[0].toInt() val discriminator: Byte = when (val variant = result) { null -> { 0 } else -> { // TODO: ResourceEncoder 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:cli/terminal-stdout@0.2.0", "get-terminal-stdout", FunctionType.of( listOf(ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = host.terminalStdout val result = self.getTerminalStdout() val resultParameter = args[0].toInt() val discriminator: Byte = when (val variant = result) { null -> { 0 } else -> { // TODO: ResourceEncoder 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:cli/terminal-stderr@0.2.0", "get-terminal-stderr", FunctionType.of( listOf(ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = host.terminalStderr val result = self.getTerminalStderr() val resultParameter = args[0].toInt() val discriminator: Byte = when (val variant = result) { null -> { 0 } else -> { // TODO: ResourceEncoder 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:clocks/monotonic-clock@0.2.0", "now", FunctionType.of( listOf(), listOf(ValType.I32), ), WasmFunctionHandle { instance, args -> val self = host.monotonicClock val result = self.now() return@WasmFunctionHandle longArrayOf(TODO("lower wit.wasi.clocks.v0_2_0.MonotonicClock.Instant").toLong()) }, ) ) store.addFunction( HostFunction( "wasi:clocks/monotonic-clock@0.2.0", "resolution", FunctionType.of( listOf(), listOf(ValType.I32), ), WasmFunctionHandle { instance, args -> val self = host.monotonicClock val result = self.resolution() return@WasmFunctionHandle longArrayOf(TODO("lower wit.wasi.clocks.v0_2_0.MonotonicClock.Duration").toLong()) }, ) ) store.addFunction( HostFunction( "wasi:clocks/monotonic-clock@0.2.0", "subscribe-instant", FunctionType.of( listOf(ValType.I32), listOf(ValType.I32), ), WasmFunctionHandle { instance, args -> val self = host.monotonicClock val result = self.subscribeInstant( when_ = TODO("lift wit.wasi.clocks.v0_2_0.MonotonicClock.Instant"), ) return@WasmFunctionHandle longArrayOf(bridge.toId(result).toLong()) }, ) ) store.addFunction( HostFunction( "wasi:clocks/monotonic-clock@0.2.0", "subscribe-duration", FunctionType.of( listOf(ValType.I32), listOf(ValType.I32), ), WasmFunctionHandle { instance, args -> val self = host.monotonicClock val result = self.subscribeDuration( when_ = TODO("lift wit.wasi.clocks.v0_2_0.MonotonicClock.Duration"), ) return@WasmFunctionHandle longArrayOf(bridge.toId(result).toLong()) }, ) ) store.addFunction( HostFunction( "wasi:clocks/wall-clock@0.2.0", "now", FunctionType.of( listOf(), listOf(ValType.I32), ), WasmFunctionHandle { instance, args -> val self = host.wallClock val result = self.now() return@WasmFunctionHandle longArrayOf(TODO("lower wit.wasi.clocks.v0_2_0.WallClock.Datetime").toLong()) }, ) ) store.addFunction( HostFunction( "wasi:clocks/wall-clock@0.2.0", "resolution", FunctionType.of( listOf(), listOf(ValType.I32), ), WasmFunctionHandle { instance, args -> val self = host.wallClock val result = self.resolution() return@WasmFunctionHandle longArrayOf(TODO("lower wit.wasi.clocks.v0_2_0.WallClock.Datetime").toLong()) }, ) ) store.addFunction( HostFunction( "wasi:filesystem/types@0.2.0", "filesystem-error-code", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = host.types val result = self.filesystemErrorCode( err = TODO("lift wit.wasi.io.v0_2_0.Error.Error"), ) val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { null -> { 0 } else -> { val discriminator_: Byte = when (val variant_ = variant) { FilesystemV0_2_0Types.ErrorCode.Access -> { 0 } FilesystemV0_2_0Types.ErrorCode.WouldBlock -> { 1 } FilesystemV0_2_0Types.ErrorCode.Already -> { 2 } FilesystemV0_2_0Types.ErrorCode.BadDescriptor -> { 3 } FilesystemV0_2_0Types.ErrorCode.Busy -> { 4 } FilesystemV0_2_0Types.ErrorCode.Deadlock -> { 5 } FilesystemV0_2_0Types.ErrorCode.Quota -> { 6 } FilesystemV0_2_0Types.ErrorCode.Exist -> { 7 } FilesystemV0_2_0Types.ErrorCode.FileTooLarge -> { 8 } FilesystemV0_2_0Types.ErrorCode.IllegalByteSequence -> { 9 } FilesystemV0_2_0Types.ErrorCode.InProgress -> { 10 } FilesystemV0_2_0Types.ErrorCode.Interrupted -> { 11 } FilesystemV0_2_0Types.ErrorCode.Invalid -> { 12 } FilesystemV0_2_0Types.ErrorCode.Io -> { 13 } FilesystemV0_2_0Types.ErrorCode.IsDirectory -> { 14 } FilesystemV0_2_0Types.ErrorCode.Loop -> { 15 } FilesystemV0_2_0Types.ErrorCode.TooManyLinks -> { 16 } FilesystemV0_2_0Types.ErrorCode.MessageSize -> { 17 } FilesystemV0_2_0Types.ErrorCode.NameTooLong -> { 18 } FilesystemV0_2_0Types.ErrorCode.NoDevice -> { 19 } FilesystemV0_2_0Types.ErrorCode.NoEntry -> { 20 } FilesystemV0_2_0Types.ErrorCode.NoLock -> { 21 } FilesystemV0_2_0Types.ErrorCode.InsufficientMemory -> { 22 } FilesystemV0_2_0Types.ErrorCode.InsufficientSpace -> { 23 } FilesystemV0_2_0Types.ErrorCode.NotDirectory -> { 24 } FilesystemV0_2_0Types.ErrorCode.NotEmpty -> { 25 } FilesystemV0_2_0Types.ErrorCode.NotRecoverable -> { 26 } FilesystemV0_2_0Types.ErrorCode.Unsupported -> { 27 } FilesystemV0_2_0Types.ErrorCode.NoTty -> { 28 } FilesystemV0_2_0Types.ErrorCode.NoSuchDevice -> { 29 } FilesystemV0_2_0Types.ErrorCode.Overflow -> { 30 } FilesystemV0_2_0Types.ErrorCode.NotPermitted -> { 31 } FilesystemV0_2_0Types.ErrorCode.Pipe -> { 32 } FilesystemV0_2_0Types.ErrorCode.ReadOnly -> { 33 } FilesystemV0_2_0Types.ErrorCode.InvalidSeek -> { 34 } FilesystemV0_2_0Types.ErrorCode.TextFileBusy -> { 35 } FilesystemV0_2_0Types.ErrorCode.CrossDevice -> { 36 } } bridge.memory.writeByte(resultParameter + 1, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:filesystem/preopens@0.2.0", "get-directories", FunctionType.of( listOf(ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = host.preopens val result = self.getDirectories() val resultParameter = args[0].toInt() val listAddress = bridge.allocate(result.size * 12) for (i in result.indices) { val elementAddress = listAddress + i * 12 // TODO: ResourceEncoder val byteArray = result[i].second.encodeToByteArray() val stringAddress = bridge.allocate(byteArray.size) bridge.memory.write(stringAddress, byteArray) val stringAddress_ = stringAddress val stringByteCount = byteArray.size bridge.memory.writeI32(elementAddress + 4, stringAddress_) bridge.memory.writeI32(elementAddress + 8, stringByteCount) } bridge.memory.writeI32(resultParameter, listAddress) bridge.memory.writeI32(resultParameter + 4, result.size) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/instance-network@0.2.0", "instance-network", FunctionType.of( listOf(), listOf(ValType.I32), ), WasmFunctionHandle { instance, args -> val self = host.instanceNetwork val result = self.instanceNetwork() return@WasmFunctionHandle longArrayOf(bridge.toId(result).toLong()) }, ) ) store.addFunction( HostFunction( "wasi:sockets/udp-create-socket@0.2.0", "create-udp-socket", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val variant = when (args[0].toInt()) { 0 -> { Network.IpAddressFamily.Ipv4 } 1 -> { Network.IpAddressFamily.Ipv6 } else -> error("unexpected case") } val self = host.udpCreateSocket val result = self.createUdpSocket( addressFamily = variant, ) val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant_ = result) { is Result.Ok -> { // TODO: ResourceEncoder 0 } is Result.Error -> { val discriminator_: Byte = when (val variant__ = variant_.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/tcp-create-socket@0.2.0", "create-tcp-socket", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val variant = when (args[0].toInt()) { 0 -> { Network.IpAddressFamily.Ipv4 } 1 -> { Network.IpAddressFamily.Ipv6 } else -> error("unexpected case") } val self = host.tcpCreateSocket val result = self.createTcpSocket( addressFamily = variant, ) val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant_ = result) { is Result.Ok -> { // TODO: ResourceEncoder 0 } is Result.Error -> { val discriminator_: Byte = when (val variant__ = variant_.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/ip-name-lookup@0.2.0", "resolve-addresses", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = host.ipNameLookup val result = self.resolveAddresses( network = TODO("lift wit.wasi.sockets.v0_2_0.Network.Network"), name = bridge.memory.readString(args[1].toInt(), args[2].toInt()), ) val resultParameter = args[3].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { // TODO: ResourceEncoder 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:random/random@0.2.0", "get-random-bytes", FunctionType.of( listOf(ValType.I64, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = host.random val result = self.getRandomBytes( len = args[0].toULong(), ) val resultParameter = args[1].toInt() val listAddress = bridge.allocate(result.size * 4) for (i in result.indices) { val elementAddress = listAddress + i * 4 bridge.memory.writeI32(elementAddress, result[i].toInt()) } bridge.memory.writeI32(resultParameter, listAddress) bridge.memory.writeI32(resultParameter + 4, result.size) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:random/random@0.2.0", "get-random-u64", FunctionType.of( listOf(), listOf(ValType.I64), ), WasmFunctionHandle { instance, args -> val self = host.random val result = self.getRandomU64() return@WasmFunctionHandle longArrayOf(result.toLong()) }, ) ) store.addFunction( HostFunction( "wasi:random/insecure@0.2.0", "get-insecure-random-bytes", FunctionType.of( listOf(ValType.I64, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = host.insecure val result = self.getInsecureRandomBytes( len = args[0].toULong(), ) val resultParameter = args[1].toInt() val listAddress = bridge.allocate(result.size * 4) for (i in result.indices) { val elementAddress = listAddress + i * 4 bridge.memory.writeI32(elementAddress, result[i].toInt()) } bridge.memory.writeI32(resultParameter, listAddress) bridge.memory.writeI32(resultParameter + 4, result.size) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:random/insecure@0.2.0", "get-insecure-random-u64", FunctionType.of( listOf(), listOf(ValType.I64), ), WasmFunctionHandle { instance, args -> val self = host.insecure val result = self.getInsecureRandomU64() return@WasmFunctionHandle longArrayOf(result.toLong()) }, ) ) store.addFunction( HostFunction( "wasi:random/insecure-seed@0.2.0", "insecure-seed", FunctionType.of( listOf(ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = host.insecureSeed val result = self.insecureSeed() val resultParameter = args[0].toInt() bridge.memory.writeLong(resultParameter, result.first.toLong()) bridge.memory.writeLong(resultParameter + 8, result.second.toLong()) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:io/poll@0.2.0", "poll", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val listAddress = args[0].toInt() val length = args[1].toInt() val list = List(length) { i -> val elementAddress = listAddress + i * 4 TODO("load wit.wasi.io.v0_2_0.Poll.Pollable") } val self = host.poll val result = self.poll( in_ = list, ) val resultParameter = args[2].toInt() val listAddress_ = bridge.allocate(result.size * 4) for (i_ in result.indices) { val elementAddress_ = listAddress_ + i_ * 4 bridge.memory.writeI32(elementAddress_, result[i_].toInt()) } bridge.memory.writeI32(resultParameter, listAddress_) bridge.memory.writeI32(resultParameter + 4, result.size) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:io/streams@0.2.0", "[method]input-stream.read", FunctionType.of( listOf(ValType.I32, ValType.I64, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.read( len = args[1].toULong(), ) val resultParameter = args[2].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { val listAddress = bridge.allocate(variant.value.size * 4) for (i in variant.value.indices) { val elementAddress = listAddress + i * 4 bridge.memory.writeI32(elementAddress, variant.value[i].toInt()) } bridge.memory.writeI32(resultParameter + 4, listAddress) bridge.memory.writeI32(resultParameter + 8, variant.value.size) 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { is Streams.StreamError.LastOperationFailed -> { // TODO: ResourceEncoder 0 } Streams.StreamError.Closed -> { 1 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:io/streams@0.2.0", "[method]input-stream.blocking-read", FunctionType.of( listOf(ValType.I32, ValType.I64, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.blockingRead( len = args[1].toULong(), ) val resultParameter = args[2].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { val listAddress = bridge.allocate(variant.value.size * 4) for (i in variant.value.indices) { val elementAddress = listAddress + i * 4 bridge.memory.writeI32(elementAddress, variant.value[i].toInt()) } bridge.memory.writeI32(resultParameter + 4, listAddress) bridge.memory.writeI32(resultParameter + 8, variant.value.size) 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { is Streams.StreamError.LastOperationFailed -> { // TODO: ResourceEncoder 0 } Streams.StreamError.Closed -> { 1 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:io/streams@0.2.0", "[method]input-stream.skip", FunctionType.of( listOf(ValType.I32, ValType.I64, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.skip( len = args[1].toULong(), ) val resultParameter = args[2].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { bridge.memory.writeLong(resultParameter + 4, variant.value.toLong()) 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { is Streams.StreamError.LastOperationFailed -> { // TODO: ResourceEncoder 0 } Streams.StreamError.Closed -> { 1 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:io/streams@0.2.0", "[method]input-stream.blocking-skip", FunctionType.of( listOf(ValType.I32, ValType.I64, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.blockingSkip( len = args[1].toULong(), ) val resultParameter = args[2].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { bridge.memory.writeLong(resultParameter + 4, variant.value.toLong()) 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { is Streams.StreamError.LastOperationFailed -> { // TODO: ResourceEncoder 0 } Streams.StreamError.Closed -> { 1 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:io/streams@0.2.0", "[method]input-stream.subscribe", FunctionType.of( listOf(ValType.I32), listOf(ValType.I32), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.subscribe() return@WasmFunctionHandle longArrayOf(bridge.toId(result).toLong()) }, ) ) store.addFunction( HostFunction( "wasi:io/streams@0.2.0", "[resource-drop]input-stream", FunctionType.of( listOf(ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) self.close() return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:io/streams@0.2.0", "[method]output-stream.check-write", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.checkWrite() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { bridge.memory.writeLong(resultParameter + 4, variant.value.toLong()) 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { is Streams.StreamError.LastOperationFailed -> { // TODO: ResourceEncoder 0 } Streams.StreamError.Closed -> { 1 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:io/streams@0.2.0", "[method]output-stream.write", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val listAddress = args[1].toInt() val length = args[2].toInt() val list = UByteArray(length) { i -> val elementAddress = listAddress + i * 4 bridge.memory.readInt(elementAddress).toUByte() } val self = bridge.`get`(args[0].toInt()) val result = self.write( contents = list, ) val resultParameter = args[3].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { is Streams.StreamError.LastOperationFailed -> { // TODO: ResourceEncoder 0 } Streams.StreamError.Closed -> { 1 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:io/streams@0.2.0", "[method]output-stream.blocking-write-and-flush", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val listAddress = args[1].toInt() val length = args[2].toInt() val list = UByteArray(length) { i -> val elementAddress = listAddress + i * 4 bridge.memory.readInt(elementAddress).toUByte() } val self = bridge.`get`(args[0].toInt()) val result = self.blockingWriteAndFlush( contents = list, ) val resultParameter = args[3].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { is Streams.StreamError.LastOperationFailed -> { // TODO: ResourceEncoder 0 } Streams.StreamError.Closed -> { 1 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:io/streams@0.2.0", "[method]output-stream.flush", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.flush() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { is Streams.StreamError.LastOperationFailed -> { // TODO: ResourceEncoder 0 } Streams.StreamError.Closed -> { 1 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:io/streams@0.2.0", "[method]output-stream.blocking-flush", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.blockingFlush() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { is Streams.StreamError.LastOperationFailed -> { // TODO: ResourceEncoder 0 } Streams.StreamError.Closed -> { 1 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:io/streams@0.2.0", "[method]output-stream.subscribe", FunctionType.of( listOf(ValType.I32), listOf(ValType.I32), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.subscribe() return@WasmFunctionHandle longArrayOf(bridge.toId(result).toLong()) }, ) ) store.addFunction( HostFunction( "wasi:io/streams@0.2.0", "[method]output-stream.write-zeroes", FunctionType.of( listOf(ValType.I32, ValType.I64, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.writeZeroes( len = args[1].toULong(), ) val resultParameter = args[2].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { is Streams.StreamError.LastOperationFailed -> { // TODO: ResourceEncoder 0 } Streams.StreamError.Closed -> { 1 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:io/streams@0.2.0", "[method]output-stream.blocking-write-zeroes-and-flush", FunctionType.of( listOf(ValType.I32, ValType.I64, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.blockingWriteZeroesAndFlush( len = args[1].toULong(), ) val resultParameter = args[2].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { is Streams.StreamError.LastOperationFailed -> { // TODO: ResourceEncoder 0 } Streams.StreamError.Closed -> { 1 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:io/streams@0.2.0", "[method]output-stream.splice", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I64, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.splice( src = TODO("lift wit.wasi.io.v0_2_0.Streams.InputStream"), len = args[2].toULong(), ) val resultParameter = args[3].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { bridge.memory.writeLong(resultParameter + 4, variant.value.toLong()) 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { is Streams.StreamError.LastOperationFailed -> { // TODO: ResourceEncoder 0 } Streams.StreamError.Closed -> { 1 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:io/streams@0.2.0", "[method]output-stream.blocking-splice", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I64, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.blockingSplice( src = TODO("lift wit.wasi.io.v0_2_0.Streams.InputStream"), len = args[2].toULong(), ) val resultParameter = args[3].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { bridge.memory.writeLong(resultParameter + 4, variant.value.toLong()) 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { is Streams.StreamError.LastOperationFailed -> { // TODO: ResourceEncoder 0 } Streams.StreamError.Closed -> { 1 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:io/streams@0.2.0", "[resource-drop]output-stream", FunctionType.of( listOf(ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) self.close() return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:cli/terminal-input@0.2.0", "[resource-drop]terminal-input", FunctionType.of( listOf(ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) self.close() return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:cli/terminal-output@0.2.0", "[resource-drop]terminal-output", FunctionType.of( listOf(ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) self.close() return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:io/poll@0.2.0", "[method]pollable.ready", FunctionType.of( listOf(ValType.I32), listOf(ValType.I32), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.ready() return@WasmFunctionHandle longArrayOf((if (result) 1 else 0).toLong()) }, ) ) store.addFunction( HostFunction( "wasi:io/poll@0.2.0", "[method]pollable.block", FunctionType.of( listOf(ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) self.block() return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:io/poll@0.2.0", "[resource-drop]pollable", FunctionType.of( listOf(ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) self.close() return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:io/error@0.2.0", "[method]error.to-debug-string", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.toDebugString() val resultParameter = args[1].toInt() val byteArray = result.encodeToByteArray() val stringAddress = bridge.allocate(byteArray.size) bridge.memory.write(stringAddress, byteArray) val stringAddress_ = stringAddress val stringByteCount = byteArray.size bridge.memory.writeI32(resultParameter, stringAddress_) bridge.memory.writeI32(resultParameter + 4, stringByteCount) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:io/error@0.2.0", "[resource-drop]error", FunctionType.of( listOf(ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) self.close() return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:filesystem/types@0.2.0", "[method]descriptor.read-via-stream", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.readViaStream( offset = TODO("lift wit.wasi.filesystem.v0_2_0.Types.Filesize"), ) val resultParameter = args[2].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { // TODO: ResourceEncoder 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { FilesystemV0_2_0Types.ErrorCode.Access -> { 0 } FilesystemV0_2_0Types.ErrorCode.WouldBlock -> { 1 } FilesystemV0_2_0Types.ErrorCode.Already -> { 2 } FilesystemV0_2_0Types.ErrorCode.BadDescriptor -> { 3 } FilesystemV0_2_0Types.ErrorCode.Busy -> { 4 } FilesystemV0_2_0Types.ErrorCode.Deadlock -> { 5 } FilesystemV0_2_0Types.ErrorCode.Quota -> { 6 } FilesystemV0_2_0Types.ErrorCode.Exist -> { 7 } FilesystemV0_2_0Types.ErrorCode.FileTooLarge -> { 8 } FilesystemV0_2_0Types.ErrorCode.IllegalByteSequence -> { 9 } FilesystemV0_2_0Types.ErrorCode.InProgress -> { 10 } FilesystemV0_2_0Types.ErrorCode.Interrupted -> { 11 } FilesystemV0_2_0Types.ErrorCode.Invalid -> { 12 } FilesystemV0_2_0Types.ErrorCode.Io -> { 13 } FilesystemV0_2_0Types.ErrorCode.IsDirectory -> { 14 } FilesystemV0_2_0Types.ErrorCode.Loop -> { 15 } FilesystemV0_2_0Types.ErrorCode.TooManyLinks -> { 16 } FilesystemV0_2_0Types.ErrorCode.MessageSize -> { 17 } FilesystemV0_2_0Types.ErrorCode.NameTooLong -> { 18 } FilesystemV0_2_0Types.ErrorCode.NoDevice -> { 19 } FilesystemV0_2_0Types.ErrorCode.NoEntry -> { 20 } FilesystemV0_2_0Types.ErrorCode.NoLock -> { 21 } FilesystemV0_2_0Types.ErrorCode.InsufficientMemory -> { 22 } FilesystemV0_2_0Types.ErrorCode.InsufficientSpace -> { 23 } FilesystemV0_2_0Types.ErrorCode.NotDirectory -> { 24 } FilesystemV0_2_0Types.ErrorCode.NotEmpty -> { 25 } FilesystemV0_2_0Types.ErrorCode.NotRecoverable -> { 26 } FilesystemV0_2_0Types.ErrorCode.Unsupported -> { 27 } FilesystemV0_2_0Types.ErrorCode.NoTty -> { 28 } FilesystemV0_2_0Types.ErrorCode.NoSuchDevice -> { 29 } FilesystemV0_2_0Types.ErrorCode.Overflow -> { 30 } FilesystemV0_2_0Types.ErrorCode.NotPermitted -> { 31 } FilesystemV0_2_0Types.ErrorCode.Pipe -> { 32 } FilesystemV0_2_0Types.ErrorCode.ReadOnly -> { 33 } FilesystemV0_2_0Types.ErrorCode.InvalidSeek -> { 34 } FilesystemV0_2_0Types.ErrorCode.TextFileBusy -> { 35 } FilesystemV0_2_0Types.ErrorCode.CrossDevice -> { 36 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:filesystem/types@0.2.0", "[method]descriptor.write-via-stream", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.writeViaStream( offset = TODO("lift wit.wasi.filesystem.v0_2_0.Types.Filesize"), ) val resultParameter = args[2].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { // TODO: ResourceEncoder 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { FilesystemV0_2_0Types.ErrorCode.Access -> { 0 } FilesystemV0_2_0Types.ErrorCode.WouldBlock -> { 1 } FilesystemV0_2_0Types.ErrorCode.Already -> { 2 } FilesystemV0_2_0Types.ErrorCode.BadDescriptor -> { 3 } FilesystemV0_2_0Types.ErrorCode.Busy -> { 4 } FilesystemV0_2_0Types.ErrorCode.Deadlock -> { 5 } FilesystemV0_2_0Types.ErrorCode.Quota -> { 6 } FilesystemV0_2_0Types.ErrorCode.Exist -> { 7 } FilesystemV0_2_0Types.ErrorCode.FileTooLarge -> { 8 } FilesystemV0_2_0Types.ErrorCode.IllegalByteSequence -> { 9 } FilesystemV0_2_0Types.ErrorCode.InProgress -> { 10 } FilesystemV0_2_0Types.ErrorCode.Interrupted -> { 11 } FilesystemV0_2_0Types.ErrorCode.Invalid -> { 12 } FilesystemV0_2_0Types.ErrorCode.Io -> { 13 } FilesystemV0_2_0Types.ErrorCode.IsDirectory -> { 14 } FilesystemV0_2_0Types.ErrorCode.Loop -> { 15 } FilesystemV0_2_0Types.ErrorCode.TooManyLinks -> { 16 } FilesystemV0_2_0Types.ErrorCode.MessageSize -> { 17 } FilesystemV0_2_0Types.ErrorCode.NameTooLong -> { 18 } FilesystemV0_2_0Types.ErrorCode.NoDevice -> { 19 } FilesystemV0_2_0Types.ErrorCode.NoEntry -> { 20 } FilesystemV0_2_0Types.ErrorCode.NoLock -> { 21 } FilesystemV0_2_0Types.ErrorCode.InsufficientMemory -> { 22 } FilesystemV0_2_0Types.ErrorCode.InsufficientSpace -> { 23 } FilesystemV0_2_0Types.ErrorCode.NotDirectory -> { 24 } FilesystemV0_2_0Types.ErrorCode.NotEmpty -> { 25 } FilesystemV0_2_0Types.ErrorCode.NotRecoverable -> { 26 } FilesystemV0_2_0Types.ErrorCode.Unsupported -> { 27 } FilesystemV0_2_0Types.ErrorCode.NoTty -> { 28 } FilesystemV0_2_0Types.ErrorCode.NoSuchDevice -> { 29 } FilesystemV0_2_0Types.ErrorCode.Overflow -> { 30 } FilesystemV0_2_0Types.ErrorCode.NotPermitted -> { 31 } FilesystemV0_2_0Types.ErrorCode.Pipe -> { 32 } FilesystemV0_2_0Types.ErrorCode.ReadOnly -> { 33 } FilesystemV0_2_0Types.ErrorCode.InvalidSeek -> { 34 } FilesystemV0_2_0Types.ErrorCode.TextFileBusy -> { 35 } FilesystemV0_2_0Types.ErrorCode.CrossDevice -> { 36 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:filesystem/types@0.2.0", "[method]descriptor.append-via-stream", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.appendViaStream() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { // TODO: ResourceEncoder 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { FilesystemV0_2_0Types.ErrorCode.Access -> { 0 } FilesystemV0_2_0Types.ErrorCode.WouldBlock -> { 1 } FilesystemV0_2_0Types.ErrorCode.Already -> { 2 } FilesystemV0_2_0Types.ErrorCode.BadDescriptor -> { 3 } FilesystemV0_2_0Types.ErrorCode.Busy -> { 4 } FilesystemV0_2_0Types.ErrorCode.Deadlock -> { 5 } FilesystemV0_2_0Types.ErrorCode.Quota -> { 6 } FilesystemV0_2_0Types.ErrorCode.Exist -> { 7 } FilesystemV0_2_0Types.ErrorCode.FileTooLarge -> { 8 } FilesystemV0_2_0Types.ErrorCode.IllegalByteSequence -> { 9 } FilesystemV0_2_0Types.ErrorCode.InProgress -> { 10 } FilesystemV0_2_0Types.ErrorCode.Interrupted -> { 11 } FilesystemV0_2_0Types.ErrorCode.Invalid -> { 12 } FilesystemV0_2_0Types.ErrorCode.Io -> { 13 } FilesystemV0_2_0Types.ErrorCode.IsDirectory -> { 14 } FilesystemV0_2_0Types.ErrorCode.Loop -> { 15 } FilesystemV0_2_0Types.ErrorCode.TooManyLinks -> { 16 } FilesystemV0_2_0Types.ErrorCode.MessageSize -> { 17 } FilesystemV0_2_0Types.ErrorCode.NameTooLong -> { 18 } FilesystemV0_2_0Types.ErrorCode.NoDevice -> { 19 } FilesystemV0_2_0Types.ErrorCode.NoEntry -> { 20 } FilesystemV0_2_0Types.ErrorCode.NoLock -> { 21 } FilesystemV0_2_0Types.ErrorCode.InsufficientMemory -> { 22 } FilesystemV0_2_0Types.ErrorCode.InsufficientSpace -> { 23 } FilesystemV0_2_0Types.ErrorCode.NotDirectory -> { 24 } FilesystemV0_2_0Types.ErrorCode.NotEmpty -> { 25 } FilesystemV0_2_0Types.ErrorCode.NotRecoverable -> { 26 } FilesystemV0_2_0Types.ErrorCode.Unsupported -> { 27 } FilesystemV0_2_0Types.ErrorCode.NoTty -> { 28 } FilesystemV0_2_0Types.ErrorCode.NoSuchDevice -> { 29 } FilesystemV0_2_0Types.ErrorCode.Overflow -> { 30 } FilesystemV0_2_0Types.ErrorCode.NotPermitted -> { 31 } FilesystemV0_2_0Types.ErrorCode.Pipe -> { 32 } FilesystemV0_2_0Types.ErrorCode.ReadOnly -> { 33 } FilesystemV0_2_0Types.ErrorCode.InvalidSeek -> { 34 } FilesystemV0_2_0Types.ErrorCode.TextFileBusy -> { 35 } FilesystemV0_2_0Types.ErrorCode.CrossDevice -> { 36 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:filesystem/types@0.2.0", "[method]descriptor.advise", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32, ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val variant = when (args[3].toInt()) { 0 -> { FilesystemV0_2_0Types.Advice.Normal } 1 -> { FilesystemV0_2_0Types.Advice.Sequential } 2 -> { FilesystemV0_2_0Types.Advice.Random } 3 -> { FilesystemV0_2_0Types.Advice.WillNeed } 4 -> { FilesystemV0_2_0Types.Advice.DontNeed } 5 -> { FilesystemV0_2_0Types.Advice.NoReuse } else -> error("unexpected case") } val self = bridge.`get`(args[0].toInt()) val result = self.advise( offset = TODO("lift wit.wasi.filesystem.v0_2_0.Types.Filesize"), length = TODO("lift wit.wasi.filesystem.v0_2_0.Types.Filesize"), advice = variant, ) val resultParameter = args[4].toInt() val discriminator: Byte = when (val variant_ = result) { is Result.Ok -> { 0 } is Result.Error -> { val discriminator_: Byte = when (val variant__ = variant_.value) { FilesystemV0_2_0Types.ErrorCode.Access -> { 0 } FilesystemV0_2_0Types.ErrorCode.WouldBlock -> { 1 } FilesystemV0_2_0Types.ErrorCode.Already -> { 2 } FilesystemV0_2_0Types.ErrorCode.BadDescriptor -> { 3 } FilesystemV0_2_0Types.ErrorCode.Busy -> { 4 } FilesystemV0_2_0Types.ErrorCode.Deadlock -> { 5 } FilesystemV0_2_0Types.ErrorCode.Quota -> { 6 } FilesystemV0_2_0Types.ErrorCode.Exist -> { 7 } FilesystemV0_2_0Types.ErrorCode.FileTooLarge -> { 8 } FilesystemV0_2_0Types.ErrorCode.IllegalByteSequence -> { 9 } FilesystemV0_2_0Types.ErrorCode.InProgress -> { 10 } FilesystemV0_2_0Types.ErrorCode.Interrupted -> { 11 } FilesystemV0_2_0Types.ErrorCode.Invalid -> { 12 } FilesystemV0_2_0Types.ErrorCode.Io -> { 13 } FilesystemV0_2_0Types.ErrorCode.IsDirectory -> { 14 } FilesystemV0_2_0Types.ErrorCode.Loop -> { 15 } FilesystemV0_2_0Types.ErrorCode.TooManyLinks -> { 16 } FilesystemV0_2_0Types.ErrorCode.MessageSize -> { 17 } FilesystemV0_2_0Types.ErrorCode.NameTooLong -> { 18 } FilesystemV0_2_0Types.ErrorCode.NoDevice -> { 19 } FilesystemV0_2_0Types.ErrorCode.NoEntry -> { 20 } FilesystemV0_2_0Types.ErrorCode.NoLock -> { 21 } FilesystemV0_2_0Types.ErrorCode.InsufficientMemory -> { 22 } FilesystemV0_2_0Types.ErrorCode.InsufficientSpace -> { 23 } FilesystemV0_2_0Types.ErrorCode.NotDirectory -> { 24 } FilesystemV0_2_0Types.ErrorCode.NotEmpty -> { 25 } FilesystemV0_2_0Types.ErrorCode.NotRecoverable -> { 26 } FilesystemV0_2_0Types.ErrorCode.Unsupported -> { 27 } FilesystemV0_2_0Types.ErrorCode.NoTty -> { 28 } FilesystemV0_2_0Types.ErrorCode.NoSuchDevice -> { 29 } FilesystemV0_2_0Types.ErrorCode.Overflow -> { 30 } FilesystemV0_2_0Types.ErrorCode.NotPermitted -> { 31 } FilesystemV0_2_0Types.ErrorCode.Pipe -> { 32 } FilesystemV0_2_0Types.ErrorCode.ReadOnly -> { 33 } FilesystemV0_2_0Types.ErrorCode.InvalidSeek -> { 34 } FilesystemV0_2_0Types.ErrorCode.TextFileBusy -> { 35 } FilesystemV0_2_0Types.ErrorCode.CrossDevice -> { 36 } } bridge.memory.writeByte(resultParameter + 1, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:filesystem/types@0.2.0", "[method]descriptor.sync-data", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.syncData() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { FilesystemV0_2_0Types.ErrorCode.Access -> { 0 } FilesystemV0_2_0Types.ErrorCode.WouldBlock -> { 1 } FilesystemV0_2_0Types.ErrorCode.Already -> { 2 } FilesystemV0_2_0Types.ErrorCode.BadDescriptor -> { 3 } FilesystemV0_2_0Types.ErrorCode.Busy -> { 4 } FilesystemV0_2_0Types.ErrorCode.Deadlock -> { 5 } FilesystemV0_2_0Types.ErrorCode.Quota -> { 6 } FilesystemV0_2_0Types.ErrorCode.Exist -> { 7 } FilesystemV0_2_0Types.ErrorCode.FileTooLarge -> { 8 } FilesystemV0_2_0Types.ErrorCode.IllegalByteSequence -> { 9 } FilesystemV0_2_0Types.ErrorCode.InProgress -> { 10 } FilesystemV0_2_0Types.ErrorCode.Interrupted -> { 11 } FilesystemV0_2_0Types.ErrorCode.Invalid -> { 12 } FilesystemV0_2_0Types.ErrorCode.Io -> { 13 } FilesystemV0_2_0Types.ErrorCode.IsDirectory -> { 14 } FilesystemV0_2_0Types.ErrorCode.Loop -> { 15 } FilesystemV0_2_0Types.ErrorCode.TooManyLinks -> { 16 } FilesystemV0_2_0Types.ErrorCode.MessageSize -> { 17 } FilesystemV0_2_0Types.ErrorCode.NameTooLong -> { 18 } FilesystemV0_2_0Types.ErrorCode.NoDevice -> { 19 } FilesystemV0_2_0Types.ErrorCode.NoEntry -> { 20 } FilesystemV0_2_0Types.ErrorCode.NoLock -> { 21 } FilesystemV0_2_0Types.ErrorCode.InsufficientMemory -> { 22 } FilesystemV0_2_0Types.ErrorCode.InsufficientSpace -> { 23 } FilesystemV0_2_0Types.ErrorCode.NotDirectory -> { 24 } FilesystemV0_2_0Types.ErrorCode.NotEmpty -> { 25 } FilesystemV0_2_0Types.ErrorCode.NotRecoverable -> { 26 } FilesystemV0_2_0Types.ErrorCode.Unsupported -> { 27 } FilesystemV0_2_0Types.ErrorCode.NoTty -> { 28 } FilesystemV0_2_0Types.ErrorCode.NoSuchDevice -> { 29 } FilesystemV0_2_0Types.ErrorCode.Overflow -> { 30 } FilesystemV0_2_0Types.ErrorCode.NotPermitted -> { 31 } FilesystemV0_2_0Types.ErrorCode.Pipe -> { 32 } FilesystemV0_2_0Types.ErrorCode.ReadOnly -> { 33 } FilesystemV0_2_0Types.ErrorCode.InvalidSeek -> { 34 } FilesystemV0_2_0Types.ErrorCode.TextFileBusy -> { 35 } FilesystemV0_2_0Types.ErrorCode.CrossDevice -> { 36 } } bridge.memory.writeByte(resultParameter + 1, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:filesystem/types@0.2.0", "[method]descriptor.get-flags", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.getFlags() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { // TODO: store wit.wasi.filesystem.v0_2_0.Types.DescriptorFlags 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { FilesystemV0_2_0Types.ErrorCode.Access -> { 0 } FilesystemV0_2_0Types.ErrorCode.WouldBlock -> { 1 } FilesystemV0_2_0Types.ErrorCode.Already -> { 2 } FilesystemV0_2_0Types.ErrorCode.BadDescriptor -> { 3 } FilesystemV0_2_0Types.ErrorCode.Busy -> { 4 } FilesystemV0_2_0Types.ErrorCode.Deadlock -> { 5 } FilesystemV0_2_0Types.ErrorCode.Quota -> { 6 } FilesystemV0_2_0Types.ErrorCode.Exist -> { 7 } FilesystemV0_2_0Types.ErrorCode.FileTooLarge -> { 8 } FilesystemV0_2_0Types.ErrorCode.IllegalByteSequence -> { 9 } FilesystemV0_2_0Types.ErrorCode.InProgress -> { 10 } FilesystemV0_2_0Types.ErrorCode.Interrupted -> { 11 } FilesystemV0_2_0Types.ErrorCode.Invalid -> { 12 } FilesystemV0_2_0Types.ErrorCode.Io -> { 13 } FilesystemV0_2_0Types.ErrorCode.IsDirectory -> { 14 } FilesystemV0_2_0Types.ErrorCode.Loop -> { 15 } FilesystemV0_2_0Types.ErrorCode.TooManyLinks -> { 16 } FilesystemV0_2_0Types.ErrorCode.MessageSize -> { 17 } FilesystemV0_2_0Types.ErrorCode.NameTooLong -> { 18 } FilesystemV0_2_0Types.ErrorCode.NoDevice -> { 19 } FilesystemV0_2_0Types.ErrorCode.NoEntry -> { 20 } FilesystemV0_2_0Types.ErrorCode.NoLock -> { 21 } FilesystemV0_2_0Types.ErrorCode.InsufficientMemory -> { 22 } FilesystemV0_2_0Types.ErrorCode.InsufficientSpace -> { 23 } FilesystemV0_2_0Types.ErrorCode.NotDirectory -> { 24 } FilesystemV0_2_0Types.ErrorCode.NotEmpty -> { 25 } FilesystemV0_2_0Types.ErrorCode.NotRecoverable -> { 26 } FilesystemV0_2_0Types.ErrorCode.Unsupported -> { 27 } FilesystemV0_2_0Types.ErrorCode.NoTty -> { 28 } FilesystemV0_2_0Types.ErrorCode.NoSuchDevice -> { 29 } FilesystemV0_2_0Types.ErrorCode.Overflow -> { 30 } FilesystemV0_2_0Types.ErrorCode.NotPermitted -> { 31 } FilesystemV0_2_0Types.ErrorCode.Pipe -> { 32 } FilesystemV0_2_0Types.ErrorCode.ReadOnly -> { 33 } FilesystemV0_2_0Types.ErrorCode.InvalidSeek -> { 34 } FilesystemV0_2_0Types.ErrorCode.TextFileBusy -> { 35 } FilesystemV0_2_0Types.ErrorCode.CrossDevice -> { 36 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:filesystem/types@0.2.0", "[method]descriptor.get-type", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.getType() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { val discriminator_: Byte = when (val variant_ = variant.value) { FilesystemV0_2_0Types.DescriptorType.Unknown -> { 0 } FilesystemV0_2_0Types.DescriptorType.BlockDevice -> { 1 } FilesystemV0_2_0Types.DescriptorType.CharacterDevice -> { 2 } FilesystemV0_2_0Types.DescriptorType.Directory -> { 3 } FilesystemV0_2_0Types.DescriptorType.Fifo -> { 4 } FilesystemV0_2_0Types.DescriptorType.SymbolicLink -> { 5 } FilesystemV0_2_0Types.DescriptorType.RegularFile -> { 6 } FilesystemV0_2_0Types.DescriptorType.Socket -> { 7 } } bridge.memory.writeByte(resultParameter + 1, discriminator_) 0 } is Result.Error -> { val discriminator__: Byte = when (val variant__ = variant.value) { FilesystemV0_2_0Types.ErrorCode.Access -> { 0 } FilesystemV0_2_0Types.ErrorCode.WouldBlock -> { 1 } FilesystemV0_2_0Types.ErrorCode.Already -> { 2 } FilesystemV0_2_0Types.ErrorCode.BadDescriptor -> { 3 } FilesystemV0_2_0Types.ErrorCode.Busy -> { 4 } FilesystemV0_2_0Types.ErrorCode.Deadlock -> { 5 } FilesystemV0_2_0Types.ErrorCode.Quota -> { 6 } FilesystemV0_2_0Types.ErrorCode.Exist -> { 7 } FilesystemV0_2_0Types.ErrorCode.FileTooLarge -> { 8 } FilesystemV0_2_0Types.ErrorCode.IllegalByteSequence -> { 9 } FilesystemV0_2_0Types.ErrorCode.InProgress -> { 10 } FilesystemV0_2_0Types.ErrorCode.Interrupted -> { 11 } FilesystemV0_2_0Types.ErrorCode.Invalid -> { 12 } FilesystemV0_2_0Types.ErrorCode.Io -> { 13 } FilesystemV0_2_0Types.ErrorCode.IsDirectory -> { 14 } FilesystemV0_2_0Types.ErrorCode.Loop -> { 15 } FilesystemV0_2_0Types.ErrorCode.TooManyLinks -> { 16 } FilesystemV0_2_0Types.ErrorCode.MessageSize -> { 17 } FilesystemV0_2_0Types.ErrorCode.NameTooLong -> { 18 } FilesystemV0_2_0Types.ErrorCode.NoDevice -> { 19 } FilesystemV0_2_0Types.ErrorCode.NoEntry -> { 20 } FilesystemV0_2_0Types.ErrorCode.NoLock -> { 21 } FilesystemV0_2_0Types.ErrorCode.InsufficientMemory -> { 22 } FilesystemV0_2_0Types.ErrorCode.InsufficientSpace -> { 23 } FilesystemV0_2_0Types.ErrorCode.NotDirectory -> { 24 } FilesystemV0_2_0Types.ErrorCode.NotEmpty -> { 25 } FilesystemV0_2_0Types.ErrorCode.NotRecoverable -> { 26 } FilesystemV0_2_0Types.ErrorCode.Unsupported -> { 27 } FilesystemV0_2_0Types.ErrorCode.NoTty -> { 28 } FilesystemV0_2_0Types.ErrorCode.NoSuchDevice -> { 29 } FilesystemV0_2_0Types.ErrorCode.Overflow -> { 30 } FilesystemV0_2_0Types.ErrorCode.NotPermitted -> { 31 } FilesystemV0_2_0Types.ErrorCode.Pipe -> { 32 } FilesystemV0_2_0Types.ErrorCode.ReadOnly -> { 33 } FilesystemV0_2_0Types.ErrorCode.InvalidSeek -> { 34 } FilesystemV0_2_0Types.ErrorCode.TextFileBusy -> { 35 } FilesystemV0_2_0Types.ErrorCode.CrossDevice -> { 36 } } bridge.memory.writeByte(resultParameter + 1, discriminator__) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:filesystem/types@0.2.0", "[method]descriptor.set-size", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.setSize( size = TODO("lift wit.wasi.filesystem.v0_2_0.Types.Filesize"), ) val resultParameter = args[2].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { FilesystemV0_2_0Types.ErrorCode.Access -> { 0 } FilesystemV0_2_0Types.ErrorCode.WouldBlock -> { 1 } FilesystemV0_2_0Types.ErrorCode.Already -> { 2 } FilesystemV0_2_0Types.ErrorCode.BadDescriptor -> { 3 } FilesystemV0_2_0Types.ErrorCode.Busy -> { 4 } FilesystemV0_2_0Types.ErrorCode.Deadlock -> { 5 } FilesystemV0_2_0Types.ErrorCode.Quota -> { 6 } FilesystemV0_2_0Types.ErrorCode.Exist -> { 7 } FilesystemV0_2_0Types.ErrorCode.FileTooLarge -> { 8 } FilesystemV0_2_0Types.ErrorCode.IllegalByteSequence -> { 9 } FilesystemV0_2_0Types.ErrorCode.InProgress -> { 10 } FilesystemV0_2_0Types.ErrorCode.Interrupted -> { 11 } FilesystemV0_2_0Types.ErrorCode.Invalid -> { 12 } FilesystemV0_2_0Types.ErrorCode.Io -> { 13 } FilesystemV0_2_0Types.ErrorCode.IsDirectory -> { 14 } FilesystemV0_2_0Types.ErrorCode.Loop -> { 15 } FilesystemV0_2_0Types.ErrorCode.TooManyLinks -> { 16 } FilesystemV0_2_0Types.ErrorCode.MessageSize -> { 17 } FilesystemV0_2_0Types.ErrorCode.NameTooLong -> { 18 } FilesystemV0_2_0Types.ErrorCode.NoDevice -> { 19 } FilesystemV0_2_0Types.ErrorCode.NoEntry -> { 20 } FilesystemV0_2_0Types.ErrorCode.NoLock -> { 21 } FilesystemV0_2_0Types.ErrorCode.InsufficientMemory -> { 22 } FilesystemV0_2_0Types.ErrorCode.InsufficientSpace -> { 23 } FilesystemV0_2_0Types.ErrorCode.NotDirectory -> { 24 } FilesystemV0_2_0Types.ErrorCode.NotEmpty -> { 25 } FilesystemV0_2_0Types.ErrorCode.NotRecoverable -> { 26 } FilesystemV0_2_0Types.ErrorCode.Unsupported -> { 27 } FilesystemV0_2_0Types.ErrorCode.NoTty -> { 28 } FilesystemV0_2_0Types.ErrorCode.NoSuchDevice -> { 29 } FilesystemV0_2_0Types.ErrorCode.Overflow -> { 30 } FilesystemV0_2_0Types.ErrorCode.NotPermitted -> { 31 } FilesystemV0_2_0Types.ErrorCode.Pipe -> { 32 } FilesystemV0_2_0Types.ErrorCode.ReadOnly -> { 33 } FilesystemV0_2_0Types.ErrorCode.InvalidSeek -> { 34 } FilesystemV0_2_0Types.ErrorCode.TextFileBusy -> { 35 } FilesystemV0_2_0Types.ErrorCode.CrossDevice -> { 36 } } bridge.memory.writeByte(resultParameter + 1, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:filesystem/types@0.2.0", "[method]descriptor.set-times", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32, ValType.I32, ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val variant = when (args[1].toInt()) { 0 -> { FilesystemV0_2_0Types.NewTimestamp.NoChange } 1 -> { FilesystemV0_2_0Types.NewTimestamp.Now } 2 -> { FilesystemV0_2_0Types.NewTimestamp.Timestamp(TODO("lift wit.wasi.clocks.v0_2_0.WallClock.Datetime")) } else -> error("unexpected case") } val variant_ = when (args[3].toInt()) { 0 -> { FilesystemV0_2_0Types.NewTimestamp.NoChange } 1 -> { FilesystemV0_2_0Types.NewTimestamp.Now } 2 -> { FilesystemV0_2_0Types.NewTimestamp.Timestamp(TODO("lift wit.wasi.clocks.v0_2_0.WallClock.Datetime")) } else -> error("unexpected case") } val self = bridge.`get`(args[0].toInt()) val result = self.setTimes( dataAccessTimestamp = variant, dataModificationTimestamp = variant_, ) val resultParameter = args[5].toInt() val discriminator: Byte = when (val variant__ = result) { is Result.Ok -> { 0 } is Result.Error -> { val discriminator_: Byte = when (val variant___ = variant__.value) { FilesystemV0_2_0Types.ErrorCode.Access -> { 0 } FilesystemV0_2_0Types.ErrorCode.WouldBlock -> { 1 } FilesystemV0_2_0Types.ErrorCode.Already -> { 2 } FilesystemV0_2_0Types.ErrorCode.BadDescriptor -> { 3 } FilesystemV0_2_0Types.ErrorCode.Busy -> { 4 } FilesystemV0_2_0Types.ErrorCode.Deadlock -> { 5 } FilesystemV0_2_0Types.ErrorCode.Quota -> { 6 } FilesystemV0_2_0Types.ErrorCode.Exist -> { 7 } FilesystemV0_2_0Types.ErrorCode.FileTooLarge -> { 8 } FilesystemV0_2_0Types.ErrorCode.IllegalByteSequence -> { 9 } FilesystemV0_2_0Types.ErrorCode.InProgress -> { 10 } FilesystemV0_2_0Types.ErrorCode.Interrupted -> { 11 } FilesystemV0_2_0Types.ErrorCode.Invalid -> { 12 } FilesystemV0_2_0Types.ErrorCode.Io -> { 13 } FilesystemV0_2_0Types.ErrorCode.IsDirectory -> { 14 } FilesystemV0_2_0Types.ErrorCode.Loop -> { 15 } FilesystemV0_2_0Types.ErrorCode.TooManyLinks -> { 16 } FilesystemV0_2_0Types.ErrorCode.MessageSize -> { 17 } FilesystemV0_2_0Types.ErrorCode.NameTooLong -> { 18 } FilesystemV0_2_0Types.ErrorCode.NoDevice -> { 19 } FilesystemV0_2_0Types.ErrorCode.NoEntry -> { 20 } FilesystemV0_2_0Types.ErrorCode.NoLock -> { 21 } FilesystemV0_2_0Types.ErrorCode.InsufficientMemory -> { 22 } FilesystemV0_2_0Types.ErrorCode.InsufficientSpace -> { 23 } FilesystemV0_2_0Types.ErrorCode.NotDirectory -> { 24 } FilesystemV0_2_0Types.ErrorCode.NotEmpty -> { 25 } FilesystemV0_2_0Types.ErrorCode.NotRecoverable -> { 26 } FilesystemV0_2_0Types.ErrorCode.Unsupported -> { 27 } FilesystemV0_2_0Types.ErrorCode.NoTty -> { 28 } FilesystemV0_2_0Types.ErrorCode.NoSuchDevice -> { 29 } FilesystemV0_2_0Types.ErrorCode.Overflow -> { 30 } FilesystemV0_2_0Types.ErrorCode.NotPermitted -> { 31 } FilesystemV0_2_0Types.ErrorCode.Pipe -> { 32 } FilesystemV0_2_0Types.ErrorCode.ReadOnly -> { 33 } FilesystemV0_2_0Types.ErrorCode.InvalidSeek -> { 34 } FilesystemV0_2_0Types.ErrorCode.TextFileBusy -> { 35 } FilesystemV0_2_0Types.ErrorCode.CrossDevice -> { 36 } } bridge.memory.writeByte(resultParameter + 1, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:filesystem/types@0.2.0", "[method]descriptor.read", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.read( length = TODO("lift wit.wasi.filesystem.v0_2_0.Types.Filesize"), offset = TODO("lift wit.wasi.filesystem.v0_2_0.Types.Filesize"), ) val resultParameter = args[3].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { val listAddress = bridge.allocate(variant.value.first.size * 4) for (i in variant.value.first.indices) { val elementAddress = listAddress + i * 4 bridge.memory.writeI32(elementAddress, variant.value.first[i].toInt()) } bridge.memory.writeI32(resultParameter + 4, listAddress) bridge.memory.writeI32(resultParameter + 8, variant.value.first.size) bridge.memory.writeI32(resultParameter + 12, (if (variant.value.second) 1 else 0)) 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { FilesystemV0_2_0Types.ErrorCode.Access -> { 0 } FilesystemV0_2_0Types.ErrorCode.WouldBlock -> { 1 } FilesystemV0_2_0Types.ErrorCode.Already -> { 2 } FilesystemV0_2_0Types.ErrorCode.BadDescriptor -> { 3 } FilesystemV0_2_0Types.ErrorCode.Busy -> { 4 } FilesystemV0_2_0Types.ErrorCode.Deadlock -> { 5 } FilesystemV0_2_0Types.ErrorCode.Quota -> { 6 } FilesystemV0_2_0Types.ErrorCode.Exist -> { 7 } FilesystemV0_2_0Types.ErrorCode.FileTooLarge -> { 8 } FilesystemV0_2_0Types.ErrorCode.IllegalByteSequence -> { 9 } FilesystemV0_2_0Types.ErrorCode.InProgress -> { 10 } FilesystemV0_2_0Types.ErrorCode.Interrupted -> { 11 } FilesystemV0_2_0Types.ErrorCode.Invalid -> { 12 } FilesystemV0_2_0Types.ErrorCode.Io -> { 13 } FilesystemV0_2_0Types.ErrorCode.IsDirectory -> { 14 } FilesystemV0_2_0Types.ErrorCode.Loop -> { 15 } FilesystemV0_2_0Types.ErrorCode.TooManyLinks -> { 16 } FilesystemV0_2_0Types.ErrorCode.MessageSize -> { 17 } FilesystemV0_2_0Types.ErrorCode.NameTooLong -> { 18 } FilesystemV0_2_0Types.ErrorCode.NoDevice -> { 19 } FilesystemV0_2_0Types.ErrorCode.NoEntry -> { 20 } FilesystemV0_2_0Types.ErrorCode.NoLock -> { 21 } FilesystemV0_2_0Types.ErrorCode.InsufficientMemory -> { 22 } FilesystemV0_2_0Types.ErrorCode.InsufficientSpace -> { 23 } FilesystemV0_2_0Types.ErrorCode.NotDirectory -> { 24 } FilesystemV0_2_0Types.ErrorCode.NotEmpty -> { 25 } FilesystemV0_2_0Types.ErrorCode.NotRecoverable -> { 26 } FilesystemV0_2_0Types.ErrorCode.Unsupported -> { 27 } FilesystemV0_2_0Types.ErrorCode.NoTty -> { 28 } FilesystemV0_2_0Types.ErrorCode.NoSuchDevice -> { 29 } FilesystemV0_2_0Types.ErrorCode.Overflow -> { 30 } FilesystemV0_2_0Types.ErrorCode.NotPermitted -> { 31 } FilesystemV0_2_0Types.ErrorCode.Pipe -> { 32 } FilesystemV0_2_0Types.ErrorCode.ReadOnly -> { 33 } FilesystemV0_2_0Types.ErrorCode.InvalidSeek -> { 34 } FilesystemV0_2_0Types.ErrorCode.TextFileBusy -> { 35 } FilesystemV0_2_0Types.ErrorCode.CrossDevice -> { 36 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:filesystem/types@0.2.0", "[method]descriptor.write", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32, ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val listAddress = args[1].toInt() val length = args[2].toInt() val list = UByteArray(length) { i -> val elementAddress = listAddress + i * 4 bridge.memory.readInt(elementAddress).toUByte() } val self = bridge.`get`(args[0].toInt()) val result = self.write( buffer = list, offset = TODO("lift wit.wasi.filesystem.v0_2_0.Types.Filesize"), ) val resultParameter = args[4].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { // TODO: store wit.wasi.filesystem.v0_2_0.Types.Filesize 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { FilesystemV0_2_0Types.ErrorCode.Access -> { 0 } FilesystemV0_2_0Types.ErrorCode.WouldBlock -> { 1 } FilesystemV0_2_0Types.ErrorCode.Already -> { 2 } FilesystemV0_2_0Types.ErrorCode.BadDescriptor -> { 3 } FilesystemV0_2_0Types.ErrorCode.Busy -> { 4 } FilesystemV0_2_0Types.ErrorCode.Deadlock -> { 5 } FilesystemV0_2_0Types.ErrorCode.Quota -> { 6 } FilesystemV0_2_0Types.ErrorCode.Exist -> { 7 } FilesystemV0_2_0Types.ErrorCode.FileTooLarge -> { 8 } FilesystemV0_2_0Types.ErrorCode.IllegalByteSequence -> { 9 } FilesystemV0_2_0Types.ErrorCode.InProgress -> { 10 } FilesystemV0_2_0Types.ErrorCode.Interrupted -> { 11 } FilesystemV0_2_0Types.ErrorCode.Invalid -> { 12 } FilesystemV0_2_0Types.ErrorCode.Io -> { 13 } FilesystemV0_2_0Types.ErrorCode.IsDirectory -> { 14 } FilesystemV0_2_0Types.ErrorCode.Loop -> { 15 } FilesystemV0_2_0Types.ErrorCode.TooManyLinks -> { 16 } FilesystemV0_2_0Types.ErrorCode.MessageSize -> { 17 } FilesystemV0_2_0Types.ErrorCode.NameTooLong -> { 18 } FilesystemV0_2_0Types.ErrorCode.NoDevice -> { 19 } FilesystemV0_2_0Types.ErrorCode.NoEntry -> { 20 } FilesystemV0_2_0Types.ErrorCode.NoLock -> { 21 } FilesystemV0_2_0Types.ErrorCode.InsufficientMemory -> { 22 } FilesystemV0_2_0Types.ErrorCode.InsufficientSpace -> { 23 } FilesystemV0_2_0Types.ErrorCode.NotDirectory -> { 24 } FilesystemV0_2_0Types.ErrorCode.NotEmpty -> { 25 } FilesystemV0_2_0Types.ErrorCode.NotRecoverable -> { 26 } FilesystemV0_2_0Types.ErrorCode.Unsupported -> { 27 } FilesystemV0_2_0Types.ErrorCode.NoTty -> { 28 } FilesystemV0_2_0Types.ErrorCode.NoSuchDevice -> { 29 } FilesystemV0_2_0Types.ErrorCode.Overflow -> { 30 } FilesystemV0_2_0Types.ErrorCode.NotPermitted -> { 31 } FilesystemV0_2_0Types.ErrorCode.Pipe -> { 32 } FilesystemV0_2_0Types.ErrorCode.ReadOnly -> { 33 } FilesystemV0_2_0Types.ErrorCode.InvalidSeek -> { 34 } FilesystemV0_2_0Types.ErrorCode.TextFileBusy -> { 35 } FilesystemV0_2_0Types.ErrorCode.CrossDevice -> { 36 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:filesystem/types@0.2.0", "[method]descriptor.read-directory", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.readDirectory() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { // TODO: ResourceEncoder 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { FilesystemV0_2_0Types.ErrorCode.Access -> { 0 } FilesystemV0_2_0Types.ErrorCode.WouldBlock -> { 1 } FilesystemV0_2_0Types.ErrorCode.Already -> { 2 } FilesystemV0_2_0Types.ErrorCode.BadDescriptor -> { 3 } FilesystemV0_2_0Types.ErrorCode.Busy -> { 4 } FilesystemV0_2_0Types.ErrorCode.Deadlock -> { 5 } FilesystemV0_2_0Types.ErrorCode.Quota -> { 6 } FilesystemV0_2_0Types.ErrorCode.Exist -> { 7 } FilesystemV0_2_0Types.ErrorCode.FileTooLarge -> { 8 } FilesystemV0_2_0Types.ErrorCode.IllegalByteSequence -> { 9 } FilesystemV0_2_0Types.ErrorCode.InProgress -> { 10 } FilesystemV0_2_0Types.ErrorCode.Interrupted -> { 11 } FilesystemV0_2_0Types.ErrorCode.Invalid -> { 12 } FilesystemV0_2_0Types.ErrorCode.Io -> { 13 } FilesystemV0_2_0Types.ErrorCode.IsDirectory -> { 14 } FilesystemV0_2_0Types.ErrorCode.Loop -> { 15 } FilesystemV0_2_0Types.ErrorCode.TooManyLinks -> { 16 } FilesystemV0_2_0Types.ErrorCode.MessageSize -> { 17 } FilesystemV0_2_0Types.ErrorCode.NameTooLong -> { 18 } FilesystemV0_2_0Types.ErrorCode.NoDevice -> { 19 } FilesystemV0_2_0Types.ErrorCode.NoEntry -> { 20 } FilesystemV0_2_0Types.ErrorCode.NoLock -> { 21 } FilesystemV0_2_0Types.ErrorCode.InsufficientMemory -> { 22 } FilesystemV0_2_0Types.ErrorCode.InsufficientSpace -> { 23 } FilesystemV0_2_0Types.ErrorCode.NotDirectory -> { 24 } FilesystemV0_2_0Types.ErrorCode.NotEmpty -> { 25 } FilesystemV0_2_0Types.ErrorCode.NotRecoverable -> { 26 } FilesystemV0_2_0Types.ErrorCode.Unsupported -> { 27 } FilesystemV0_2_0Types.ErrorCode.NoTty -> { 28 } FilesystemV0_2_0Types.ErrorCode.NoSuchDevice -> { 29 } FilesystemV0_2_0Types.ErrorCode.Overflow -> { 30 } FilesystemV0_2_0Types.ErrorCode.NotPermitted -> { 31 } FilesystemV0_2_0Types.ErrorCode.Pipe -> { 32 } FilesystemV0_2_0Types.ErrorCode.ReadOnly -> { 33 } FilesystemV0_2_0Types.ErrorCode.InvalidSeek -> { 34 } FilesystemV0_2_0Types.ErrorCode.TextFileBusy -> { 35 } FilesystemV0_2_0Types.ErrorCode.CrossDevice -> { 36 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:filesystem/types@0.2.0", "[method]descriptor.sync", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.sync() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { FilesystemV0_2_0Types.ErrorCode.Access -> { 0 } FilesystemV0_2_0Types.ErrorCode.WouldBlock -> { 1 } FilesystemV0_2_0Types.ErrorCode.Already -> { 2 } FilesystemV0_2_0Types.ErrorCode.BadDescriptor -> { 3 } FilesystemV0_2_0Types.ErrorCode.Busy -> { 4 } FilesystemV0_2_0Types.ErrorCode.Deadlock -> { 5 } FilesystemV0_2_0Types.ErrorCode.Quota -> { 6 } FilesystemV0_2_0Types.ErrorCode.Exist -> { 7 } FilesystemV0_2_0Types.ErrorCode.FileTooLarge -> { 8 } FilesystemV0_2_0Types.ErrorCode.IllegalByteSequence -> { 9 } FilesystemV0_2_0Types.ErrorCode.InProgress -> { 10 } FilesystemV0_2_0Types.ErrorCode.Interrupted -> { 11 } FilesystemV0_2_0Types.ErrorCode.Invalid -> { 12 } FilesystemV0_2_0Types.ErrorCode.Io -> { 13 } FilesystemV0_2_0Types.ErrorCode.IsDirectory -> { 14 } FilesystemV0_2_0Types.ErrorCode.Loop -> { 15 } FilesystemV0_2_0Types.ErrorCode.TooManyLinks -> { 16 } FilesystemV0_2_0Types.ErrorCode.MessageSize -> { 17 } FilesystemV0_2_0Types.ErrorCode.NameTooLong -> { 18 } FilesystemV0_2_0Types.ErrorCode.NoDevice -> { 19 } FilesystemV0_2_0Types.ErrorCode.NoEntry -> { 20 } FilesystemV0_2_0Types.ErrorCode.NoLock -> { 21 } FilesystemV0_2_0Types.ErrorCode.InsufficientMemory -> { 22 } FilesystemV0_2_0Types.ErrorCode.InsufficientSpace -> { 23 } FilesystemV0_2_0Types.ErrorCode.NotDirectory -> { 24 } FilesystemV0_2_0Types.ErrorCode.NotEmpty -> { 25 } FilesystemV0_2_0Types.ErrorCode.NotRecoverable -> { 26 } FilesystemV0_2_0Types.ErrorCode.Unsupported -> { 27 } FilesystemV0_2_0Types.ErrorCode.NoTty -> { 28 } FilesystemV0_2_0Types.ErrorCode.NoSuchDevice -> { 29 } FilesystemV0_2_0Types.ErrorCode.Overflow -> { 30 } FilesystemV0_2_0Types.ErrorCode.NotPermitted -> { 31 } FilesystemV0_2_0Types.ErrorCode.Pipe -> { 32 } FilesystemV0_2_0Types.ErrorCode.ReadOnly -> { 33 } FilesystemV0_2_0Types.ErrorCode.InvalidSeek -> { 34 } FilesystemV0_2_0Types.ErrorCode.TextFileBusy -> { 35 } FilesystemV0_2_0Types.ErrorCode.CrossDevice -> { 36 } } bridge.memory.writeByte(resultParameter + 1, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:filesystem/types@0.2.0", "[method]descriptor.create-directory-at", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.createDirectoryAt( path = bridge.memory.readString(args[1].toInt(), args[2].toInt()), ) val resultParameter = args[3].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { FilesystemV0_2_0Types.ErrorCode.Access -> { 0 } FilesystemV0_2_0Types.ErrorCode.WouldBlock -> { 1 } FilesystemV0_2_0Types.ErrorCode.Already -> { 2 } FilesystemV0_2_0Types.ErrorCode.BadDescriptor -> { 3 } FilesystemV0_2_0Types.ErrorCode.Busy -> { 4 } FilesystemV0_2_0Types.ErrorCode.Deadlock -> { 5 } FilesystemV0_2_0Types.ErrorCode.Quota -> { 6 } FilesystemV0_2_0Types.ErrorCode.Exist -> { 7 } FilesystemV0_2_0Types.ErrorCode.FileTooLarge -> { 8 } FilesystemV0_2_0Types.ErrorCode.IllegalByteSequence -> { 9 } FilesystemV0_2_0Types.ErrorCode.InProgress -> { 10 } FilesystemV0_2_0Types.ErrorCode.Interrupted -> { 11 } FilesystemV0_2_0Types.ErrorCode.Invalid -> { 12 } FilesystemV0_2_0Types.ErrorCode.Io -> { 13 } FilesystemV0_2_0Types.ErrorCode.IsDirectory -> { 14 } FilesystemV0_2_0Types.ErrorCode.Loop -> { 15 } FilesystemV0_2_0Types.ErrorCode.TooManyLinks -> { 16 } FilesystemV0_2_0Types.ErrorCode.MessageSize -> { 17 } FilesystemV0_2_0Types.ErrorCode.NameTooLong -> { 18 } FilesystemV0_2_0Types.ErrorCode.NoDevice -> { 19 } FilesystemV0_2_0Types.ErrorCode.NoEntry -> { 20 } FilesystemV0_2_0Types.ErrorCode.NoLock -> { 21 } FilesystemV0_2_0Types.ErrorCode.InsufficientMemory -> { 22 } FilesystemV0_2_0Types.ErrorCode.InsufficientSpace -> { 23 } FilesystemV0_2_0Types.ErrorCode.NotDirectory -> { 24 } FilesystemV0_2_0Types.ErrorCode.NotEmpty -> { 25 } FilesystemV0_2_0Types.ErrorCode.NotRecoverable -> { 26 } FilesystemV0_2_0Types.ErrorCode.Unsupported -> { 27 } FilesystemV0_2_0Types.ErrorCode.NoTty -> { 28 } FilesystemV0_2_0Types.ErrorCode.NoSuchDevice -> { 29 } FilesystemV0_2_0Types.ErrorCode.Overflow -> { 30 } FilesystemV0_2_0Types.ErrorCode.NotPermitted -> { 31 } FilesystemV0_2_0Types.ErrorCode.Pipe -> { 32 } FilesystemV0_2_0Types.ErrorCode.ReadOnly -> { 33 } FilesystemV0_2_0Types.ErrorCode.InvalidSeek -> { 34 } FilesystemV0_2_0Types.ErrorCode.TextFileBusy -> { 35 } FilesystemV0_2_0Types.ErrorCode.CrossDevice -> { 36 } } bridge.memory.writeByte(resultParameter + 1, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:filesystem/types@0.2.0", "[method]descriptor.stat", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.stat() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { // TODO: store wit.wasi.filesystem.v0_2_0.Types.DescriptorStat 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { FilesystemV0_2_0Types.ErrorCode.Access -> { 0 } FilesystemV0_2_0Types.ErrorCode.WouldBlock -> { 1 } FilesystemV0_2_0Types.ErrorCode.Already -> { 2 } FilesystemV0_2_0Types.ErrorCode.BadDescriptor -> { 3 } FilesystemV0_2_0Types.ErrorCode.Busy -> { 4 } FilesystemV0_2_0Types.ErrorCode.Deadlock -> { 5 } FilesystemV0_2_0Types.ErrorCode.Quota -> { 6 } FilesystemV0_2_0Types.ErrorCode.Exist -> { 7 } FilesystemV0_2_0Types.ErrorCode.FileTooLarge -> { 8 } FilesystemV0_2_0Types.ErrorCode.IllegalByteSequence -> { 9 } FilesystemV0_2_0Types.ErrorCode.InProgress -> { 10 } FilesystemV0_2_0Types.ErrorCode.Interrupted -> { 11 } FilesystemV0_2_0Types.ErrorCode.Invalid -> { 12 } FilesystemV0_2_0Types.ErrorCode.Io -> { 13 } FilesystemV0_2_0Types.ErrorCode.IsDirectory -> { 14 } FilesystemV0_2_0Types.ErrorCode.Loop -> { 15 } FilesystemV0_2_0Types.ErrorCode.TooManyLinks -> { 16 } FilesystemV0_2_0Types.ErrorCode.MessageSize -> { 17 } FilesystemV0_2_0Types.ErrorCode.NameTooLong -> { 18 } FilesystemV0_2_0Types.ErrorCode.NoDevice -> { 19 } FilesystemV0_2_0Types.ErrorCode.NoEntry -> { 20 } FilesystemV0_2_0Types.ErrorCode.NoLock -> { 21 } FilesystemV0_2_0Types.ErrorCode.InsufficientMemory -> { 22 } FilesystemV0_2_0Types.ErrorCode.InsufficientSpace -> { 23 } FilesystemV0_2_0Types.ErrorCode.NotDirectory -> { 24 } FilesystemV0_2_0Types.ErrorCode.NotEmpty -> { 25 } FilesystemV0_2_0Types.ErrorCode.NotRecoverable -> { 26 } FilesystemV0_2_0Types.ErrorCode.Unsupported -> { 27 } FilesystemV0_2_0Types.ErrorCode.NoTty -> { 28 } FilesystemV0_2_0Types.ErrorCode.NoSuchDevice -> { 29 } FilesystemV0_2_0Types.ErrorCode.Overflow -> { 30 } FilesystemV0_2_0Types.ErrorCode.NotPermitted -> { 31 } FilesystemV0_2_0Types.ErrorCode.Pipe -> { 32 } FilesystemV0_2_0Types.ErrorCode.ReadOnly -> { 33 } FilesystemV0_2_0Types.ErrorCode.InvalidSeek -> { 34 } FilesystemV0_2_0Types.ErrorCode.TextFileBusy -> { 35 } FilesystemV0_2_0Types.ErrorCode.CrossDevice -> { 36 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:filesystem/types@0.2.0", "[method]descriptor.stat-at", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32, ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.statAt( pathFlags = TODO("lift wit.wasi.filesystem.v0_2_0.Types.PathFlags"), path = bridge.memory.readString(args[2].toInt(), args[3].toInt()), ) val resultParameter = args[4].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { // TODO: store wit.wasi.filesystem.v0_2_0.Types.DescriptorStat 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { FilesystemV0_2_0Types.ErrorCode.Access -> { 0 } FilesystemV0_2_0Types.ErrorCode.WouldBlock -> { 1 } FilesystemV0_2_0Types.ErrorCode.Already -> { 2 } FilesystemV0_2_0Types.ErrorCode.BadDescriptor -> { 3 } FilesystemV0_2_0Types.ErrorCode.Busy -> { 4 } FilesystemV0_2_0Types.ErrorCode.Deadlock -> { 5 } FilesystemV0_2_0Types.ErrorCode.Quota -> { 6 } FilesystemV0_2_0Types.ErrorCode.Exist -> { 7 } FilesystemV0_2_0Types.ErrorCode.FileTooLarge -> { 8 } FilesystemV0_2_0Types.ErrorCode.IllegalByteSequence -> { 9 } FilesystemV0_2_0Types.ErrorCode.InProgress -> { 10 } FilesystemV0_2_0Types.ErrorCode.Interrupted -> { 11 } FilesystemV0_2_0Types.ErrorCode.Invalid -> { 12 } FilesystemV0_2_0Types.ErrorCode.Io -> { 13 } FilesystemV0_2_0Types.ErrorCode.IsDirectory -> { 14 } FilesystemV0_2_0Types.ErrorCode.Loop -> { 15 } FilesystemV0_2_0Types.ErrorCode.TooManyLinks -> { 16 } FilesystemV0_2_0Types.ErrorCode.MessageSize -> { 17 } FilesystemV0_2_0Types.ErrorCode.NameTooLong -> { 18 } FilesystemV0_2_0Types.ErrorCode.NoDevice -> { 19 } FilesystemV0_2_0Types.ErrorCode.NoEntry -> { 20 } FilesystemV0_2_0Types.ErrorCode.NoLock -> { 21 } FilesystemV0_2_0Types.ErrorCode.InsufficientMemory -> { 22 } FilesystemV0_2_0Types.ErrorCode.InsufficientSpace -> { 23 } FilesystemV0_2_0Types.ErrorCode.NotDirectory -> { 24 } FilesystemV0_2_0Types.ErrorCode.NotEmpty -> { 25 } FilesystemV0_2_0Types.ErrorCode.NotRecoverable -> { 26 } FilesystemV0_2_0Types.ErrorCode.Unsupported -> { 27 } FilesystemV0_2_0Types.ErrorCode.NoTty -> { 28 } FilesystemV0_2_0Types.ErrorCode.NoSuchDevice -> { 29 } FilesystemV0_2_0Types.ErrorCode.Overflow -> { 30 } FilesystemV0_2_0Types.ErrorCode.NotPermitted -> { 31 } FilesystemV0_2_0Types.ErrorCode.Pipe -> { 32 } FilesystemV0_2_0Types.ErrorCode.ReadOnly -> { 33 } FilesystemV0_2_0Types.ErrorCode.InvalidSeek -> { 34 } FilesystemV0_2_0Types.ErrorCode.TextFileBusy -> { 35 } FilesystemV0_2_0Types.ErrorCode.CrossDevice -> { 36 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:filesystem/types@0.2.0", "[method]descriptor.set-times-at", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32, ValType.I32, ValType.I32, ValType.I32, ValType.I32, ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val variant = when (args[4].toInt()) { 0 -> { FilesystemV0_2_0Types.NewTimestamp.NoChange } 1 -> { FilesystemV0_2_0Types.NewTimestamp.Now } 2 -> { FilesystemV0_2_0Types.NewTimestamp.Timestamp(TODO("lift wit.wasi.clocks.v0_2_0.WallClock.Datetime")) } else -> error("unexpected case") } val variant_ = when (args[6].toInt()) { 0 -> { FilesystemV0_2_0Types.NewTimestamp.NoChange } 1 -> { FilesystemV0_2_0Types.NewTimestamp.Now } 2 -> { FilesystemV0_2_0Types.NewTimestamp.Timestamp(TODO("lift wit.wasi.clocks.v0_2_0.WallClock.Datetime")) } else -> error("unexpected case") } val self = bridge.`get`(args[0].toInt()) val result = self.setTimesAt( pathFlags = TODO("lift wit.wasi.filesystem.v0_2_0.Types.PathFlags"), path = bridge.memory.readString(args[2].toInt(), args[3].toInt()), dataAccessTimestamp = variant, dataModificationTimestamp = variant_, ) val resultParameter = args[8].toInt() val discriminator: Byte = when (val variant__ = result) { is Result.Ok -> { 0 } is Result.Error -> { val discriminator_: Byte = when (val variant___ = variant__.value) { FilesystemV0_2_0Types.ErrorCode.Access -> { 0 } FilesystemV0_2_0Types.ErrorCode.WouldBlock -> { 1 } FilesystemV0_2_0Types.ErrorCode.Already -> { 2 } FilesystemV0_2_0Types.ErrorCode.BadDescriptor -> { 3 } FilesystemV0_2_0Types.ErrorCode.Busy -> { 4 } FilesystemV0_2_0Types.ErrorCode.Deadlock -> { 5 } FilesystemV0_2_0Types.ErrorCode.Quota -> { 6 } FilesystemV0_2_0Types.ErrorCode.Exist -> { 7 } FilesystemV0_2_0Types.ErrorCode.FileTooLarge -> { 8 } FilesystemV0_2_0Types.ErrorCode.IllegalByteSequence -> { 9 } FilesystemV0_2_0Types.ErrorCode.InProgress -> { 10 } FilesystemV0_2_0Types.ErrorCode.Interrupted -> { 11 } FilesystemV0_2_0Types.ErrorCode.Invalid -> { 12 } FilesystemV0_2_0Types.ErrorCode.Io -> { 13 } FilesystemV0_2_0Types.ErrorCode.IsDirectory -> { 14 } FilesystemV0_2_0Types.ErrorCode.Loop -> { 15 } FilesystemV0_2_0Types.ErrorCode.TooManyLinks -> { 16 } FilesystemV0_2_0Types.ErrorCode.MessageSize -> { 17 } FilesystemV0_2_0Types.ErrorCode.NameTooLong -> { 18 } FilesystemV0_2_0Types.ErrorCode.NoDevice -> { 19 } FilesystemV0_2_0Types.ErrorCode.NoEntry -> { 20 } FilesystemV0_2_0Types.ErrorCode.NoLock -> { 21 } FilesystemV0_2_0Types.ErrorCode.InsufficientMemory -> { 22 } FilesystemV0_2_0Types.ErrorCode.InsufficientSpace -> { 23 } FilesystemV0_2_0Types.ErrorCode.NotDirectory -> { 24 } FilesystemV0_2_0Types.ErrorCode.NotEmpty -> { 25 } FilesystemV0_2_0Types.ErrorCode.NotRecoverable -> { 26 } FilesystemV0_2_0Types.ErrorCode.Unsupported -> { 27 } FilesystemV0_2_0Types.ErrorCode.NoTty -> { 28 } FilesystemV0_2_0Types.ErrorCode.NoSuchDevice -> { 29 } FilesystemV0_2_0Types.ErrorCode.Overflow -> { 30 } FilesystemV0_2_0Types.ErrorCode.NotPermitted -> { 31 } FilesystemV0_2_0Types.ErrorCode.Pipe -> { 32 } FilesystemV0_2_0Types.ErrorCode.ReadOnly -> { 33 } FilesystemV0_2_0Types.ErrorCode.InvalidSeek -> { 34 } FilesystemV0_2_0Types.ErrorCode.TextFileBusy -> { 35 } FilesystemV0_2_0Types.ErrorCode.CrossDevice -> { 36 } } bridge.memory.writeByte(resultParameter + 1, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:filesystem/types@0.2.0", "[method]descriptor.link-at", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32, ValType.I32, ValType.I32, ValType.I32, ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.linkAt( oldPathFlags = TODO("lift wit.wasi.filesystem.v0_2_0.Types.PathFlags"), oldPath = bridge.memory.readString(args[2].toInt(), args[3].toInt()), newDescriptor = TODO("lift wit.wasi.filesystem.v0_2_0.Types.Descriptor"), newPath = bridge.memory.readString(args[5].toInt(), args[6].toInt()), ) val resultParameter = args[7].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { FilesystemV0_2_0Types.ErrorCode.Access -> { 0 } FilesystemV0_2_0Types.ErrorCode.WouldBlock -> { 1 } FilesystemV0_2_0Types.ErrorCode.Already -> { 2 } FilesystemV0_2_0Types.ErrorCode.BadDescriptor -> { 3 } FilesystemV0_2_0Types.ErrorCode.Busy -> { 4 } FilesystemV0_2_0Types.ErrorCode.Deadlock -> { 5 } FilesystemV0_2_0Types.ErrorCode.Quota -> { 6 } FilesystemV0_2_0Types.ErrorCode.Exist -> { 7 } FilesystemV0_2_0Types.ErrorCode.FileTooLarge -> { 8 } FilesystemV0_2_0Types.ErrorCode.IllegalByteSequence -> { 9 } FilesystemV0_2_0Types.ErrorCode.InProgress -> { 10 } FilesystemV0_2_0Types.ErrorCode.Interrupted -> { 11 } FilesystemV0_2_0Types.ErrorCode.Invalid -> { 12 } FilesystemV0_2_0Types.ErrorCode.Io -> { 13 } FilesystemV0_2_0Types.ErrorCode.IsDirectory -> { 14 } FilesystemV0_2_0Types.ErrorCode.Loop -> { 15 } FilesystemV0_2_0Types.ErrorCode.TooManyLinks -> { 16 } FilesystemV0_2_0Types.ErrorCode.MessageSize -> { 17 } FilesystemV0_2_0Types.ErrorCode.NameTooLong -> { 18 } FilesystemV0_2_0Types.ErrorCode.NoDevice -> { 19 } FilesystemV0_2_0Types.ErrorCode.NoEntry -> { 20 } FilesystemV0_2_0Types.ErrorCode.NoLock -> { 21 } FilesystemV0_2_0Types.ErrorCode.InsufficientMemory -> { 22 } FilesystemV0_2_0Types.ErrorCode.InsufficientSpace -> { 23 } FilesystemV0_2_0Types.ErrorCode.NotDirectory -> { 24 } FilesystemV0_2_0Types.ErrorCode.NotEmpty -> { 25 } FilesystemV0_2_0Types.ErrorCode.NotRecoverable -> { 26 } FilesystemV0_2_0Types.ErrorCode.Unsupported -> { 27 } FilesystemV0_2_0Types.ErrorCode.NoTty -> { 28 } FilesystemV0_2_0Types.ErrorCode.NoSuchDevice -> { 29 } FilesystemV0_2_0Types.ErrorCode.Overflow -> { 30 } FilesystemV0_2_0Types.ErrorCode.NotPermitted -> { 31 } FilesystemV0_2_0Types.ErrorCode.Pipe -> { 32 } FilesystemV0_2_0Types.ErrorCode.ReadOnly -> { 33 } FilesystemV0_2_0Types.ErrorCode.InvalidSeek -> { 34 } FilesystemV0_2_0Types.ErrorCode.TextFileBusy -> { 35 } FilesystemV0_2_0Types.ErrorCode.CrossDevice -> { 36 } } bridge.memory.writeByte(resultParameter + 1, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:filesystem/types@0.2.0", "[method]descriptor.open-at", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32, ValType.I32, ValType.I32, ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.openAt( pathFlags = TODO("lift wit.wasi.filesystem.v0_2_0.Types.PathFlags"), path = bridge.memory.readString(args[2].toInt(), args[3].toInt()), openFlags = TODO("lift wit.wasi.filesystem.v0_2_0.Types.OpenFlags"), flags = TODO("lift wit.wasi.filesystem.v0_2_0.Types.DescriptorFlags"), ) val resultParameter = args[6].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { // TODO: ResourceEncoder 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { FilesystemV0_2_0Types.ErrorCode.Access -> { 0 } FilesystemV0_2_0Types.ErrorCode.WouldBlock -> { 1 } FilesystemV0_2_0Types.ErrorCode.Already -> { 2 } FilesystemV0_2_0Types.ErrorCode.BadDescriptor -> { 3 } FilesystemV0_2_0Types.ErrorCode.Busy -> { 4 } FilesystemV0_2_0Types.ErrorCode.Deadlock -> { 5 } FilesystemV0_2_0Types.ErrorCode.Quota -> { 6 } FilesystemV0_2_0Types.ErrorCode.Exist -> { 7 } FilesystemV0_2_0Types.ErrorCode.FileTooLarge -> { 8 } FilesystemV0_2_0Types.ErrorCode.IllegalByteSequence -> { 9 } FilesystemV0_2_0Types.ErrorCode.InProgress -> { 10 } FilesystemV0_2_0Types.ErrorCode.Interrupted -> { 11 } FilesystemV0_2_0Types.ErrorCode.Invalid -> { 12 } FilesystemV0_2_0Types.ErrorCode.Io -> { 13 } FilesystemV0_2_0Types.ErrorCode.IsDirectory -> { 14 } FilesystemV0_2_0Types.ErrorCode.Loop -> { 15 } FilesystemV0_2_0Types.ErrorCode.TooManyLinks -> { 16 } FilesystemV0_2_0Types.ErrorCode.MessageSize -> { 17 } FilesystemV0_2_0Types.ErrorCode.NameTooLong -> { 18 } FilesystemV0_2_0Types.ErrorCode.NoDevice -> { 19 } FilesystemV0_2_0Types.ErrorCode.NoEntry -> { 20 } FilesystemV0_2_0Types.ErrorCode.NoLock -> { 21 } FilesystemV0_2_0Types.ErrorCode.InsufficientMemory -> { 22 } FilesystemV0_2_0Types.ErrorCode.InsufficientSpace -> { 23 } FilesystemV0_2_0Types.ErrorCode.NotDirectory -> { 24 } FilesystemV0_2_0Types.ErrorCode.NotEmpty -> { 25 } FilesystemV0_2_0Types.ErrorCode.NotRecoverable -> { 26 } FilesystemV0_2_0Types.ErrorCode.Unsupported -> { 27 } FilesystemV0_2_0Types.ErrorCode.NoTty -> { 28 } FilesystemV0_2_0Types.ErrorCode.NoSuchDevice -> { 29 } FilesystemV0_2_0Types.ErrorCode.Overflow -> { 30 } FilesystemV0_2_0Types.ErrorCode.NotPermitted -> { 31 } FilesystemV0_2_0Types.ErrorCode.Pipe -> { 32 } FilesystemV0_2_0Types.ErrorCode.ReadOnly -> { 33 } FilesystemV0_2_0Types.ErrorCode.InvalidSeek -> { 34 } FilesystemV0_2_0Types.ErrorCode.TextFileBusy -> { 35 } FilesystemV0_2_0Types.ErrorCode.CrossDevice -> { 36 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:filesystem/types@0.2.0", "[method]descriptor.readlink-at", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.readlinkAt( path = bridge.memory.readString(args[1].toInt(), args[2].toInt()), ) val resultParameter = args[3].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { val byteArray = variant.value.encodeToByteArray() val stringAddress = bridge.allocate(byteArray.size) bridge.memory.write(stringAddress, byteArray) val stringAddress_ = stringAddress val stringByteCount = byteArray.size bridge.memory.writeI32(resultParameter + 4, stringAddress_) bridge.memory.writeI32(resultParameter + 8, stringByteCount) 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { FilesystemV0_2_0Types.ErrorCode.Access -> { 0 } FilesystemV0_2_0Types.ErrorCode.WouldBlock -> { 1 } FilesystemV0_2_0Types.ErrorCode.Already -> { 2 } FilesystemV0_2_0Types.ErrorCode.BadDescriptor -> { 3 } FilesystemV0_2_0Types.ErrorCode.Busy -> { 4 } FilesystemV0_2_0Types.ErrorCode.Deadlock -> { 5 } FilesystemV0_2_0Types.ErrorCode.Quota -> { 6 } FilesystemV0_2_0Types.ErrorCode.Exist -> { 7 } FilesystemV0_2_0Types.ErrorCode.FileTooLarge -> { 8 } FilesystemV0_2_0Types.ErrorCode.IllegalByteSequence -> { 9 } FilesystemV0_2_0Types.ErrorCode.InProgress -> { 10 } FilesystemV0_2_0Types.ErrorCode.Interrupted -> { 11 } FilesystemV0_2_0Types.ErrorCode.Invalid -> { 12 } FilesystemV0_2_0Types.ErrorCode.Io -> { 13 } FilesystemV0_2_0Types.ErrorCode.IsDirectory -> { 14 } FilesystemV0_2_0Types.ErrorCode.Loop -> { 15 } FilesystemV0_2_0Types.ErrorCode.TooManyLinks -> { 16 } FilesystemV0_2_0Types.ErrorCode.MessageSize -> { 17 } FilesystemV0_2_0Types.ErrorCode.NameTooLong -> { 18 } FilesystemV0_2_0Types.ErrorCode.NoDevice -> { 19 } FilesystemV0_2_0Types.ErrorCode.NoEntry -> { 20 } FilesystemV0_2_0Types.ErrorCode.NoLock -> { 21 } FilesystemV0_2_0Types.ErrorCode.InsufficientMemory -> { 22 } FilesystemV0_2_0Types.ErrorCode.InsufficientSpace -> { 23 } FilesystemV0_2_0Types.ErrorCode.NotDirectory -> { 24 } FilesystemV0_2_0Types.ErrorCode.NotEmpty -> { 25 } FilesystemV0_2_0Types.ErrorCode.NotRecoverable -> { 26 } FilesystemV0_2_0Types.ErrorCode.Unsupported -> { 27 } FilesystemV0_2_0Types.ErrorCode.NoTty -> { 28 } FilesystemV0_2_0Types.ErrorCode.NoSuchDevice -> { 29 } FilesystemV0_2_0Types.ErrorCode.Overflow -> { 30 } FilesystemV0_2_0Types.ErrorCode.NotPermitted -> { 31 } FilesystemV0_2_0Types.ErrorCode.Pipe -> { 32 } FilesystemV0_2_0Types.ErrorCode.ReadOnly -> { 33 } FilesystemV0_2_0Types.ErrorCode.InvalidSeek -> { 34 } FilesystemV0_2_0Types.ErrorCode.TextFileBusy -> { 35 } FilesystemV0_2_0Types.ErrorCode.CrossDevice -> { 36 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:filesystem/types@0.2.0", "[method]descriptor.remove-directory-at", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.removeDirectoryAt( path = bridge.memory.readString(args[1].toInt(), args[2].toInt()), ) val resultParameter = args[3].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { FilesystemV0_2_0Types.ErrorCode.Access -> { 0 } FilesystemV0_2_0Types.ErrorCode.WouldBlock -> { 1 } FilesystemV0_2_0Types.ErrorCode.Already -> { 2 } FilesystemV0_2_0Types.ErrorCode.BadDescriptor -> { 3 } FilesystemV0_2_0Types.ErrorCode.Busy -> { 4 } FilesystemV0_2_0Types.ErrorCode.Deadlock -> { 5 } FilesystemV0_2_0Types.ErrorCode.Quota -> { 6 } FilesystemV0_2_0Types.ErrorCode.Exist -> { 7 } FilesystemV0_2_0Types.ErrorCode.FileTooLarge -> { 8 } FilesystemV0_2_0Types.ErrorCode.IllegalByteSequence -> { 9 } FilesystemV0_2_0Types.ErrorCode.InProgress -> { 10 } FilesystemV0_2_0Types.ErrorCode.Interrupted -> { 11 } FilesystemV0_2_0Types.ErrorCode.Invalid -> { 12 } FilesystemV0_2_0Types.ErrorCode.Io -> { 13 } FilesystemV0_2_0Types.ErrorCode.IsDirectory -> { 14 } FilesystemV0_2_0Types.ErrorCode.Loop -> { 15 } FilesystemV0_2_0Types.ErrorCode.TooManyLinks -> { 16 } FilesystemV0_2_0Types.ErrorCode.MessageSize -> { 17 } FilesystemV0_2_0Types.ErrorCode.NameTooLong -> { 18 } FilesystemV0_2_0Types.ErrorCode.NoDevice -> { 19 } FilesystemV0_2_0Types.ErrorCode.NoEntry -> { 20 } FilesystemV0_2_0Types.ErrorCode.NoLock -> { 21 } FilesystemV0_2_0Types.ErrorCode.InsufficientMemory -> { 22 } FilesystemV0_2_0Types.ErrorCode.InsufficientSpace -> { 23 } FilesystemV0_2_0Types.ErrorCode.NotDirectory -> { 24 } FilesystemV0_2_0Types.ErrorCode.NotEmpty -> { 25 } FilesystemV0_2_0Types.ErrorCode.NotRecoverable -> { 26 } FilesystemV0_2_0Types.ErrorCode.Unsupported -> { 27 } FilesystemV0_2_0Types.ErrorCode.NoTty -> { 28 } FilesystemV0_2_0Types.ErrorCode.NoSuchDevice -> { 29 } FilesystemV0_2_0Types.ErrorCode.Overflow -> { 30 } FilesystemV0_2_0Types.ErrorCode.NotPermitted -> { 31 } FilesystemV0_2_0Types.ErrorCode.Pipe -> { 32 } FilesystemV0_2_0Types.ErrorCode.ReadOnly -> { 33 } FilesystemV0_2_0Types.ErrorCode.InvalidSeek -> { 34 } FilesystemV0_2_0Types.ErrorCode.TextFileBusy -> { 35 } FilesystemV0_2_0Types.ErrorCode.CrossDevice -> { 36 } } bridge.memory.writeByte(resultParameter + 1, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:filesystem/types@0.2.0", "[method]descriptor.rename-at", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32, ValType.I32, ValType.I32, ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.renameAt( oldPath = bridge.memory.readString(args[1].toInt(), args[2].toInt()), newDescriptor = TODO("lift wit.wasi.filesystem.v0_2_0.Types.Descriptor"), newPath = bridge.memory.readString(args[4].toInt(), args[5].toInt()), ) val resultParameter = args[6].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { FilesystemV0_2_0Types.ErrorCode.Access -> { 0 } FilesystemV0_2_0Types.ErrorCode.WouldBlock -> { 1 } FilesystemV0_2_0Types.ErrorCode.Already -> { 2 } FilesystemV0_2_0Types.ErrorCode.BadDescriptor -> { 3 } FilesystemV0_2_0Types.ErrorCode.Busy -> { 4 } FilesystemV0_2_0Types.ErrorCode.Deadlock -> { 5 } FilesystemV0_2_0Types.ErrorCode.Quota -> { 6 } FilesystemV0_2_0Types.ErrorCode.Exist -> { 7 } FilesystemV0_2_0Types.ErrorCode.FileTooLarge -> { 8 } FilesystemV0_2_0Types.ErrorCode.IllegalByteSequence -> { 9 } FilesystemV0_2_0Types.ErrorCode.InProgress -> { 10 } FilesystemV0_2_0Types.ErrorCode.Interrupted -> { 11 } FilesystemV0_2_0Types.ErrorCode.Invalid -> { 12 } FilesystemV0_2_0Types.ErrorCode.Io -> { 13 } FilesystemV0_2_0Types.ErrorCode.IsDirectory -> { 14 } FilesystemV0_2_0Types.ErrorCode.Loop -> { 15 } FilesystemV0_2_0Types.ErrorCode.TooManyLinks -> { 16 } FilesystemV0_2_0Types.ErrorCode.MessageSize -> { 17 } FilesystemV0_2_0Types.ErrorCode.NameTooLong -> { 18 } FilesystemV0_2_0Types.ErrorCode.NoDevice -> { 19 } FilesystemV0_2_0Types.ErrorCode.NoEntry -> { 20 } FilesystemV0_2_0Types.ErrorCode.NoLock -> { 21 } FilesystemV0_2_0Types.ErrorCode.InsufficientMemory -> { 22 } FilesystemV0_2_0Types.ErrorCode.InsufficientSpace -> { 23 } FilesystemV0_2_0Types.ErrorCode.NotDirectory -> { 24 } FilesystemV0_2_0Types.ErrorCode.NotEmpty -> { 25 } FilesystemV0_2_0Types.ErrorCode.NotRecoverable -> { 26 } FilesystemV0_2_0Types.ErrorCode.Unsupported -> { 27 } FilesystemV0_2_0Types.ErrorCode.NoTty -> { 28 } FilesystemV0_2_0Types.ErrorCode.NoSuchDevice -> { 29 } FilesystemV0_2_0Types.ErrorCode.Overflow -> { 30 } FilesystemV0_2_0Types.ErrorCode.NotPermitted -> { 31 } FilesystemV0_2_0Types.ErrorCode.Pipe -> { 32 } FilesystemV0_2_0Types.ErrorCode.ReadOnly -> { 33 } FilesystemV0_2_0Types.ErrorCode.InvalidSeek -> { 34 } FilesystemV0_2_0Types.ErrorCode.TextFileBusy -> { 35 } FilesystemV0_2_0Types.ErrorCode.CrossDevice -> { 36 } } bridge.memory.writeByte(resultParameter + 1, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:filesystem/types@0.2.0", "[method]descriptor.symlink-at", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32, ValType.I32, ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.symlinkAt( oldPath = bridge.memory.readString(args[1].toInt(), args[2].toInt()), newPath = bridge.memory.readString(args[3].toInt(), args[4].toInt()), ) val resultParameter = args[5].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { FilesystemV0_2_0Types.ErrorCode.Access -> { 0 } FilesystemV0_2_0Types.ErrorCode.WouldBlock -> { 1 } FilesystemV0_2_0Types.ErrorCode.Already -> { 2 } FilesystemV0_2_0Types.ErrorCode.BadDescriptor -> { 3 } FilesystemV0_2_0Types.ErrorCode.Busy -> { 4 } FilesystemV0_2_0Types.ErrorCode.Deadlock -> { 5 } FilesystemV0_2_0Types.ErrorCode.Quota -> { 6 } FilesystemV0_2_0Types.ErrorCode.Exist -> { 7 } FilesystemV0_2_0Types.ErrorCode.FileTooLarge -> { 8 } FilesystemV0_2_0Types.ErrorCode.IllegalByteSequence -> { 9 } FilesystemV0_2_0Types.ErrorCode.InProgress -> { 10 } FilesystemV0_2_0Types.ErrorCode.Interrupted -> { 11 } FilesystemV0_2_0Types.ErrorCode.Invalid -> { 12 } FilesystemV0_2_0Types.ErrorCode.Io -> { 13 } FilesystemV0_2_0Types.ErrorCode.IsDirectory -> { 14 } FilesystemV0_2_0Types.ErrorCode.Loop -> { 15 } FilesystemV0_2_0Types.ErrorCode.TooManyLinks -> { 16 } FilesystemV0_2_0Types.ErrorCode.MessageSize -> { 17 } FilesystemV0_2_0Types.ErrorCode.NameTooLong -> { 18 } FilesystemV0_2_0Types.ErrorCode.NoDevice -> { 19 } FilesystemV0_2_0Types.ErrorCode.NoEntry -> { 20 } FilesystemV0_2_0Types.ErrorCode.NoLock -> { 21 } FilesystemV0_2_0Types.ErrorCode.InsufficientMemory -> { 22 } FilesystemV0_2_0Types.ErrorCode.InsufficientSpace -> { 23 } FilesystemV0_2_0Types.ErrorCode.NotDirectory -> { 24 } FilesystemV0_2_0Types.ErrorCode.NotEmpty -> { 25 } FilesystemV0_2_0Types.ErrorCode.NotRecoverable -> { 26 } FilesystemV0_2_0Types.ErrorCode.Unsupported -> { 27 } FilesystemV0_2_0Types.ErrorCode.NoTty -> { 28 } FilesystemV0_2_0Types.ErrorCode.NoSuchDevice -> { 29 } FilesystemV0_2_0Types.ErrorCode.Overflow -> { 30 } FilesystemV0_2_0Types.ErrorCode.NotPermitted -> { 31 } FilesystemV0_2_0Types.ErrorCode.Pipe -> { 32 } FilesystemV0_2_0Types.ErrorCode.ReadOnly -> { 33 } FilesystemV0_2_0Types.ErrorCode.InvalidSeek -> { 34 } FilesystemV0_2_0Types.ErrorCode.TextFileBusy -> { 35 } FilesystemV0_2_0Types.ErrorCode.CrossDevice -> { 36 } } bridge.memory.writeByte(resultParameter + 1, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:filesystem/types@0.2.0", "[method]descriptor.unlink-file-at", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.unlinkFileAt( path = bridge.memory.readString(args[1].toInt(), args[2].toInt()), ) val resultParameter = args[3].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { FilesystemV0_2_0Types.ErrorCode.Access -> { 0 } FilesystemV0_2_0Types.ErrorCode.WouldBlock -> { 1 } FilesystemV0_2_0Types.ErrorCode.Already -> { 2 } FilesystemV0_2_0Types.ErrorCode.BadDescriptor -> { 3 } FilesystemV0_2_0Types.ErrorCode.Busy -> { 4 } FilesystemV0_2_0Types.ErrorCode.Deadlock -> { 5 } FilesystemV0_2_0Types.ErrorCode.Quota -> { 6 } FilesystemV0_2_0Types.ErrorCode.Exist -> { 7 } FilesystemV0_2_0Types.ErrorCode.FileTooLarge -> { 8 } FilesystemV0_2_0Types.ErrorCode.IllegalByteSequence -> { 9 } FilesystemV0_2_0Types.ErrorCode.InProgress -> { 10 } FilesystemV0_2_0Types.ErrorCode.Interrupted -> { 11 } FilesystemV0_2_0Types.ErrorCode.Invalid -> { 12 } FilesystemV0_2_0Types.ErrorCode.Io -> { 13 } FilesystemV0_2_0Types.ErrorCode.IsDirectory -> { 14 } FilesystemV0_2_0Types.ErrorCode.Loop -> { 15 } FilesystemV0_2_0Types.ErrorCode.TooManyLinks -> { 16 } FilesystemV0_2_0Types.ErrorCode.MessageSize -> { 17 } FilesystemV0_2_0Types.ErrorCode.NameTooLong -> { 18 } FilesystemV0_2_0Types.ErrorCode.NoDevice -> { 19 } FilesystemV0_2_0Types.ErrorCode.NoEntry -> { 20 } FilesystemV0_2_0Types.ErrorCode.NoLock -> { 21 } FilesystemV0_2_0Types.ErrorCode.InsufficientMemory -> { 22 } FilesystemV0_2_0Types.ErrorCode.InsufficientSpace -> { 23 } FilesystemV0_2_0Types.ErrorCode.NotDirectory -> { 24 } FilesystemV0_2_0Types.ErrorCode.NotEmpty -> { 25 } FilesystemV0_2_0Types.ErrorCode.NotRecoverable -> { 26 } FilesystemV0_2_0Types.ErrorCode.Unsupported -> { 27 } FilesystemV0_2_0Types.ErrorCode.NoTty -> { 28 } FilesystemV0_2_0Types.ErrorCode.NoSuchDevice -> { 29 } FilesystemV0_2_0Types.ErrorCode.Overflow -> { 30 } FilesystemV0_2_0Types.ErrorCode.NotPermitted -> { 31 } FilesystemV0_2_0Types.ErrorCode.Pipe -> { 32 } FilesystemV0_2_0Types.ErrorCode.ReadOnly -> { 33 } FilesystemV0_2_0Types.ErrorCode.InvalidSeek -> { 34 } FilesystemV0_2_0Types.ErrorCode.TextFileBusy -> { 35 } FilesystemV0_2_0Types.ErrorCode.CrossDevice -> { 36 } } bridge.memory.writeByte(resultParameter + 1, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:filesystem/types@0.2.0", "[method]descriptor.is-same-object", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(ValType.I32), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.isSameObject( other = TODO("lift wit.wasi.filesystem.v0_2_0.Types.Descriptor"), ) return@WasmFunctionHandle longArrayOf((if (result) 1 else 0).toLong()) }, ) ) store.addFunction( HostFunction( "wasi:filesystem/types@0.2.0", "[method]descriptor.metadata-hash", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.metadataHash() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { // TODO: store wit.wasi.filesystem.v0_2_0.Types.MetadataHashValue 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { FilesystemV0_2_0Types.ErrorCode.Access -> { 0 } FilesystemV0_2_0Types.ErrorCode.WouldBlock -> { 1 } FilesystemV0_2_0Types.ErrorCode.Already -> { 2 } FilesystemV0_2_0Types.ErrorCode.BadDescriptor -> { 3 } FilesystemV0_2_0Types.ErrorCode.Busy -> { 4 } FilesystemV0_2_0Types.ErrorCode.Deadlock -> { 5 } FilesystemV0_2_0Types.ErrorCode.Quota -> { 6 } FilesystemV0_2_0Types.ErrorCode.Exist -> { 7 } FilesystemV0_2_0Types.ErrorCode.FileTooLarge -> { 8 } FilesystemV0_2_0Types.ErrorCode.IllegalByteSequence -> { 9 } FilesystemV0_2_0Types.ErrorCode.InProgress -> { 10 } FilesystemV0_2_0Types.ErrorCode.Interrupted -> { 11 } FilesystemV0_2_0Types.ErrorCode.Invalid -> { 12 } FilesystemV0_2_0Types.ErrorCode.Io -> { 13 } FilesystemV0_2_0Types.ErrorCode.IsDirectory -> { 14 } FilesystemV0_2_0Types.ErrorCode.Loop -> { 15 } FilesystemV0_2_0Types.ErrorCode.TooManyLinks -> { 16 } FilesystemV0_2_0Types.ErrorCode.MessageSize -> { 17 } FilesystemV0_2_0Types.ErrorCode.NameTooLong -> { 18 } FilesystemV0_2_0Types.ErrorCode.NoDevice -> { 19 } FilesystemV0_2_0Types.ErrorCode.NoEntry -> { 20 } FilesystemV0_2_0Types.ErrorCode.NoLock -> { 21 } FilesystemV0_2_0Types.ErrorCode.InsufficientMemory -> { 22 } FilesystemV0_2_0Types.ErrorCode.InsufficientSpace -> { 23 } FilesystemV0_2_0Types.ErrorCode.NotDirectory -> { 24 } FilesystemV0_2_0Types.ErrorCode.NotEmpty -> { 25 } FilesystemV0_2_0Types.ErrorCode.NotRecoverable -> { 26 } FilesystemV0_2_0Types.ErrorCode.Unsupported -> { 27 } FilesystemV0_2_0Types.ErrorCode.NoTty -> { 28 } FilesystemV0_2_0Types.ErrorCode.NoSuchDevice -> { 29 } FilesystemV0_2_0Types.ErrorCode.Overflow -> { 30 } FilesystemV0_2_0Types.ErrorCode.NotPermitted -> { 31 } FilesystemV0_2_0Types.ErrorCode.Pipe -> { 32 } FilesystemV0_2_0Types.ErrorCode.ReadOnly -> { 33 } FilesystemV0_2_0Types.ErrorCode.InvalidSeek -> { 34 } FilesystemV0_2_0Types.ErrorCode.TextFileBusy -> { 35 } FilesystemV0_2_0Types.ErrorCode.CrossDevice -> { 36 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:filesystem/types@0.2.0", "[method]descriptor.metadata-hash-at", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32, ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.metadataHashAt( pathFlags = TODO("lift wit.wasi.filesystem.v0_2_0.Types.PathFlags"), path = bridge.memory.readString(args[2].toInt(), args[3].toInt()), ) val resultParameter = args[4].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { // TODO: store wit.wasi.filesystem.v0_2_0.Types.MetadataHashValue 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { FilesystemV0_2_0Types.ErrorCode.Access -> { 0 } FilesystemV0_2_0Types.ErrorCode.WouldBlock -> { 1 } FilesystemV0_2_0Types.ErrorCode.Already -> { 2 } FilesystemV0_2_0Types.ErrorCode.BadDescriptor -> { 3 } FilesystemV0_2_0Types.ErrorCode.Busy -> { 4 } FilesystemV0_2_0Types.ErrorCode.Deadlock -> { 5 } FilesystemV0_2_0Types.ErrorCode.Quota -> { 6 } FilesystemV0_2_0Types.ErrorCode.Exist -> { 7 } FilesystemV0_2_0Types.ErrorCode.FileTooLarge -> { 8 } FilesystemV0_2_0Types.ErrorCode.IllegalByteSequence -> { 9 } FilesystemV0_2_0Types.ErrorCode.InProgress -> { 10 } FilesystemV0_2_0Types.ErrorCode.Interrupted -> { 11 } FilesystemV0_2_0Types.ErrorCode.Invalid -> { 12 } FilesystemV0_2_0Types.ErrorCode.Io -> { 13 } FilesystemV0_2_0Types.ErrorCode.IsDirectory -> { 14 } FilesystemV0_2_0Types.ErrorCode.Loop -> { 15 } FilesystemV0_2_0Types.ErrorCode.TooManyLinks -> { 16 } FilesystemV0_2_0Types.ErrorCode.MessageSize -> { 17 } FilesystemV0_2_0Types.ErrorCode.NameTooLong -> { 18 } FilesystemV0_2_0Types.ErrorCode.NoDevice -> { 19 } FilesystemV0_2_0Types.ErrorCode.NoEntry -> { 20 } FilesystemV0_2_0Types.ErrorCode.NoLock -> { 21 } FilesystemV0_2_0Types.ErrorCode.InsufficientMemory -> { 22 } FilesystemV0_2_0Types.ErrorCode.InsufficientSpace -> { 23 } FilesystemV0_2_0Types.ErrorCode.NotDirectory -> { 24 } FilesystemV0_2_0Types.ErrorCode.NotEmpty -> { 25 } FilesystemV0_2_0Types.ErrorCode.NotRecoverable -> { 26 } FilesystemV0_2_0Types.ErrorCode.Unsupported -> { 27 } FilesystemV0_2_0Types.ErrorCode.NoTty -> { 28 } FilesystemV0_2_0Types.ErrorCode.NoSuchDevice -> { 29 } FilesystemV0_2_0Types.ErrorCode.Overflow -> { 30 } FilesystemV0_2_0Types.ErrorCode.NotPermitted -> { 31 } FilesystemV0_2_0Types.ErrorCode.Pipe -> { 32 } FilesystemV0_2_0Types.ErrorCode.ReadOnly -> { 33 } FilesystemV0_2_0Types.ErrorCode.InvalidSeek -> { 34 } FilesystemV0_2_0Types.ErrorCode.TextFileBusy -> { 35 } FilesystemV0_2_0Types.ErrorCode.CrossDevice -> { 36 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:filesystem/types@0.2.0", "[resource-drop]descriptor", FunctionType.of( listOf(ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) self.close() return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/network@0.2.0", "[resource-drop]network", FunctionType.of( listOf(ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) self.close() return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/udp@0.2.0", "[method]udp-socket.start-bind", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32, ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val variant = when (args[2].toInt()) { 0 -> { Network.IpSocketAddress.Ipv4(TODO("lift wit.wasi.sockets.v0_2_0.Network.Ipv4SocketAddress")) } 1 -> { Network.IpSocketAddress.Ipv6(TODO("lift wit.wasi.sockets.v0_2_0.Network.Ipv6SocketAddress")) } else -> error("unexpected case") } val self = bridge.`get`(args[0].toInt()) val result = self.startBind( network = TODO("lift wit.wasi.sockets.v0_2_0.Network.Network"), localAddress = variant, ) val resultParameter = args[4].toInt() val discriminator: Byte = when (val variant_ = result) { is Result.Ok -> { 0 } is Result.Error -> { val discriminator_: Byte = when (val variant__ = variant_.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 1, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/udp@0.2.0", "[method]udp-socket.finish-bind", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.finishBind() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 1, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/udp@0.2.0", "[method]udp-socket.%stream", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32, ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val variant = when (args[1].toInt()) { 0 -> { null } 1 -> { val variant_ = when (args[2].toInt()) { 0 -> { Network.IpSocketAddress.Ipv4(TODO("lift wit.wasi.sockets.v0_2_0.Network.Ipv4SocketAddress")) } 1 -> { Network.IpSocketAddress.Ipv6(TODO("lift wit.wasi.sockets.v0_2_0.Network.Ipv6SocketAddress")) } else -> error("unexpected case") } variant_ } else -> error("unexpected case") } val self = bridge.`get`(args[0].toInt()) val result = self.stream( remoteAddress = variant, ) val resultParameter = args[4].toInt() val discriminator: Byte = when (val variant__ = result) { is Result.Ok -> { // TODO: ResourceEncoder // TODO: ResourceEncoder 0 } is Result.Error -> { val discriminator_: Byte = when (val variant___ = variant__.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/udp@0.2.0", "[method]udp-socket.local-address", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.localAddress() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { val discriminator_: Byte = when (val variant_ = variant.value) { is Network.IpSocketAddress.Ipv4 -> { // TODO: store wit.wasi.sockets.v0_2_0.Network.Ipv4SocketAddress 0 } is Network.IpSocketAddress.Ipv6 -> { // TODO: store wit.wasi.sockets.v0_2_0.Network.Ipv6SocketAddress 1 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 0 } is Result.Error -> { val discriminator__: Byte = when (val variant__ = variant.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 4, discriminator__) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/udp@0.2.0", "[method]udp-socket.remote-address", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.remoteAddress() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { val discriminator_: Byte = when (val variant_ = variant.value) { is Network.IpSocketAddress.Ipv4 -> { // TODO: store wit.wasi.sockets.v0_2_0.Network.Ipv4SocketAddress 0 } is Network.IpSocketAddress.Ipv6 -> { // TODO: store wit.wasi.sockets.v0_2_0.Network.Ipv6SocketAddress 1 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 0 } is Result.Error -> { val discriminator__: Byte = when (val variant__ = variant.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 4, discriminator__) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/udp@0.2.0", "[method]udp-socket.address-family", FunctionType.of( listOf(ValType.I32), listOf(ValType.I32), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.addressFamily() val variant = result val discriminator = when (variant) { Network.IpAddressFamily.Ipv4 -> { 0 } Network.IpAddressFamily.Ipv6 -> { 1 } } return@WasmFunctionHandle longArrayOf(discriminator.toLong()) }, ) ) store.addFunction( HostFunction( "wasi:sockets/udp@0.2.0", "[method]udp-socket.unicast-hop-limit", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.unicastHopLimit() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { bridge.memory.writeI32(resultParameter + 1, variant.value.toInt()) 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 1, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/udp@0.2.0", "[method]udp-socket.set-unicast-hop-limit", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.setUnicastHopLimit( value_ = args[1].toInt().toUByte(), ) val resultParameter = args[2].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 1, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/udp@0.2.0", "[method]udp-socket.receive-buffer-size", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.receiveBufferSize() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { bridge.memory.writeLong(resultParameter + 4, variant.value.toLong()) 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/udp@0.2.0", "[method]udp-socket.set-receive-buffer-size", FunctionType.of( listOf(ValType.I32, ValType.I64, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.setReceiveBufferSize( value_ = args[1].toULong(), ) val resultParameter = args[2].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 1, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/udp@0.2.0", "[method]udp-socket.send-buffer-size", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.sendBufferSize() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { bridge.memory.writeLong(resultParameter + 4, variant.value.toLong()) 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/udp@0.2.0", "[method]udp-socket.set-send-buffer-size", FunctionType.of( listOf(ValType.I32, ValType.I64, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.setSendBufferSize( value_ = args[1].toULong(), ) val resultParameter = args[2].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 1, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/udp@0.2.0", "[method]udp-socket.subscribe", FunctionType.of( listOf(ValType.I32), listOf(ValType.I32), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.subscribe() return@WasmFunctionHandle longArrayOf(bridge.toId(result).toLong()) }, ) ) store.addFunction( HostFunction( "wasi:sockets/udp@0.2.0", "[resource-drop]udp-socket", FunctionType.of( listOf(ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) self.close() return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/tcp@0.2.0", "[method]tcp-socket.start-bind", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32, ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val variant = when (args[2].toInt()) { 0 -> { Network.IpSocketAddress.Ipv4(TODO("lift wit.wasi.sockets.v0_2_0.Network.Ipv4SocketAddress")) } 1 -> { Network.IpSocketAddress.Ipv6(TODO("lift wit.wasi.sockets.v0_2_0.Network.Ipv6SocketAddress")) } else -> error("unexpected case") } val self = bridge.`get`(args[0].toInt()) val result = self.startBind( network = TODO("lift wit.wasi.sockets.v0_2_0.Network.Network"), localAddress = variant, ) val resultParameter = args[4].toInt() val discriminator: Byte = when (val variant_ = result) { is Result.Ok -> { 0 } is Result.Error -> { val discriminator_: Byte = when (val variant__ = variant_.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 1, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/tcp@0.2.0", "[method]tcp-socket.finish-bind", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.finishBind() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 1, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/tcp@0.2.0", "[method]tcp-socket.start-connect", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32, ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val variant = when (args[2].toInt()) { 0 -> { Network.IpSocketAddress.Ipv4(TODO("lift wit.wasi.sockets.v0_2_0.Network.Ipv4SocketAddress")) } 1 -> { Network.IpSocketAddress.Ipv6(TODO("lift wit.wasi.sockets.v0_2_0.Network.Ipv6SocketAddress")) } else -> error("unexpected case") } val self = bridge.`get`(args[0].toInt()) val result = self.startConnect( network = TODO("lift wit.wasi.sockets.v0_2_0.Network.Network"), remoteAddress = variant, ) val resultParameter = args[4].toInt() val discriminator: Byte = when (val variant_ = result) { is Result.Ok -> { 0 } is Result.Error -> { val discriminator_: Byte = when (val variant__ = variant_.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 1, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/tcp@0.2.0", "[method]tcp-socket.finish-connect", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.finishConnect() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { // TODO: ResourceEncoder // TODO: ResourceEncoder 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/tcp@0.2.0", "[method]tcp-socket.start-listen", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.startListen() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 1, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/tcp@0.2.0", "[method]tcp-socket.finish-listen", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.finishListen() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 1, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/tcp@0.2.0", "[method]tcp-socket.accept", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.accept() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { // TODO: ResourceEncoder // TODO: ResourceEncoder // TODO: ResourceEncoder 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/tcp@0.2.0", "[method]tcp-socket.local-address", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.localAddress() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { val discriminator_: Byte = when (val variant_ = variant.value) { is Network.IpSocketAddress.Ipv4 -> { // TODO: store wit.wasi.sockets.v0_2_0.Network.Ipv4SocketAddress 0 } is Network.IpSocketAddress.Ipv6 -> { // TODO: store wit.wasi.sockets.v0_2_0.Network.Ipv6SocketAddress 1 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 0 } is Result.Error -> { val discriminator__: Byte = when (val variant__ = variant.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 4, discriminator__) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/tcp@0.2.0", "[method]tcp-socket.remote-address", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.remoteAddress() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { val discriminator_: Byte = when (val variant_ = variant.value) { is Network.IpSocketAddress.Ipv4 -> { // TODO: store wit.wasi.sockets.v0_2_0.Network.Ipv4SocketAddress 0 } is Network.IpSocketAddress.Ipv6 -> { // TODO: store wit.wasi.sockets.v0_2_0.Network.Ipv6SocketAddress 1 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 0 } is Result.Error -> { val discriminator__: Byte = when (val variant__ = variant.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 4, discriminator__) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/tcp@0.2.0", "[method]tcp-socket.is-listening", FunctionType.of( listOf(ValType.I32), listOf(ValType.I32), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.isListening() return@WasmFunctionHandle longArrayOf((if (result) 1 else 0).toLong()) }, ) ) store.addFunction( HostFunction( "wasi:sockets/tcp@0.2.0", "[method]tcp-socket.address-family", FunctionType.of( listOf(ValType.I32), listOf(ValType.I32), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.addressFamily() val variant = result val discriminator = when (variant) { Network.IpAddressFamily.Ipv4 -> { 0 } Network.IpAddressFamily.Ipv6 -> { 1 } } return@WasmFunctionHandle longArrayOf(discriminator.toLong()) }, ) ) store.addFunction( HostFunction( "wasi:sockets/tcp@0.2.0", "[method]tcp-socket.set-listen-backlog-size", FunctionType.of( listOf(ValType.I32, ValType.I64, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.setListenBacklogSize( value_ = args[1].toULong(), ) val resultParameter = args[2].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 1, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/tcp@0.2.0", "[method]tcp-socket.keep-alive-enabled", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.keepAliveEnabled() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { bridge.memory.writeI32(resultParameter + 1, (if (variant.value) 1 else 0)) 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 1, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/tcp@0.2.0", "[method]tcp-socket.set-keep-alive-enabled", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.setKeepAliveEnabled( value_ = (args[1].toInt() != 0), ) val resultParameter = args[2].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 1, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/tcp@0.2.0", "[method]tcp-socket.keep-alive-idle-time", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.keepAliveIdleTime() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { // TODO: store wit.wasi.clocks.v0_2_0.MonotonicClock.Duration 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/tcp@0.2.0", "[method]tcp-socket.set-keep-alive-idle-time", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.setKeepAliveIdleTime( value_ = TODO("lift wit.wasi.clocks.v0_2_0.MonotonicClock.Duration"), ) val resultParameter = args[2].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 1, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/tcp@0.2.0", "[method]tcp-socket.keep-alive-interval", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.keepAliveInterval() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { // TODO: store wit.wasi.clocks.v0_2_0.MonotonicClock.Duration 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/tcp@0.2.0", "[method]tcp-socket.set-keep-alive-interval", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.setKeepAliveInterval( value_ = TODO("lift wit.wasi.clocks.v0_2_0.MonotonicClock.Duration"), ) val resultParameter = args[2].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 1, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/tcp@0.2.0", "[method]tcp-socket.keep-alive-count", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.keepAliveCount() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { bridge.memory.writeI32(resultParameter + 4, variant.value.toInt()) 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/tcp@0.2.0", "[method]tcp-socket.set-keep-alive-count", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.setKeepAliveCount( value_ = args[1].toInt().toUInt(), ) val resultParameter = args[2].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 1, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/tcp@0.2.0", "[method]tcp-socket.hop-limit", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.hopLimit() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { bridge.memory.writeI32(resultParameter + 1, variant.value.toInt()) 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 1, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/tcp@0.2.0", "[method]tcp-socket.set-hop-limit", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.setHopLimit( value_ = args[1].toInt().toUByte(), ) val resultParameter = args[2].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 1, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/tcp@0.2.0", "[method]tcp-socket.receive-buffer-size", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.receiveBufferSize() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { bridge.memory.writeLong(resultParameter + 4, variant.value.toLong()) 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/tcp@0.2.0", "[method]tcp-socket.set-receive-buffer-size", FunctionType.of( listOf(ValType.I32, ValType.I64, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.setReceiveBufferSize( value_ = args[1].toULong(), ) val resultParameter = args[2].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 1, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/tcp@0.2.0", "[method]tcp-socket.send-buffer-size", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.sendBufferSize() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { bridge.memory.writeLong(resultParameter + 4, variant.value.toLong()) 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/tcp@0.2.0", "[method]tcp-socket.set-send-buffer-size", FunctionType.of( listOf(ValType.I32, ValType.I64, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.setSendBufferSize( value_ = args[1].toULong(), ) val resultParameter = args[2].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 1, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/tcp@0.2.0", "[method]tcp-socket.subscribe", FunctionType.of( listOf(ValType.I32), listOf(ValType.I32), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.subscribe() return@WasmFunctionHandle longArrayOf(bridge.toId(result).toLong()) }, ) ) store.addFunction( HostFunction( "wasi:sockets/tcp@0.2.0", "[method]tcp-socket.shutdown", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val variant = when (args[1].toInt()) { 0 -> { Tcp.ShutdownType.Receive } 1 -> { Tcp.ShutdownType.Send } 2 -> { Tcp.ShutdownType.Both } else -> error("unexpected case") } val self = bridge.`get`(args[0].toInt()) val result = self.shutdown( shutdownType = variant, ) val resultParameter = args[2].toInt() val discriminator: Byte = when (val variant_ = result) { is Result.Ok -> { 0 } is Result.Error -> { val discriminator_: Byte = when (val variant__ = variant_.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 1, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/tcp@0.2.0", "[resource-drop]tcp-socket", FunctionType.of( listOf(ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) self.close() return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/ip-name-lookup@0.2.0", "[method]resolve-address-stream.resolve-next-address", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.resolveNextAddress() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { val discriminator_: Byte = when (val variant_ = variant.value) { null -> { 0 } else -> { val discriminator__: Byte = when (val variant__ = variant_) { is Network.IpAddress.Ipv4 -> { // TODO: store wit.wasi.sockets.v0_2_0.Network.Ipv4Address 0 } is Network.IpAddress.Ipv6 -> { // TODO: store wit.wasi.sockets.v0_2_0.Network.Ipv6Address 1 } } bridge.memory.writeByte(resultParameter + 8, discriminator__) 1 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 0 } is Result.Error -> { val discriminator___: Byte = when (val variant___ = variant.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 4, discriminator___) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/ip-name-lookup@0.2.0", "[method]resolve-address-stream.subscribe", FunctionType.of( listOf(ValType.I32), listOf(ValType.I32), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.subscribe() return@WasmFunctionHandle longArrayOf(bridge.toId(result).toLong()) }, ) ) store.addFunction( HostFunction( "wasi:sockets/ip-name-lookup@0.2.0", "[resource-drop]resolve-address-stream", FunctionType.of( listOf(ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) self.close() return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:filesystem/types@0.2.0", "[method]directory-entry-stream.read-directory-entry", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.readDirectoryEntry() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { val discriminator_: Byte = when (val variant_ = variant.value) { null -> { 0 } else -> { // TODO: store wit.wasi.filesystem.v0_2_0.Types.DirectoryEntry 1 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 0 } is Result.Error -> { val discriminator__: Byte = when (val variant__ = variant.value) { FilesystemV0_2_0Types.ErrorCode.Access -> { 0 } FilesystemV0_2_0Types.ErrorCode.WouldBlock -> { 1 } FilesystemV0_2_0Types.ErrorCode.Already -> { 2 } FilesystemV0_2_0Types.ErrorCode.BadDescriptor -> { 3 } FilesystemV0_2_0Types.ErrorCode.Busy -> { 4 } FilesystemV0_2_0Types.ErrorCode.Deadlock -> { 5 } FilesystemV0_2_0Types.ErrorCode.Quota -> { 6 } FilesystemV0_2_0Types.ErrorCode.Exist -> { 7 } FilesystemV0_2_0Types.ErrorCode.FileTooLarge -> { 8 } FilesystemV0_2_0Types.ErrorCode.IllegalByteSequence -> { 9 } FilesystemV0_2_0Types.ErrorCode.InProgress -> { 10 } FilesystemV0_2_0Types.ErrorCode.Interrupted -> { 11 } FilesystemV0_2_0Types.ErrorCode.Invalid -> { 12 } FilesystemV0_2_0Types.ErrorCode.Io -> { 13 } FilesystemV0_2_0Types.ErrorCode.IsDirectory -> { 14 } FilesystemV0_2_0Types.ErrorCode.Loop -> { 15 } FilesystemV0_2_0Types.ErrorCode.TooManyLinks -> { 16 } FilesystemV0_2_0Types.ErrorCode.MessageSize -> { 17 } FilesystemV0_2_0Types.ErrorCode.NameTooLong -> { 18 } FilesystemV0_2_0Types.ErrorCode.NoDevice -> { 19 } FilesystemV0_2_0Types.ErrorCode.NoEntry -> { 20 } FilesystemV0_2_0Types.ErrorCode.NoLock -> { 21 } FilesystemV0_2_0Types.ErrorCode.InsufficientMemory -> { 22 } FilesystemV0_2_0Types.ErrorCode.InsufficientSpace -> { 23 } FilesystemV0_2_0Types.ErrorCode.NotDirectory -> { 24 } FilesystemV0_2_0Types.ErrorCode.NotEmpty -> { 25 } FilesystemV0_2_0Types.ErrorCode.NotRecoverable -> { 26 } FilesystemV0_2_0Types.ErrorCode.Unsupported -> { 27 } FilesystemV0_2_0Types.ErrorCode.NoTty -> { 28 } FilesystemV0_2_0Types.ErrorCode.NoSuchDevice -> { 29 } FilesystemV0_2_0Types.ErrorCode.Overflow -> { 30 } FilesystemV0_2_0Types.ErrorCode.NotPermitted -> { 31 } FilesystemV0_2_0Types.ErrorCode.Pipe -> { 32 } FilesystemV0_2_0Types.ErrorCode.ReadOnly -> { 33 } FilesystemV0_2_0Types.ErrorCode.InvalidSeek -> { 34 } FilesystemV0_2_0Types.ErrorCode.TextFileBusy -> { 35 } FilesystemV0_2_0Types.ErrorCode.CrossDevice -> { 36 } } bridge.memory.writeByte(resultParameter + 4, discriminator__) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:filesystem/types@0.2.0", "[resource-drop]directory-entry-stream", FunctionType.of( listOf(ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) self.close() return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/udp@0.2.0", "[method]incoming-datagram-stream.receive", FunctionType.of( listOf(ValType.I32, ValType.I64, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.receive( maxResults = args[1].toULong(), ) val resultParameter = args[2].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { val listAddress = bridge.allocate(variant.value.size * 4) for (i in variant.value.indices) { val elementAddress = listAddress + i * 4 // TODO: store wit.wasi.sockets.v0_2_0.Udp.IncomingDatagram } bridge.memory.writeI32(resultParameter + 4, listAddress) bridge.memory.writeI32(resultParameter + 8, variant.value.size) 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/udp@0.2.0", "[method]incoming-datagram-stream.subscribe", FunctionType.of( listOf(ValType.I32), listOf(ValType.I32), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.subscribe() return@WasmFunctionHandle longArrayOf(bridge.toId(result).toLong()) }, ) ) store.addFunction( HostFunction( "wasi:sockets/udp@0.2.0", "[resource-drop]incoming-datagram-stream", FunctionType.of( listOf(ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) self.close() return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/udp@0.2.0", "[method]outgoing-datagram-stream.check-send", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.checkSend() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { bridge.memory.writeLong(resultParameter + 4, variant.value.toLong()) 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/udp@0.2.0", "[method]outgoing-datagram-stream.send", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val listAddress = args[1].toInt() val length = args[2].toInt() val list = List(length) { i -> val elementAddress = listAddress + i * 4 TODO("load wit.wasi.sockets.v0_2_0.Udp.OutgoingDatagram") } val self = bridge.`get`(args[0].toInt()) val result = self.send( datagrams = list, ) val resultParameter = args[3].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { bridge.memory.writeLong(resultParameter + 4, variant.value.toLong()) 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { Network.ErrorCode.Unknown -> { 0 } Network.ErrorCode.AccessDenied -> { 1 } Network.ErrorCode.NotSupported -> { 2 } Network.ErrorCode.InvalidArgument -> { 3 } Network.ErrorCode.OutOfMemory -> { 4 } Network.ErrorCode.Timeout -> { 5 } Network.ErrorCode.ConcurrencyConflict -> { 6 } Network.ErrorCode.NotInProgress -> { 7 } Network.ErrorCode.WouldBlock -> { 8 } Network.ErrorCode.InvalidState -> { 9 } Network.ErrorCode.NewSocketLimit -> { 10 } Network.ErrorCode.AddressNotBindable -> { 11 } Network.ErrorCode.AddressInUse -> { 12 } Network.ErrorCode.RemoteUnreachable -> { 13 } Network.ErrorCode.ConnectionRefused -> { 14 } Network.ErrorCode.ConnectionReset -> { 15 } Network.ErrorCode.ConnectionAborted -> { 16 } Network.ErrorCode.DatagramTooLarge -> { 17 } Network.ErrorCode.NameUnresolvable -> { 18 } Network.ErrorCode.TemporaryResolverFailure -> { 19 } Network.ErrorCode.PermanentResolverFailure -> { 20 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:sockets/udp@0.2.0", "[method]outgoing-datagram-stream.subscribe", FunctionType.of( listOf(ValType.I32), listOf(ValType.I32), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.subscribe() return@WasmFunctionHandle longArrayOf(bridge.toId(result).toLong()) }, ) ) store.addFunction( HostFunction( "wasi:sockets/udp@0.2.0", "[resource-drop]outgoing-datagram-stream", FunctionType.of( listOf(ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) self.close() return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]future-incoming-response.subscribe", FunctionType.of( listOf(ValType.I32), listOf(ValType.I32), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.subscribe() return@WasmFunctionHandle longArrayOf(bridge.toId(result).toLong()) }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]future-incoming-response.get", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.`get`() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { null -> { 0 } else -> { val discriminator_: Byte = when (val variant_ = variant) { is Result.Ok -> { val discriminator__: Byte = when (val variant__ = variant_.value) { is Result.Ok -> { // TODO: ResourceEncoder 0 } is Result.Error -> { val discriminator___: Byte = when (val variant___ = variant__.value) { HttpV0_2_0Types.ErrorCode.DnsTimeout -> { 0 } is HttpV0_2_0Types.ErrorCode.DnsError -> { // TODO: store wit.wasi.http.v0_2_0.Types.DnsErrorPayload 1 } HttpV0_2_0Types.ErrorCode.DestinationNotFound -> { 2 } HttpV0_2_0Types.ErrorCode.DestinationUnavailable -> { 3 } HttpV0_2_0Types.ErrorCode.DestinationIpProhibited -> { 4 } HttpV0_2_0Types.ErrorCode.DestinationIpUnroutable -> { 5 } HttpV0_2_0Types.ErrorCode.ConnectionRefused -> { 6 } HttpV0_2_0Types.ErrorCode.ConnectionTerminated -> { 7 } HttpV0_2_0Types.ErrorCode.ConnectionTimeout -> { 8 } HttpV0_2_0Types.ErrorCode.ConnectionReadTimeout -> { 9 } HttpV0_2_0Types.ErrorCode.ConnectionWriteTimeout -> { 10 } HttpV0_2_0Types.ErrorCode.ConnectionLimitReached -> { 11 } HttpV0_2_0Types.ErrorCode.TlsProtocolError -> { 12 } HttpV0_2_0Types.ErrorCode.TlsCertificateError -> { 13 } is HttpV0_2_0Types.ErrorCode.TlsAlertReceived -> { // TODO: store wit.wasi.http.v0_2_0.Types.TlsAlertReceivedPayload 14 } HttpV0_2_0Types.ErrorCode.HttpRequestDenied -> { 15 } HttpV0_2_0Types.ErrorCode.HttpRequestLengthRequired -> { 16 } is HttpV0_2_0Types.ErrorCode.HttpRequestBodySize -> { val discriminator____: Byte = when (val variant____ = variant___.value) { null -> { 0 } else -> { bridge.memory.writeLong(resultParameter + 20, variant____.toLong()) 1 } } bridge.memory.writeByte(resultParameter + 16, discriminator____) 17 } HttpV0_2_0Types.ErrorCode.HttpRequestMethodInvalid -> { 18 } HttpV0_2_0Types.ErrorCode.HttpRequestUriInvalid -> { 19 } HttpV0_2_0Types.ErrorCode.HttpRequestUriTooLong -> { 20 } is HttpV0_2_0Types.ErrorCode.HttpRequestHeaderSectionSize -> { val discriminator_____: Byte = when (val variant_____ = variant___.value) { null -> { 0 } else -> { bridge.memory.writeI32(resultParameter + 20, variant_____.toInt()) 1 } } bridge.memory.writeByte(resultParameter + 16, discriminator_____) 21 } is HttpV0_2_0Types.ErrorCode.HttpRequestHeaderSize -> { val discriminator______: Byte = when (val variant______ = variant___.value) { null -> { 0 } else -> { // TODO: store wit.wasi.http.v0_2_0.Types.FieldSizePayload 1 } } bridge.memory.writeByte(resultParameter + 16, discriminator______) 22 } is HttpV0_2_0Types.ErrorCode.HttpRequestTrailerSectionSize -> { val discriminator_______: Byte = when (val variant_______ = variant___.value) { null -> { 0 } else -> { bridge.memory.writeI32(resultParameter + 20, variant_______.toInt()) 1 } } bridge.memory.writeByte(resultParameter + 16, discriminator_______) 23 } is HttpV0_2_0Types.ErrorCode.HttpRequestTrailerSize -> { // TODO: store wit.wasi.http.v0_2_0.Types.FieldSizePayload 24 } HttpV0_2_0Types.ErrorCode.HttpResponseIncomplete -> { 25 } is HttpV0_2_0Types.ErrorCode.HttpResponseHeaderSectionSize -> { val discriminator________: Byte = when (val variant________ = variant___.value) { null -> { 0 } else -> { bridge.memory.writeI32(resultParameter + 20, variant________.toInt()) 1 } } bridge.memory.writeByte(resultParameter + 16, discriminator________) 26 } is HttpV0_2_0Types.ErrorCode.HttpResponseHeaderSize -> { // TODO: store wit.wasi.http.v0_2_0.Types.FieldSizePayload 27 } is HttpV0_2_0Types.ErrorCode.HttpResponseBodySize -> { val discriminator_________: Byte = when (val variant_________ = variant___.value) { null -> { 0 } else -> { bridge.memory.writeLong(resultParameter + 20, variant_________.toLong()) 1 } } bridge.memory.writeByte(resultParameter + 16, discriminator_________) 28 } is HttpV0_2_0Types.ErrorCode.HttpResponseTrailerSectionSize -> { val discriminator__________: Byte = when (val variant__________ = variant___.value) { null -> { 0 } else -> { bridge.memory.writeI32(resultParameter + 20, variant__________.toInt()) 1 } } bridge.memory.writeByte(resultParameter + 16, discriminator__________) 29 } is HttpV0_2_0Types.ErrorCode.HttpResponseTrailerSize -> { // TODO: store wit.wasi.http.v0_2_0.Types.FieldSizePayload 30 } is HttpV0_2_0Types.ErrorCode.HttpResponseTransferCoding -> { val discriminator___________: Byte = when (val variant___________ = variant___.value) { null -> { 0 } else -> { val byteArray = variant___________.encodeToByteArray() val stringAddress = bridge.allocate(byteArray.size) bridge.memory.write(stringAddress, byteArray) val stringAddress_ = stringAddress val stringByteCount = byteArray.size bridge.memory.writeI32(resultParameter + 20, stringAddress_) bridge.memory.writeI32(resultParameter + 24, stringByteCount) 1 } } bridge.memory.writeByte(resultParameter + 16, discriminator___________) 31 } is HttpV0_2_0Types.ErrorCode.HttpResponseContentCoding -> { val discriminator____________: Byte = when (val variant____________ = variant___.value) { null -> { 0 } else -> { val byteArray_ = variant____________.encodeToByteArray() val stringAddress__ = bridge.allocate(byteArray_.size) bridge.memory.write(stringAddress__, byteArray_) val stringAddress___ = stringAddress__ val stringByteCount_ = byteArray_.size bridge.memory.writeI32(resultParameter + 20, stringAddress___) bridge.memory.writeI32(resultParameter + 24, stringByteCount_) 1 } } bridge.memory.writeByte(resultParameter + 16, discriminator____________) 32 } HttpV0_2_0Types.ErrorCode.HttpResponseTimeout -> { 33 } HttpV0_2_0Types.ErrorCode.HttpUpgradeFailed -> { 34 } HttpV0_2_0Types.ErrorCode.HttpProtocolError -> { 35 } HttpV0_2_0Types.ErrorCode.LoopDetected -> { 36 } HttpV0_2_0Types.ErrorCode.ConfigurationError -> { 37 } is HttpV0_2_0Types.ErrorCode.InternalError -> { val discriminator_____________: Byte = when (val variant_____________ = variant___.value) { null -> { 0 } else -> { val byteArray__ = variant_____________.encodeToByteArray() val stringAddress____ = bridge.allocate(byteArray__.size) bridge.memory.write(stringAddress____, byteArray__) val stringAddress_____ = stringAddress____ val stringByteCount__ = byteArray__.size bridge.memory.writeI32(resultParameter + 20, stringAddress_____) bridge.memory.writeI32(resultParameter + 24, stringByteCount__) 1 } } bridge.memory.writeByte(resultParameter + 16, discriminator_____________) 38 } } bridge.memory.writeByte(resultParameter + 12, discriminator___) 1 } } bridge.memory.writeByte(resultParameter + 8, discriminator__) 0 } is Result.Error -> { 1 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[resource-drop]future-incoming-response", FunctionType.of( listOf(ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) self.close() return@WasmFunctionHandle longArrayOf() }, ) ) /* TODO: outgoingRequest */ store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]outgoing-request.body", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.body() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { // TODO: ResourceEncoder 0 } is Result.Error -> { 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]outgoing-request.method", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.method() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { HttpV0_2_0Types.Method.Get -> { 0 } HttpV0_2_0Types.Method.Head -> { 1 } HttpV0_2_0Types.Method.Post -> { 2 } HttpV0_2_0Types.Method.Put -> { 3 } HttpV0_2_0Types.Method.Delete -> { 4 } HttpV0_2_0Types.Method.Connect -> { 5 } HttpV0_2_0Types.Method.Options -> { 6 } HttpV0_2_0Types.Method.Trace -> { 7 } HttpV0_2_0Types.Method.Patch -> { 8 } is HttpV0_2_0Types.Method.Other -> { val byteArray = variant.value.encodeToByteArray() val stringAddress = bridge.allocate(byteArray.size) bridge.memory.write(stringAddress, byteArray) val stringAddress_ = stringAddress val stringByteCount = byteArray.size bridge.memory.writeI32(resultParameter + 4, stringAddress_) bridge.memory.writeI32(resultParameter + 8, stringByteCount) 9 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]outgoing-request.set-method", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32, ValType.I32), listOf(ValType.I32), ), WasmFunctionHandle { instance, args -> val variant = when (args[1].toInt()) { 0 -> { HttpV0_2_0Types.Method.Get } 1 -> { HttpV0_2_0Types.Method.Head } 2 -> { HttpV0_2_0Types.Method.Post } 3 -> { HttpV0_2_0Types.Method.Put } 4 -> { HttpV0_2_0Types.Method.Delete } 5 -> { HttpV0_2_0Types.Method.Connect } 6 -> { HttpV0_2_0Types.Method.Options } 7 -> { HttpV0_2_0Types.Method.Trace } 8 -> { HttpV0_2_0Types.Method.Patch } 9 -> { HttpV0_2_0Types.Method.Other(bridge.memory.readString(args[2].toInt(), args[3].toInt())) } else -> error("unexpected case") } val self = bridge.`get`(args[0].toInt()) val result = self.setMethod( method = variant, ) val variant_ = result val discriminator = when (variant_) { is Result.Ok -> { 0 } is Result.Error -> { 1 } } return@WasmFunctionHandle longArrayOf(discriminator.toLong()) }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]outgoing-request.path-with-query", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.pathWithQuery() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { null -> { 0 } else -> { val byteArray = variant.encodeToByteArray() val stringAddress = bridge.allocate(byteArray.size) bridge.memory.write(stringAddress, byteArray) val stringAddress_ = stringAddress val stringByteCount = byteArray.size bridge.memory.writeI32(resultParameter + 4, stringAddress_) bridge.memory.writeI32(resultParameter + 8, stringByteCount) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]outgoing-request.set-path-with-query", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32, ValType.I32), listOf(ValType.I32), ), WasmFunctionHandle { instance, args -> val variant = when (args[1].toInt()) { 0 -> { null } 1 -> { bridge.memory.readString(args[2].toInt(), args[3].toInt()) } else -> error("unexpected case") } val self = bridge.`get`(args[0].toInt()) val result = self.setPathWithQuery( pathWithQuery = variant, ) val variant_ = result val discriminator = when (variant_) { is Result.Ok -> { 0 } is Result.Error -> { 1 } } return@WasmFunctionHandle longArrayOf(discriminator.toLong()) }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]outgoing-request.scheme", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.scheme() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { null -> { 0 } else -> { val discriminator_: Byte = when (val variant_ = variant) { HttpV0_2_0Types.Scheme.Http -> { 0 } HttpV0_2_0Types.Scheme.Https -> { 1 } is HttpV0_2_0Types.Scheme.Other -> { val byteArray = variant_.value.encodeToByteArray() val stringAddress = bridge.allocate(byteArray.size) bridge.memory.write(stringAddress, byteArray) val stringAddress_ = stringAddress val stringByteCount = byteArray.size bridge.memory.writeI32(resultParameter + 8, stringAddress_) bridge.memory.writeI32(resultParameter + 12, stringByteCount) 2 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]outgoing-request.set-scheme", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32, ValType.I32, ValType.I32), listOf(ValType.I32), ), WasmFunctionHandle { instance, args -> val variant = when (args[1].toInt()) { 0 -> { null } 1 -> { val variant_ = when (args[2].toInt()) { 0 -> { HttpV0_2_0Types.Scheme.Http } 1 -> { HttpV0_2_0Types.Scheme.Https } 2 -> { HttpV0_2_0Types.Scheme.Other(bridge.memory.readString(args[3].toInt(), args[4].toInt())) } else -> error("unexpected case") } variant_ } else -> error("unexpected case") } val self = bridge.`get`(args[0].toInt()) val result = self.setScheme( scheme = variant, ) val variant__ = result val discriminator = when (variant__) { is Result.Ok -> { 0 } is Result.Error -> { 1 } } return@WasmFunctionHandle longArrayOf(discriminator.toLong()) }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]outgoing-request.authority", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.authority() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { null -> { 0 } else -> { val byteArray = variant.encodeToByteArray() val stringAddress = bridge.allocate(byteArray.size) bridge.memory.write(stringAddress, byteArray) val stringAddress_ = stringAddress val stringByteCount = byteArray.size bridge.memory.writeI32(resultParameter + 4, stringAddress_) bridge.memory.writeI32(resultParameter + 8, stringByteCount) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]outgoing-request.set-authority", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32, ValType.I32), listOf(ValType.I32), ), WasmFunctionHandle { instance, args -> val variant = when (args[1].toInt()) { 0 -> { null } 1 -> { bridge.memory.readString(args[2].toInt(), args[3].toInt()) } else -> error("unexpected case") } val self = bridge.`get`(args[0].toInt()) val result = self.setAuthority( authority = variant, ) val variant_ = result val discriminator = when (variant_) { is Result.Ok -> { 0 } is Result.Error -> { 1 } } return@WasmFunctionHandle longArrayOf(discriminator.toLong()) }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]outgoing-request.headers", FunctionType.of( listOf(ValType.I32), listOf(ValType.I32), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.headers() return@WasmFunctionHandle longArrayOf(TODO("lower wit.wasi.http.v0_2_0.Types.Headers").toLong()) }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[resource-drop]outgoing-request", FunctionType.of( listOf(ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) self.close() return@WasmFunctionHandle longArrayOf() }, ) ) /* TODO: requestOptions */ store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]request-options.connect-timeout", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.connectTimeout() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { null -> { 0 } else -> { // TODO: store wit.wasi.clocks.v0_2_0.MonotonicClock.Duration 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]request-options.set-connect-timeout", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32), listOf(ValType.I32), ), WasmFunctionHandle { instance, args -> val variant = when (args[1].toInt()) { 0 -> { null } 1 -> { TODO("lift wit.wasi.clocks.v0_2_0.MonotonicClock.Duration") } else -> error("unexpected case") } val self = bridge.`get`(args[0].toInt()) val result = self.setConnectTimeout( duration = variant, ) val variant_ = result val discriminator = when (variant_) { is Result.Ok -> { 0 } is Result.Error -> { 1 } } return@WasmFunctionHandle longArrayOf(discriminator.toLong()) }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]request-options.first-byte-timeout", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.firstByteTimeout() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { null -> { 0 } else -> { // TODO: store wit.wasi.clocks.v0_2_0.MonotonicClock.Duration 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]request-options.set-first-byte-timeout", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32), listOf(ValType.I32), ), WasmFunctionHandle { instance, args -> val variant = when (args[1].toInt()) { 0 -> { null } 1 -> { TODO("lift wit.wasi.clocks.v0_2_0.MonotonicClock.Duration") } else -> error("unexpected case") } val self = bridge.`get`(args[0].toInt()) val result = self.setFirstByteTimeout( duration = variant, ) val variant_ = result val discriminator = when (variant_) { is Result.Ok -> { 0 } is Result.Error -> { 1 } } return@WasmFunctionHandle longArrayOf(discriminator.toLong()) }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]request-options.between-bytes-timeout", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.betweenBytesTimeout() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { null -> { 0 } else -> { // TODO: store wit.wasi.clocks.v0_2_0.MonotonicClock.Duration 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]request-options.set-between-bytes-timeout", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32), listOf(ValType.I32), ), WasmFunctionHandle { instance, args -> val variant = when (args[1].toInt()) { 0 -> { null } 1 -> { TODO("lift wit.wasi.clocks.v0_2_0.MonotonicClock.Duration") } else -> error("unexpected case") } val self = bridge.`get`(args[0].toInt()) val result = self.setBetweenBytesTimeout( duration = variant, ) val variant_ = result val discriminator = when (variant_) { is Result.Ok -> { 0 } is Result.Error -> { 1 } } return@WasmFunctionHandle longArrayOf(discriminator.toLong()) }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[resource-drop]request-options", FunctionType.of( listOf(ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) self.close() return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]incoming-request.method", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.method() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { HttpV0_2_0Types.Method.Get -> { 0 } HttpV0_2_0Types.Method.Head -> { 1 } HttpV0_2_0Types.Method.Post -> { 2 } HttpV0_2_0Types.Method.Put -> { 3 } HttpV0_2_0Types.Method.Delete -> { 4 } HttpV0_2_0Types.Method.Connect -> { 5 } HttpV0_2_0Types.Method.Options -> { 6 } HttpV0_2_0Types.Method.Trace -> { 7 } HttpV0_2_0Types.Method.Patch -> { 8 } is HttpV0_2_0Types.Method.Other -> { val byteArray = variant.value.encodeToByteArray() val stringAddress = bridge.allocate(byteArray.size) bridge.memory.write(stringAddress, byteArray) val stringAddress_ = stringAddress val stringByteCount = byteArray.size bridge.memory.writeI32(resultParameter + 4, stringAddress_) bridge.memory.writeI32(resultParameter + 8, stringByteCount) 9 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]incoming-request.path-with-query", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.pathWithQuery() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { null -> { 0 } else -> { val byteArray = variant.encodeToByteArray() val stringAddress = bridge.allocate(byteArray.size) bridge.memory.write(stringAddress, byteArray) val stringAddress_ = stringAddress val stringByteCount = byteArray.size bridge.memory.writeI32(resultParameter + 4, stringAddress_) bridge.memory.writeI32(resultParameter + 8, stringByteCount) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]incoming-request.scheme", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.scheme() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { null -> { 0 } else -> { val discriminator_: Byte = when (val variant_ = variant) { HttpV0_2_0Types.Scheme.Http -> { 0 } HttpV0_2_0Types.Scheme.Https -> { 1 } is HttpV0_2_0Types.Scheme.Other -> { val byteArray = variant_.value.encodeToByteArray() val stringAddress = bridge.allocate(byteArray.size) bridge.memory.write(stringAddress, byteArray) val stringAddress_ = stringAddress val stringByteCount = byteArray.size bridge.memory.writeI32(resultParameter + 8, stringAddress_) bridge.memory.writeI32(resultParameter + 12, stringByteCount) 2 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]incoming-request.authority", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.authority() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { null -> { 0 } else -> { val byteArray = variant.encodeToByteArray() val stringAddress = bridge.allocate(byteArray.size) bridge.memory.write(stringAddress, byteArray) val stringAddress_ = stringAddress val stringByteCount = byteArray.size bridge.memory.writeI32(resultParameter + 4, stringAddress_) bridge.memory.writeI32(resultParameter + 8, stringByteCount) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]incoming-request.headers", FunctionType.of( listOf(ValType.I32), listOf(ValType.I32), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.headers() return@WasmFunctionHandle longArrayOf(TODO("lower wit.wasi.http.v0_2_0.Types.Headers").toLong()) }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]incoming-request.consume", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.consume() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { // TODO: ResourceEncoder 0 } is Result.Error -> { 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[resource-drop]incoming-request", FunctionType.of( listOf(ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) self.close() return@WasmFunctionHandle longArrayOf() }, ) ) /* TODO: set */ store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[resource-drop]response-outparam", FunctionType.of( listOf(ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) self.close() return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]incoming-response.status", FunctionType.of( listOf(ValType.I32), listOf(ValType.I32), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.status() return@WasmFunctionHandle longArrayOf(TODO("lower wit.wasi.http.v0_2_0.Types.StatusCode").toLong()) }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]incoming-response.headers", FunctionType.of( listOf(ValType.I32), listOf(ValType.I32), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.headers() return@WasmFunctionHandle longArrayOf(TODO("lower wit.wasi.http.v0_2_0.Types.Headers").toLong()) }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]incoming-response.consume", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.consume() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { // TODO: ResourceEncoder 0 } is Result.Error -> { 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[resource-drop]incoming-response", FunctionType.of( listOf(ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) self.close() return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]outgoing-body.write", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.write() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { // TODO: ResourceEncoder 0 } is Result.Error -> { 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) /* TODO: finish */ store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[resource-drop]outgoing-body", FunctionType.of( listOf(ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) self.close() return@WasmFunctionHandle longArrayOf() }, ) ) /* TODO: fields */ /* TODO: fromList */ store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]fields.get", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.`get`( name = TODO("lift wit.wasi.http.v0_2_0.Types.FieldKey"), ) val resultParameter = args[2].toInt() val listAddress = bridge.allocate(result.size * 4) for (i in result.indices) { val elementAddress = listAddress + i * 4 // TODO: store wit.wasi.http.v0_2_0.Types.FieldValue } bridge.memory.writeI32(resultParameter, listAddress) bridge.memory.writeI32(resultParameter + 4, result.size) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]fields.has", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(ValType.I32), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.has( name = TODO("lift wit.wasi.http.v0_2_0.Types.FieldKey"), ) return@WasmFunctionHandle longArrayOf((if (result) 1 else 0).toLong()) }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]fields.set", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32, ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val listAddress = args[2].toInt() val length = args[3].toInt() val list = List(length) { i -> val elementAddress = listAddress + i * 4 TODO("load wit.wasi.http.v0_2_0.Types.FieldValue") } val self = bridge.`get`(args[0].toInt()) val result = self.`set`( name = TODO("lift wit.wasi.http.v0_2_0.Types.FieldKey"), value_ = list, ) val resultParameter = args[4].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { HttpV0_2_0Types.HeaderError.InvalidSyntax -> { 0 } HttpV0_2_0Types.HeaderError.Forbidden -> { 1 } HttpV0_2_0Types.HeaderError.Immutable -> { 2 } } bridge.memory.writeByte(resultParameter + 1, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]fields.delete", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.delete( name = TODO("lift wit.wasi.http.v0_2_0.Types.FieldKey"), ) val resultParameter = args[2].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { HttpV0_2_0Types.HeaderError.InvalidSyntax -> { 0 } HttpV0_2_0Types.HeaderError.Forbidden -> { 1 } HttpV0_2_0Types.HeaderError.Immutable -> { 2 } } bridge.memory.writeByte(resultParameter + 1, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]fields.append", FunctionType.of( listOf(ValType.I32, ValType.I32, ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.append( name = TODO("lift wit.wasi.http.v0_2_0.Types.FieldKey"), value_ = TODO("lift wit.wasi.http.v0_2_0.Types.FieldValue"), ) val resultParameter = args[3].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { 0 } is Result.Error -> { val discriminator_: Byte = when (val variant_ = variant.value) { HttpV0_2_0Types.HeaderError.InvalidSyntax -> { 0 } HttpV0_2_0Types.HeaderError.Forbidden -> { 1 } HttpV0_2_0Types.HeaderError.Immutable -> { 2 } } bridge.memory.writeByte(resultParameter + 1, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]fields.entries", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.entries() val resultParameter = args[1].toInt() val listAddress = bridge.allocate(result.size * 8) for (i in result.indices) { val elementAddress = listAddress + i * 8 // TODO: store wit.wasi.http.v0_2_0.Types.FieldKey // TODO: store wit.wasi.http.v0_2_0.Types.FieldValue } bridge.memory.writeI32(resultParameter, listAddress) bridge.memory.writeI32(resultParameter + 4, result.size) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]fields.clone", FunctionType.of( listOf(ValType.I32), listOf(ValType.I32), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.clone() return@WasmFunctionHandle longArrayOf(bridge.toId(result).toLong()) }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[resource-drop]fields", FunctionType.of( listOf(ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) self.close() return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]incoming-body.%stream", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.stream() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { // TODO: ResourceEncoder 0 } is Result.Error -> { 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) /* TODO: finish */ store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[resource-drop]incoming-body", FunctionType.of( listOf(ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) self.close() return@WasmFunctionHandle longArrayOf() }, ) ) /* TODO: outgoingResponse */ store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]outgoing-response.status-code", FunctionType.of( listOf(ValType.I32), listOf(ValType.I32), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.statusCode() return@WasmFunctionHandle longArrayOf(TODO("lower wit.wasi.http.v0_2_0.Types.StatusCode").toLong()) }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]outgoing-response.set-status-code", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(ValType.I32), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.setStatusCode( statusCode = TODO("lift wit.wasi.http.v0_2_0.Types.StatusCode"), ) val variant = result val discriminator = when (variant) { is Result.Ok -> { 0 } is Result.Error -> { 1 } } return@WasmFunctionHandle longArrayOf(discriminator.toLong()) }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]outgoing-response.headers", FunctionType.of( listOf(ValType.I32), listOf(ValType.I32), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.headers() return@WasmFunctionHandle longArrayOf(TODO("lower wit.wasi.http.v0_2_0.Types.Headers").toLong()) }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]outgoing-response.body", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.body() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { is Result.Ok -> { // TODO: ResourceEncoder 0 } is Result.Error -> { 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[resource-drop]outgoing-response", FunctionType.of( listOf(ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) self.close() return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]future-trailers.subscribe", FunctionType.of( listOf(ValType.I32), listOf(ValType.I32), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.subscribe() return@WasmFunctionHandle longArrayOf(bridge.toId(result).toLong()) }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[method]future-trailers.get", FunctionType.of( listOf(ValType.I32, ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) val result = self.`get`() val resultParameter = args[1].toInt() val discriminator: Byte = when (val variant = result) { null -> { 0 } else -> { val discriminator_: Byte = when (val variant_ = variant) { is Result.Ok -> { val discriminator__: Byte = when (val variant__ = variant_.value) { is Result.Ok -> { val discriminator___: Byte = when (val variant___ = variant__.value) { null -> { 0 } else -> { // TODO: store wit.wasi.http.v0_2_0.Types.Trailers 1 } } bridge.memory.writeByte(resultParameter + 12, discriminator___) 0 } is Result.Error -> { val discriminator____: Byte = when (val variant____ = variant__.value) { HttpV0_2_0Types.ErrorCode.DnsTimeout -> { 0 } is HttpV0_2_0Types.ErrorCode.DnsError -> { // TODO: store wit.wasi.http.v0_2_0.Types.DnsErrorPayload 1 } HttpV0_2_0Types.ErrorCode.DestinationNotFound -> { 2 } HttpV0_2_0Types.ErrorCode.DestinationUnavailable -> { 3 } HttpV0_2_0Types.ErrorCode.DestinationIpProhibited -> { 4 } HttpV0_2_0Types.ErrorCode.DestinationIpUnroutable -> { 5 } HttpV0_2_0Types.ErrorCode.ConnectionRefused -> { 6 } HttpV0_2_0Types.ErrorCode.ConnectionTerminated -> { 7 } HttpV0_2_0Types.ErrorCode.ConnectionTimeout -> { 8 } HttpV0_2_0Types.ErrorCode.ConnectionReadTimeout -> { 9 } HttpV0_2_0Types.ErrorCode.ConnectionWriteTimeout -> { 10 } HttpV0_2_0Types.ErrorCode.ConnectionLimitReached -> { 11 } HttpV0_2_0Types.ErrorCode.TlsProtocolError -> { 12 } HttpV0_2_0Types.ErrorCode.TlsCertificateError -> { 13 } is HttpV0_2_0Types.ErrorCode.TlsAlertReceived -> { // TODO: store wit.wasi.http.v0_2_0.Types.TlsAlertReceivedPayload 14 } HttpV0_2_0Types.ErrorCode.HttpRequestDenied -> { 15 } HttpV0_2_0Types.ErrorCode.HttpRequestLengthRequired -> { 16 } is HttpV0_2_0Types.ErrorCode.HttpRequestBodySize -> { val discriminator_____: Byte = when (val variant_____ = variant____.value) { null -> { 0 } else -> { bridge.memory.writeLong(resultParameter + 20, variant_____.toLong()) 1 } } bridge.memory.writeByte(resultParameter + 16, discriminator_____) 17 } HttpV0_2_0Types.ErrorCode.HttpRequestMethodInvalid -> { 18 } HttpV0_2_0Types.ErrorCode.HttpRequestUriInvalid -> { 19 } HttpV0_2_0Types.ErrorCode.HttpRequestUriTooLong -> { 20 } is HttpV0_2_0Types.ErrorCode.HttpRequestHeaderSectionSize -> { val discriminator______: Byte = when (val variant______ = variant____.value) { null -> { 0 } else -> { bridge.memory.writeI32(resultParameter + 20, variant______.toInt()) 1 } } bridge.memory.writeByte(resultParameter + 16, discriminator______) 21 } is HttpV0_2_0Types.ErrorCode.HttpRequestHeaderSize -> { val discriminator_______: Byte = when (val variant_______ = variant____.value) { null -> { 0 } else -> { // TODO: store wit.wasi.http.v0_2_0.Types.FieldSizePayload 1 } } bridge.memory.writeByte(resultParameter + 16, discriminator_______) 22 } is HttpV0_2_0Types.ErrorCode.HttpRequestTrailerSectionSize -> { val discriminator________: Byte = when (val variant________ = variant____.value) { null -> { 0 } else -> { bridge.memory.writeI32(resultParameter + 20, variant________.toInt()) 1 } } bridge.memory.writeByte(resultParameter + 16, discriminator________) 23 } is HttpV0_2_0Types.ErrorCode.HttpRequestTrailerSize -> { // TODO: store wit.wasi.http.v0_2_0.Types.FieldSizePayload 24 } HttpV0_2_0Types.ErrorCode.HttpResponseIncomplete -> { 25 } is HttpV0_2_0Types.ErrorCode.HttpResponseHeaderSectionSize -> { val discriminator_________: Byte = when (val variant_________ = variant____.value) { null -> { 0 } else -> { bridge.memory.writeI32(resultParameter + 20, variant_________.toInt()) 1 } } bridge.memory.writeByte(resultParameter + 16, discriminator_________) 26 } is HttpV0_2_0Types.ErrorCode.HttpResponseHeaderSize -> { // TODO: store wit.wasi.http.v0_2_0.Types.FieldSizePayload 27 } is HttpV0_2_0Types.ErrorCode.HttpResponseBodySize -> { val discriminator__________: Byte = when (val variant__________ = variant____.value) { null -> { 0 } else -> { bridge.memory.writeLong(resultParameter + 20, variant__________.toLong()) 1 } } bridge.memory.writeByte(resultParameter + 16, discriminator__________) 28 } is HttpV0_2_0Types.ErrorCode.HttpResponseTrailerSectionSize -> { val discriminator___________: Byte = when (val variant___________ = variant____.value) { null -> { 0 } else -> { bridge.memory.writeI32(resultParameter + 20, variant___________.toInt()) 1 } } bridge.memory.writeByte(resultParameter + 16, discriminator___________) 29 } is HttpV0_2_0Types.ErrorCode.HttpResponseTrailerSize -> { // TODO: store wit.wasi.http.v0_2_0.Types.FieldSizePayload 30 } is HttpV0_2_0Types.ErrorCode.HttpResponseTransferCoding -> { val discriminator____________: Byte = when (val variant____________ = variant____.value) { null -> { 0 } else -> { val byteArray = variant____________.encodeToByteArray() val stringAddress = bridge.allocate(byteArray.size) bridge.memory.write(stringAddress, byteArray) val stringAddress_ = stringAddress val stringByteCount = byteArray.size bridge.memory.writeI32(resultParameter + 20, stringAddress_) bridge.memory.writeI32(resultParameter + 24, stringByteCount) 1 } } bridge.memory.writeByte(resultParameter + 16, discriminator____________) 31 } is HttpV0_2_0Types.ErrorCode.HttpResponseContentCoding -> { val discriminator_____________: Byte = when (val variant_____________ = variant____.value) { null -> { 0 } else -> { val byteArray_ = variant_____________.encodeToByteArray() val stringAddress__ = bridge.allocate(byteArray_.size) bridge.memory.write(stringAddress__, byteArray_) val stringAddress___ = stringAddress__ val stringByteCount_ = byteArray_.size bridge.memory.writeI32(resultParameter + 20, stringAddress___) bridge.memory.writeI32(resultParameter + 24, stringByteCount_) 1 } } bridge.memory.writeByte(resultParameter + 16, discriminator_____________) 32 } HttpV0_2_0Types.ErrorCode.HttpResponseTimeout -> { 33 } HttpV0_2_0Types.ErrorCode.HttpUpgradeFailed -> { 34 } HttpV0_2_0Types.ErrorCode.HttpProtocolError -> { 35 } HttpV0_2_0Types.ErrorCode.LoopDetected -> { 36 } HttpV0_2_0Types.ErrorCode.ConfigurationError -> { 37 } is HttpV0_2_0Types.ErrorCode.InternalError -> { val discriminator______________: Byte = when (val variant______________ = variant____.value) { null -> { 0 } else -> { val byteArray__ = variant______________.encodeToByteArray() val stringAddress____ = bridge.allocate(byteArray__.size) bridge.memory.write(stringAddress____, byteArray__) val stringAddress_____ = stringAddress____ val stringByteCount__ = byteArray__.size bridge.memory.writeI32(resultParameter + 20, stringAddress_____) bridge.memory.writeI32(resultParameter + 24, stringByteCount__) 1 } } bridge.memory.writeByte(resultParameter + 16, discriminator______________) 38 } } bridge.memory.writeByte(resultParameter + 12, discriminator____) 1 } } bridge.memory.writeByte(resultParameter + 8, discriminator__) 0 } is Result.Error -> { 1 } } bridge.memory.writeByte(resultParameter + 4, discriminator_) 1 } } bridge.memory.writeByte(resultParameter, discriminator) return@WasmFunctionHandle longArrayOf() }, ) ) store.addFunction( HostFunction( "wasi:http/types@0.2.0", "[resource-drop]future-trailers", FunctionType.of( listOf(ValType.I32), listOf(), ), WasmFunctionHandle { instance, args -> val self = bridge.`get`(args[0].toInt()) self.close() return@WasmFunctionHandle longArrayOf() }, ) ) } internal class BridgeHost( private val bridge: HostBridge, ) : Imports.Host { override val environment: BridgeEnvironment = BridgeEnvironment(bridge) override val exit: BridgeExit = BridgeExit(bridge) override val stdin: BridgeStdin = BridgeStdin(bridge) override val stdout: BridgeStdout = BridgeStdout(bridge) override val stderr: BridgeStderr = BridgeStderr(bridge) override val terminalStdin: BridgeTerminalStdin = BridgeTerminalStdin(bridge) override val terminalStdout: BridgeTerminalStdout = BridgeTerminalStdout(bridge) override val terminalStderr: BridgeTerminalStderr = BridgeTerminalStderr(bridge) override val monotonicClock: BridgeMonotonicClock = BridgeMonotonicClock(bridge) override val wallClock: BridgeWallClock = BridgeWallClock(bridge) override val types: BridgeTypes = BridgeTypes(bridge) override val preopens: BridgePreopens = BridgePreopens(bridge) override val instanceNetwork: BridgeInstanceNetwork = BridgeInstanceNetwork(bridge) override val udpCreateSocket: BridgeUdpCreateSocket = BridgeUdpCreateSocket(bridge) override val tcpCreateSocket: BridgeTcpCreateSocket = BridgeTcpCreateSocket(bridge) override val ipNameLookup: BridgeIpNameLookup = BridgeIpNameLookup(bridge) override val random: BridgeRandom = BridgeRandom(bridge) override val insecure: BridgeInsecure = BridgeInsecure(bridge) override val insecureSeed: BridgeInsecureSeed = BridgeInsecureSeed(bridge) override val poll: BridgePoll = BridgePoll(bridge) } } internal class BridgeRun( private val bridge: HostBridge, ) : Run { internal lateinit var run: ExportFunction override fun run(): Result<*, *> { val result = run.apply( ) val variant = when (result[0].toInt()) { 0 -> { Result.Ok(kotlin.Unit) } 1 -> { Result.Error(kotlin.Unit) } else -> error("unexpected case") } return variant } } internal class BridgeStdin( private val bridge: HostBridge, ) : Stdin { internal lateinit var getStdin: ExportFunction override fun getStdin(): Streams.InputStream { val result = getStdin.apply( ) return bridge.`get`(result[0].toInt()) } } internal class BridgeStdout( private val bridge: HostBridge, ) : Stdout { internal lateinit var getStdout: ExportFunction override fun getStdout(): Streams.OutputStream { val result = getStdout.apply( ) return bridge.`get`(result[0].toInt()) } } internal class BridgeStderr( private val bridge: HostBridge, ) : Stderr { internal lateinit var getStderr: ExportFunction override fun getStderr(): Streams.OutputStream { val result = getStderr.apply( ) return bridge.`get`(result[0].toInt()) } } internal class BridgeTerminalStdin( private val bridge: HostBridge, ) : TerminalStdin { internal lateinit var getTerminalStdin: ExportFunction override fun getTerminalStdin(): TerminalInput.TerminalInput? { val result = getTerminalStdin.apply( ) val variant = when (bridge.memory.read(result[0].toInt()).toInt()) { 0 -> { null } 1 -> { TODO("ResourceEncoder") } else -> error("unexpected case") } return variant } } internal class BridgeTerminalStdout( private val bridge: HostBridge, ) : TerminalStdout { internal lateinit var getTerminalStdout: ExportFunction override fun getTerminalStdout(): TerminalOutput.TerminalOutput? { val result = getTerminalStdout.apply( ) val variant = when (bridge.memory.read(result[0].toInt()).toInt()) { 0 -> { null } 1 -> { TODO("ResourceEncoder") } else -> error("unexpected case") } return variant } } internal class BridgeTerminalStderr( private val bridge: HostBridge, ) : TerminalStderr { internal lateinit var getTerminalStderr: ExportFunction override fun getTerminalStderr(): TerminalOutput.TerminalOutput? { val result = getTerminalStderr.apply( ) val variant = when (bridge.memory.read(result[0].toInt()).toInt()) { 0 -> { null } 1 -> { TODO("ResourceEncoder") } else -> error("unexpected case") } return variant } }