From 34a525c38c8c328061839e8e9b87d61da1f7736f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kav=C3=ADk?= Date: Mon, 24 Jun 2024 23:37:44 +0200 Subject: [PATCH] rust_decoder --- Cargo.lock | 802 +++++++++++++++++- Cargo.toml | 2 +- src-tauri/Cargo.toml | 1 + test_files/components/rust_decoder/Cargo.toml | 26 + test_files/components/rust_decoder/README.md | 7 + .../components/rust_decoder/rust_decoder.wasm | Bin 0 -> 47315 bytes .../components/rust_decoder/src/bindings.rs | 220 +++++ test_files/components/rust_decoder/src/lib.rs | 30 + .../components/rust_decoder/wit/world.wit | 16 + 9 files changed, 1082 insertions(+), 22 deletions(-) create mode 100644 test_files/components/rust_decoder/Cargo.toml create mode 100644 test_files/components/rust_decoder/README.md create mode 100644 test_files/components/rust_decoder/rust_decoder.wasm create mode 100644 test_files/components/rust_decoder/src/bindings.rs create mode 100644 test_files/components/rust_decoder/src/lib.rs create mode 100644 test_files/components/rust_decoder/wit/world.wit diff --git a/Cargo.lock b/Cargo.lock index c0ef9a3..9d27f0f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -315,6 +315,12 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f47b57fc4521e3cae26a4d45b5227f8fadee4c345be0fefd8d5d1711afb8aeb9" +[[package]] +name = "arbitrary" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" + [[package]] name = "ashpd" version = "0.8.1" @@ -517,7 +523,7 @@ dependencies = [ "cfg-if", "libc", "miniz_oxide", - "object", + "object 0.32.2", "rustc-demangle", ] @@ -709,7 +715,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a969e13a7589e9e3e4207e153bae624ade2b5622fb4684a4923b23ec3d57719" dependencies = [ "serde", - "toml 0.8.2", + "toml 0.8.14", ] [[package]] @@ -717,6 +723,11 @@ name = "cc" version = "1.0.97" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "099a5357d84c4c61eb35fc8eafa9a79a902c2f76911e5747ced4e032edd8d9b4" +dependencies = [ + "jobserver", + "libc", + "once_cell", +] [[package]] name = "cesu8" @@ -788,6 +799,12 @@ dependencies = [ "windows-targets 0.52.5", ] +[[package]] +name = "cobs" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67ba02a97a2bd10f4b59b25c7973101c79642302776489e030cd13cdab09ed15" + [[package]] name = "cocoa" version = "0.25.0" @@ -911,6 +928,15 @@ dependencies = [ "libc", ] +[[package]] +name = "cpp_demangle" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e8227005286ec39567949b33df9896bcadfa6051bccca2488129f108ca23119" +dependencies = [ + "cfg-if", +] + [[package]] name = "cpufeatures" version = "0.2.12" @@ -920,6 +946,116 @@ dependencies = [ "libc", ] +[[package]] +name = "cranelift-bforest" +version = "0.109.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b6b33d7e757a887989eb18b35712b2a67d96171ec3149d1bfb657b29b7b367c" +dependencies = [ + "cranelift-entity", +] + +[[package]] +name = "cranelift-codegen" +version = "0.109.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9acf15cb22be42d07c3b57d7856329cb228b7315d385346149df2566ad5e4aa" +dependencies = [ + "bumpalo", + "cranelift-bforest", + "cranelift-codegen-meta", + "cranelift-codegen-shared", + "cranelift-control", + "cranelift-entity", + "cranelift-isle", + "gimli", + "hashbrown 0.14.5", + "log", + "regalloc2", + "rustc-hash", + "smallvec 1.13.2", + "target-lexicon", +] + +[[package]] +name = "cranelift-codegen-meta" +version = "0.109.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e934d301392b73b3f8b0540391fb82465a0f179a3cee7c726482ac4727efcc97" +dependencies = [ + "cranelift-codegen-shared", +] + +[[package]] +name = "cranelift-codegen-shared" +version = "0.109.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb2a2566b3d54b854dfb288b3b187f6d3d17d6f762c92898207eba302931da" + +[[package]] +name = "cranelift-control" +version = "0.109.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0100f33b704cdacd01ad66ff41f8c5030d57cbff078e2a4e49ab1822591299fa" +dependencies = [ + "arbitrary", +] + +[[package]] +name = "cranelift-entity" +version = "0.109.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8cfdc315e5d18997093e040a8d234bea1ac1e118a716d3e30f40d449e78207b" +dependencies = [ + "serde", + "serde_derive", +] + +[[package]] +name = "cranelift-frontend" +version = "0.109.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f74b84f16af2e982b0c0c72233503d9d55cbfe3865dbe807ca28dc6642a28b5" +dependencies = [ + "cranelift-codegen", + "log", + "smallvec 1.13.2", + "target-lexicon", +] + +[[package]] +name = "cranelift-isle" +version = "0.109.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adf306d3dde705fb94bd48082f01d38c4ededc74293a4c007805f610bf08bc6e" + +[[package]] +name = "cranelift-native" +version = "0.109.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ea0ebdef7aff4a79bcbc8b6495f31315f16b3bf311152f472eaa8d679352581" +dependencies = [ + "cranelift-codegen", + "libc", + "target-lexicon", +] + +[[package]] +name = "cranelift-wasm" +version = "0.109.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d549108a1942065cdbac3bb96c2952afa0e1b9a3beff4b08c4308ac72257576d" +dependencies = [ + "cranelift-codegen", + "cranelift-entity", + "cranelift-frontend", + "itertools", + "log", + "smallvec 1.13.2", + "wasmparser", + "wasmtime-types", +] + [[package]] name = "crc32fast" version = "1.4.0" @@ -1067,6 +1203,15 @@ dependencies = [ "syn 2.0.61", ] +[[package]] +name = "debugid" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d" +dependencies = [ + "uuid", +] + [[package]] name = "deranged" version = "0.3.11" @@ -1111,6 +1256,16 @@ dependencies = [ "crypto-common", ] +[[package]] +name = "directories-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc" +dependencies = [ + "cfg-if", + "dirs-sys-next", +] + [[package]] name = "dirs" version = "5.0.1" @@ -1279,7 +1434,7 @@ dependencies = [ "cc", "memchr", "rustc_version", - "toml 0.8.2", + "toml 0.8.14", "vswhom", "winreg", ] @@ -1290,6 +1445,12 @@ version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" +[[package]] +name = "embedded-io" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" + [[package]] name = "enclose" version = "1.1.8" @@ -1410,6 +1571,12 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "fallible-iterator" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" + [[package]] name = "fastrand" version = "2.1.0" @@ -1427,6 +1594,7 @@ dependencies = [ "tauri-build", "tauri-plugin-dialog", "tauri-plugin-window-state", + "wasmtime", "wellen", ] @@ -1686,6 +1854,19 @@ dependencies = [ "byteorder", ] +[[package]] +name = "fxprof-processed-profile" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27d12c0aed7f1e24276a241aadc4cb8ea9f83000f34bc062b7cc2d51e3b0fabd" +dependencies = [ + "bitflags 2.5.0", + "debugid", + "fxhash", + "serde", + "serde_json", +] + [[package]] name = "gdk" version = "0.18.0" @@ -1849,6 +2030,11 @@ name = "gimli" version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +dependencies = [ + "fallible-iterator", + "indexmap 2.2.6", + "stable_deref_trait", +] [[package]] name = "gio" @@ -1912,7 +2098,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc" dependencies = [ "heck 0.4.1", - "proc-macro-crate 2.0.2", + "proc-macro-crate 2.0.0", "proc-macro-error", "proc-macro2", "quote", @@ -2056,11 +2242,24 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", +] + [[package]] name = "hashbrown" version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash", + "serde", +] [[package]] name = "heck" @@ -2259,6 +2458,12 @@ dependencies = [ "png", ] +[[package]] +name = "id-arena" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25a2bc672d1148e28034f176e01fffebb08b35768468cc954630da77a1449005" + [[package]] name = "ident_case" version = "1.0.1" @@ -2338,6 +2543,15 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "0.4.8" @@ -2350,6 +2564,26 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +[[package]] +name = "ittapi" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b996fe614c41395cdaedf3cf408a9534851090959d90d54a535f675550b64b1" +dependencies = [ + "anyhow", + "ittapi-sys", + "log", +] + +[[package]] +name = "ittapi-sys" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52f5385394064fa2c886205dba02598013ce83d3e92d33dbdc0c52fe0e7bf4fc" +dependencies = [ + "cc", +] + [[package]] name = "javascriptcore-rs" version = "1.1.2" @@ -2395,6 +2629,15 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" +[[package]] +name = "jobserver" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" +dependencies = [ + "libc", +] + [[package]] name = "js-sys" version = "0.3.69" @@ -2515,6 +2758,12 @@ dependencies = [ "windows-targets 0.52.5", ] +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + [[package]] name = "libredox" version = "0.1.3" @@ -2615,6 +2864,15 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" +[[package]] +name = "mach2" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b955cdeb2a02b9117f121ce63aa52d08ade45de53e48fe6a38b39c10f6f709" +dependencies = [ + "libc", +] + [[package]] name = "malloc_buf" version = "0.0.6" @@ -2665,6 +2923,15 @@ version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" +[[package]] +name = "memfd" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2cffa4ad52c6f791f4f8b15f0c05f9824b2ced1160e88cc393d64fff9a8ac64" +dependencies = [ + "rustix", +] + [[package]] name = "memmap2" version = "0.9.4" @@ -2952,7 +3219,7 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" dependencies = [ - "proc-macro-crate 2.0.2", + "proc-macro-crate 2.0.0", "proc-macro2", "quote", "syn 2.0.61", @@ -3006,6 +3273,18 @@ dependencies = [ "memchr", ] +[[package]] +name = "object" +version = "0.36.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "576dfe1fc8f9df304abb159d767a29d0476f7750fbf8aa7ad07816004a207434" +dependencies = [ + "crc32fast", + "hashbrown 0.14.5", + "indexmap 2.2.6", + "memchr", +] + [[package]] name = "once_cell" version = "1.19.0" @@ -3356,6 +3635,17 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "postcard" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a55c51ee6c0db07e68448e336cf8ea4131a620edefebf9893e759b2d793420f8" +dependencies = [ + "cobs", + "embedded-io", + "serde", +] + [[package]] name = "powerfmt" version = "0.2.0" @@ -3386,11 +3676,10 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "2.0.2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24" +checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8" dependencies = [ - "toml_datetime", "toml_edit 0.20.2", ] @@ -3433,6 +3722,15 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "psm" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" +dependencies = [ + "cc", +] + [[package]] name = "qrcode" version = "0.12.0" @@ -3630,6 +3928,19 @@ dependencies = [ "thiserror", ] +[[package]] +name = "regalloc2" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad156d539c879b7a24a363a2016d77961786e71f48f2e2fc8302a92abd2429a6" +dependencies = [ + "hashbrown 0.13.2", + "log", + "rustc-hash", + "slice-group-by", + "smallvec 1.13.2", +] + [[package]] name = "regex" version = "1.10.4" @@ -3767,12 +4078,25 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "efe2374f2385cdd8755a446f80b2a646de603c9d8539ca38734879b5c71e378b" +[[package]] +name = "rust_decoder" +version = "0.1.0" +dependencies = [ + "wit-bindgen-rt", +] + [[package]] name = "rustc-demangle" version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + [[package]] name = "rustc_version" version = "0.4.0" @@ -4014,9 +4338,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.5" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" +checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0" dependencies = [ "serde", ] @@ -4166,6 +4490,12 @@ dependencies = [ "autocfg", ] +[[package]] +name = "slice-group-by" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" + [[package]] name = "smallvec" version = "0.6.14" @@ -4180,6 +4510,9 @@ name = "smallvec" version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +dependencies = [ + "serde", +] [[package]] name = "socket2" @@ -4245,6 +4578,12 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +[[package]] +name = "sptr" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b9b39299b249ad65f3b7e96443bad61c02ca5cd3589f46cb6d610a0fd6c0d6a" + [[package]] name = "stable_deref_trait" version = "1.2.0" @@ -4378,7 +4717,7 @@ dependencies = [ "cfg-expr", "heck 0.5.0", "pkg-config", - "toml 0.8.2", + "toml 0.8.14", "version-compare", ] @@ -4505,7 +4844,7 @@ dependencies = [ "serde_json", "tauri-utils", "tauri-winres", - "toml 0.8.2", + "toml 0.8.14", "walkdir", ] @@ -4563,7 +4902,7 @@ dependencies = [ "serde", "serde_json", "tauri-utils", - "toml 0.8.2", + "toml 0.8.14", "walkdir", ] @@ -4690,7 +5029,7 @@ dependencies = [ "serde_with", "swift-rs", "thiserror", - "toml 0.8.2", + "toml 0.8.14", "url", "urlpattern", "walkdir", @@ -4899,21 +5238,21 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.2" +version = "0.8.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" +checksum = "6f49eb2ab21d2f26bd6db7bf383edc527a7ebaee412d17af4d40fdccd442f335" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.20.2", + "toml_edit 0.22.14", ] [[package]] name = "toml_datetime" -version = "0.6.3" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" dependencies = [ "serde", ] @@ -4928,7 +5267,7 @@ dependencies = [ "serde", "serde_spanned", "toml_datetime", - "winnow", + "winnow 0.5.40", ] [[package]] @@ -4936,12 +5275,23 @@ name = "toml_edit" version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" +dependencies = [ + "indexmap 2.2.6", + "toml_datetime", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.22.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f21c7aaf97f1bd9ca9d4f9e73b0a6c74bd5afef56f2bc931943a6e1c37e04e38" dependencies = [ "indexmap 2.2.6", "serde", "serde_spanned", "toml_datetime", - "winnow", + "winnow 0.6.13", ] [[package]] @@ -5175,6 +5525,18 @@ version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" +[[package]] +name = "unicode-width" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" + +[[package]] +name = "unicode-xid" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" + [[package]] name = "untrusted" version = "0.9.0" @@ -5389,6 +5751,24 @@ dependencies = [ "syn 2.0.61", ] +[[package]] +name = "wasm-encoder" +version = "0.209.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b4a05336882dae732ce6bd48b7e11fe597293cb72c13da4f35d7d5f8d53b2a7" +dependencies = [ + "leb128", +] + +[[package]] +name = "wasm-encoder" +version = "0.211.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e7d931a1120ef357f32b74547646b6fa68ea25e377772b72874b131a9ed70d4" +dependencies = [ + "leb128", +] + [[package]] name = "wasm-streams" version = "0.4.0" @@ -5402,6 +5782,305 @@ dependencies = [ "web-sys", ] +[[package]] +name = "wasmparser" +version = "0.209.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07035cc9a9b41e62d3bb3a3815a66ab87c993c06fe1cf6b2a3f2a18499d937db" +dependencies = [ + "ahash", + "bitflags 2.5.0", + "hashbrown 0.14.5", + "indexmap 2.2.6", + "semver", + "serde", +] + +[[package]] +name = "wasmprinter" +version = "0.209.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ceca8ae6eaa8c7c87b33c25c53bdf299f8c2a764aee1179402ff7652ef3a6859" +dependencies = [ + "anyhow", + "wasmparser", +] + +[[package]] +name = "wasmtime" +version = "22.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "786d8b5e7a4d54917c5ebe555b9667337e5f93383f49bddaaeec2eba68093b45" +dependencies = [ + "addr2line", + "anyhow", + "async-trait", + "bumpalo", + "cc", + "cfg-if", + "encoding_rs", + "fxprof-processed-profile", + "gimli", + "hashbrown 0.14.5", + "indexmap 2.2.6", + "ittapi", + "libc", + "libm", + "log", + "mach2", + "memfd", + "memoffset", + "object 0.36.0", + "once_cell", + "paste", + "postcard", + "psm", + "rayon", + "rustix", + "semver", + "serde", + "serde_derive", + "serde_json", + "smallvec 1.13.2", + "sptr", + "target-lexicon", + "wasm-encoder 0.209.1", + "wasmparser", + "wasmtime-asm-macros", + "wasmtime-cache", + "wasmtime-component-macro", + "wasmtime-component-util", + "wasmtime-cranelift", + "wasmtime-environ", + "wasmtime-fiber", + "wasmtime-jit-debug", + "wasmtime-jit-icache-coherence", + "wasmtime-slab", + "wasmtime-versioned-export-macros", + "wasmtime-winch", + "wat", + "windows-sys 0.52.0", +] + +[[package]] +name = "wasmtime-asm-macros" +version = "22.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d697d99c341d4a9ffb72f3af7a02124d233eeb59aee010f36d88e97cca553d5e" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "wasmtime-cache" +version = "22.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "916610f9ae9a6c22deb25bba2e6247ba9f00b093d30620875203b91328a1adfa" +dependencies = [ + "anyhow", + "base64 0.21.7", + "directories-next", + "log", + "postcard", + "rustix", + "serde", + "serde_derive", + "sha2", + "toml 0.8.14", + "windows-sys 0.52.0", + "zstd", +] + +[[package]] +name = "wasmtime-component-macro" +version = "22.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b29b462b068e73b5b27fae092a27f47e5937cabf6b26be2779c978698a52feca" +dependencies = [ + "anyhow", + "proc-macro2", + "quote", + "syn 2.0.61", + "wasmtime-component-util", + "wasmtime-wit-bindgen", + "wit-parser", +] + +[[package]] +name = "wasmtime-component-util" +version = "22.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d2912c53d9054984b380dfbd7579f9c3681b2a73b903a56bd71a1c4f175f1e" + +[[package]] +name = "wasmtime-cranelift" +version = "22.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3975deafea000457ba84355c7c0fce0372937204f77026510b7b454f28a3a65" +dependencies = [ + "anyhow", + "cfg-if", + "cranelift-codegen", + "cranelift-control", + "cranelift-entity", + "cranelift-frontend", + "cranelift-native", + "cranelift-wasm", + "gimli", + "log", + "object 0.36.0", + "target-lexicon", + "thiserror", + "wasmparser", + "wasmtime-environ", + "wasmtime-versioned-export-macros", +] + +[[package]] +name = "wasmtime-environ" +version = "22.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f444e900e848b884d8a8a2949b6f5b92af642a3e663ff8fbe78731143a55be61" +dependencies = [ + "anyhow", + "cpp_demangle", + "cranelift-entity", + "gimli", + "indexmap 2.2.6", + "log", + "object 0.36.0", + "postcard", + "rustc-demangle", + "serde", + "serde_derive", + "target-lexicon", + "wasm-encoder 0.209.1", + "wasmparser", + "wasmprinter", + "wasmtime-component-util", + "wasmtime-types", +] + +[[package]] +name = "wasmtime-fiber" +version = "22.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ded58eb2d1bf0dcd2182d0ccd7055c4b10b50d711514f1d73f61515d0fa829d" +dependencies = [ + "anyhow", + "cc", + "cfg-if", + "rustix", + "wasmtime-asm-macros", + "wasmtime-versioned-export-macros", + "windows-sys 0.52.0", +] + +[[package]] +name = "wasmtime-jit-debug" +version = "22.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bc54198c6720f098210a85efb3ba8c078d1de4d373cdb6778850a66ae088d11" +dependencies = [ + "object 0.36.0", + "once_cell", + "rustix", + "wasmtime-versioned-export-macros", +] + +[[package]] +name = "wasmtime-jit-icache-coherence" +version = "22.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5afe2f0499542f9a4bcfa1b55bfdda803b6ade4e7c93c6b99e0f39dba44b0a91" +dependencies = [ + "anyhow", + "cfg-if", + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "wasmtime-slab" +version = "22.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a7de1f2bec5bbb35d532e61c85c049dc84ae671df60492f90b954ecf21169e7" + +[[package]] +name = "wasmtime-types" +version = "22.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "412463e9000e14cf6856be48628d2213c20c153e29ffc22b036980c892ea6964" +dependencies = [ + "cranelift-entity", + "serde", + "serde_derive", + "smallvec 1.13.2", + "wasmparser", +] + +[[package]] +name = "wasmtime-versioned-export-macros" +version = "22.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de5a9bc4f44ceeb168e9e8e3be4e0b4beb9095b468479663a9e24c667e36826f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.61", +] + +[[package]] +name = "wasmtime-winch" +version = "22.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed4db238a0241df2d15f79ad17b3a37a27f2ea6cb885894d81b42ae107544466" +dependencies = [ + "anyhow", + "cranelift-codegen", + "gimli", + "object 0.36.0", + "target-lexicon", + "wasmparser", + "wasmtime-cranelift", + "wasmtime-environ", + "winch-codegen", +] + +[[package]] +name = "wasmtime-wit-bindgen" +version = "22.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70dc077306b38288262e5ba01d4b21532a6987416cdc0aedf04bb06c22a68fdc" +dependencies = [ + "anyhow", + "heck 0.4.1", + "indexmap 2.2.6", + "wit-parser", +] + +[[package]] +name = "wast" +version = "211.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b25506dd82d00da6b14a87436b3d52b1d264083fa79cdb72a0d1b04a8595ccaa" +dependencies = [ + "bumpalo", + "leb128", + "memchr", + "unicode-width", + "wasm-encoder 0.211.1", +] + +[[package]] +name = "wat" +version = "1.211.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb716ca6c86eecac2d82541ffc39860118fc0af9309c4f2670637bea2e1bdd7d" +dependencies = [ + "wast", +] + [[package]] name = "wayland-sys" version = "0.31.1" @@ -5556,6 +6235,23 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "winch-codegen" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85c6915884e731b2db0d8cf08cb64474cb69221a161675fd3c135f91febc3daa" +dependencies = [ + "anyhow", + "cranelift-codegen", + "gimli", + "regalloc2", + "smallvec 1.13.2", + "target-lexicon", + "wasmparser", + "wasmtime-cranelift", + "wasmtime-environ", +] + [[package]] name = "window-vibrancy" version = "0.5.0" @@ -5863,6 +6559,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "winnow" +version = "0.6.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59b5e5f6c299a3c7890b876a2a587f3115162487e704907d9b6cd29473052ba1" +dependencies = [ + "memchr", +] + [[package]] name = "winreg" version = "0.52.0" @@ -5873,6 +6578,33 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "wit-bindgen-rt" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29c7526379ace8709ee9ab9f2bb50f112d95581063a59ef3097d9c10153886c9" +dependencies = [ + "bitflags 2.5.0", +] + +[[package]] +name = "wit-parser" +version = "0.209.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e79b9e3c0b6bb589dec46317e645851e0db2734c44e2be5e251b03ff4a51269" +dependencies = [ + "anyhow", + "id-arena", + "indexmap 2.2.6", + "log", + "semver", + "serde", + "serde_derive", + "serde_json", + "unicode-xid", + "wasmparser", +] + [[package]] name = "wry" version = "0.40.1" @@ -6065,6 +6797,34 @@ dependencies = [ "web-sys", ] +[[package]] +name = "zstd" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d789b1514203a1120ad2429eae43a7bd32b90976a7bb8a05f7ec02fa88cc23a" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "7.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cd99b45c6bc03a018c8b8a86025678c87e55526064e38f9df301989dce7ec0a" +dependencies = [ + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.11+zstd.1.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75652c55c0b6f3e6f12eb786fe1bc960396bf05a1eb3bf1f3691c3610ac2e6d4" +dependencies = [ + "cc", + "pkg-config", +] + [[package]] name = "zvariant" version = "4.0.0" diff --git a/Cargo.toml b/Cargo.toml index 5ab2fb1..18893b8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,7 @@ members = [ "frontend", "backend", "shared", - "src-tauri", + "src-tauri", "test_files/components/rust_decoder", ] resolver = "2" diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 490242c..a57ae18 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -23,3 +23,4 @@ serde = { version = "1.0", features = ["derive"] } tauri = { version = "=2.0.0-beta.22", features = ["macos-private-api", "linux-ipc-protocol"] } tauri-plugin-window-state = "=2.0.0-beta.9" tauri-plugin-dialog = "=2.0.0-beta.9" +wasmtime = "22.0.0" diff --git a/test_files/components/rust_decoder/Cargo.toml b/test_files/components/rust_decoder/Cargo.toml new file mode 100644 index 0000000..dde94b3 --- /dev/null +++ b/test_files/components/rust_decoder/Cargo.toml @@ -0,0 +1,26 @@ +[package] +name = "rust_decoder" +version.workspace = true +edition.workspace = true +repository.workspace = true +authors.workspace = true +readme.workspace = true +publish.workspace = true + +[dependencies] +wit-bindgen-rt = { version = "0.26.0", features = ["bitflags"] } + +[lib] +crate-type = ["cdylib"] + +[profile.release] +codegen-units = 1 +opt-level = "s" +debug = false +strip = true +lto = true + +[package.metadata.component] +package = "component:rust-decoder" + +[package.metadata.component.dependencies] diff --git a/test_files/components/rust_decoder/README.md b/test_files/components/rust_decoder/README.md new file mode 100644 index 0000000..dca09a8 --- /dev/null +++ b/test_files/components/rust_decoder/README.md @@ -0,0 +1,7 @@ +How to create and build the Rust component: + +1. `cargo install cargo-component` +2. `cargo component new rust_decoder --lib` +3. `cd rust_decoder` +4. Update code as needed +5. `cargo +nightly component build --release --artifact-dir . -Z unstable-options` diff --git a/test_files/components/rust_decoder/rust_decoder.wasm b/test_files/components/rust_decoder/rust_decoder.wasm new file mode 100644 index 0000000000000000000000000000000000000000..fdcfc801e9ad862914a31fb0d20b8e9ec2b2d9b2 GIT binary patch literal 47315 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 literal 0 HcmV?d00001 diff --git a/test_files/components/rust_decoder/src/bindings.rs b/test_files/components/rust_decoder/src/bindings.rs new file mode 100644 index 0000000..3de2b72 --- /dev/null +++ b/test_files/components/rust_decoder/src/bindings.rs @@ -0,0 +1,220 @@ +// Generated by `wit-bindgen` 0.25.0. DO NOT EDIT! +// Options used: +#[allow(dead_code)] +pub mod component { + #[allow(dead_code)] + pub mod rust_decoder { + #[allow(dead_code, clippy::all)] + pub mod host { + #[used] + #[doc(hidden)] + #[cfg(target_arch = "wasm32")] + static __FORCE_SECTION_REF: fn() = + super::super::super::__link_custom_section_describing_imports; + #[allow(unused_unsafe, clippy::all)] + pub fn log(message: &str) { + unsafe { + let vec0 = message; + let ptr0 = vec0.as_ptr().cast::(); + let len0 = vec0.len(); + + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "component:rust-decoder/host")] + extern "C" { + #[link_name = "log"] + fn wit_import(_: *mut u8, _: usize); + } + + #[cfg(not(target_arch = "wasm32"))] + fn wit_import(_: *mut u8, _: usize) { + unreachable!() + } + wit_import(ptr0.cast_mut(), len0); + } + } + } + } +} +#[allow(dead_code)] +pub mod exports { + #[allow(dead_code)] + pub mod component { + #[allow(dead_code)] + pub mod rust_decoder { + #[allow(dead_code, clippy::all)] + pub mod decoder { + #[used] + #[doc(hidden)] + #[cfg(target_arch = "wasm32")] + static __FORCE_SECTION_REF: fn() = + super::super::super::super::__link_custom_section_describing_imports; + use super::super::super::super::_rt; + #[doc(hidden)] + #[allow(non_snake_case)] + pub unsafe fn _export_init_cabi() { + #[cfg(target_arch = "wasm32")] + _rt::run_ctors_once(); + T::init(); + } + #[doc(hidden)] + #[allow(non_snake_case)] + pub unsafe fn _export_name_cabi() -> *mut u8 { + #[cfg(target_arch = "wasm32")] + _rt::run_ctors_once(); + let result0 = T::name(); + let ptr1 = _RET_AREA.0.as_mut_ptr().cast::(); + let vec2 = (result0.into_bytes()).into_boxed_slice(); + let ptr2 = vec2.as_ptr().cast::(); + let len2 = vec2.len(); + ::core::mem::forget(vec2); + *ptr1.add(4).cast::() = len2; + *ptr1.add(0).cast::<*mut u8>() = ptr2.cast_mut(); + ptr1 + } + #[doc(hidden)] + #[allow(non_snake_case)] + pub unsafe fn __post_return_name(arg0: *mut u8) { + let l0 = *arg0.add(0).cast::<*mut u8>(); + let l1 = *arg0.add(4).cast::(); + _rt::cabi_dealloc(l0, l1, 1); + } + #[doc(hidden)] + #[allow(non_snake_case)] + pub unsafe fn _export_format_signal_value_cabi( + arg0: *mut u8, + arg1: usize, + ) -> *mut u8 { + #[cfg(target_arch = "wasm32")] + _rt::run_ctors_once(); + let len0 = arg1; + let bytes0 = _rt::Vec::from_raw_parts(arg0.cast(), len0, len0); + let result1 = T::format_signal_value(_rt::string_lift(bytes0)); + let ptr2 = _RET_AREA.0.as_mut_ptr().cast::(); + let vec3 = (result1.into_bytes()).into_boxed_slice(); + let ptr3 = vec3.as_ptr().cast::(); + let len3 = vec3.len(); + ::core::mem::forget(vec3); + *ptr2.add(4).cast::() = len3; + *ptr2.add(0).cast::<*mut u8>() = ptr3.cast_mut(); + ptr2 + } + #[doc(hidden)] + #[allow(non_snake_case)] + pub unsafe fn __post_return_format_signal_value(arg0: *mut u8) { + let l0 = *arg0.add(0).cast::<*mut u8>(); + let l1 = *arg0.add(4).cast::(); + _rt::cabi_dealloc(l0, l1, 1); + } + pub trait Guest { + fn init(); + fn name() -> _rt::String; + fn format_signal_value(value: _rt::String) -> _rt::String; + } + #[doc(hidden)] + + macro_rules! __export_component_rust_decoder_decoder_cabi{ + ($ty:ident with_types_in $($path_to_types:tt)*) => (const _: () = { + + #[export_name = "component:rust-decoder/decoder#init"] + unsafe extern "C" fn export_init() { + $($path_to_types)*::_export_init_cabi::<$ty>() + } + #[export_name = "component:rust-decoder/decoder#name"] + unsafe extern "C" fn export_name() -> *mut u8 { + $($path_to_types)*::_export_name_cabi::<$ty>() + } + #[export_name = "cabi_post_component:rust-decoder/decoder#name"] + unsafe extern "C" fn _post_return_name(arg0: *mut u8,) { + $($path_to_types)*::__post_return_name::<$ty>(arg0) + } + #[export_name = "component:rust-decoder/decoder#format-signal-value"] + unsafe extern "C" fn export_format_signal_value(arg0: *mut u8,arg1: usize,) -> *mut u8 { + $($path_to_types)*::_export_format_signal_value_cabi::<$ty>(arg0, arg1) + } + #[export_name = "cabi_post_component:rust-decoder/decoder#format-signal-value"] + unsafe extern "C" fn _post_return_format_signal_value(arg0: *mut u8,) { + $($path_to_types)*::__post_return_format_signal_value::<$ty>(arg0) + } + };); + } + #[doc(hidden)] + pub(crate) use __export_component_rust_decoder_decoder_cabi; + #[repr(align(4))] + struct _RetArea([::core::mem::MaybeUninit; 8]); + static mut _RET_AREA: _RetArea = _RetArea([::core::mem::MaybeUninit::uninit(); 8]); + } + } + } +} +mod _rt { + + #[cfg(target_arch = "wasm32")] + pub fn run_ctors_once() { + wit_bindgen_rt::run_ctors_once(); + } + pub unsafe fn cabi_dealloc(ptr: *mut u8, size: usize, align: usize) { + if size == 0 { + return; + } + let layout = alloc::Layout::from_size_align_unchecked(size, align); + alloc::dealloc(ptr as *mut u8, layout); + } + pub use alloc_crate::string::String; + pub use alloc_crate::vec::Vec; + pub unsafe fn string_lift(bytes: Vec) -> String { + if cfg!(debug_assertions) { + String::from_utf8(bytes).unwrap() + } else { + String::from_utf8_unchecked(bytes) + } + } + pub use alloc_crate::alloc; + extern crate alloc as alloc_crate; +} + +/// Generates `#[no_mangle]` functions to export the specified type as the +/// root implementation of all generated traits. +/// +/// For more information see the documentation of `wit_bindgen::generate!`. +/// +/// ```rust +/// # macro_rules! export{ ($($t:tt)*) => (); } +/// # trait Guest {} +/// struct MyType; +/// +/// impl Guest for MyType { +/// // ... +/// } +/// +/// export!(MyType); +/// ``` +#[allow(unused_macros)] +#[doc(hidden)] + +macro_rules! __export_component_impl { + ($ty:ident) => (self::export!($ty with_types_in self);); + ($ty:ident with_types_in $($path_to_types_root:tt)*) => ( + $($path_to_types_root)*::exports::component::rust_decoder::decoder::__export_component_rust_decoder_decoder_cabi!($ty with_types_in $($path_to_types_root)*::exports::component::rust_decoder::decoder); + ) +} +#[doc(inline)] +pub(crate) use __export_component_impl as export; + +#[cfg(target_arch = "wasm32")] +#[link_section = "component-type:wit-bindgen:0.25.0:component:encoded world"] +#[doc(hidden)] +pub static __WIT_BINDGEN_COMPONENT_TYPE: [u8; 330] = *b"\ +\0asm\x0d\0\x01\0\0\x19\x16wit-component-encoding\x04\0\x07\xca\x01\x01A\x02\x01\ +A\x04\x01B\x02\x01@\x01\x07messages\x01\0\x04\0\x03log\x01\0\x03\x01\x1bcomponen\ +t:rust-decoder/host\x05\0\x01B\x06\x01@\0\x01\0\x04\0\x04init\x01\0\x01@\0\0s\x04\ +\0\x04name\x01\x01\x01@\x01\x05values\0s\x04\0\x13format-signal-value\x01\x02\x04\ +\x01\x1ecomponent:rust-decoder/decoder\x05\x01\x04\x01\x20component:rust-decoder\ +/component\x04\0\x0b\x0f\x01\0\x09component\x03\0\0\0G\x09producers\x01\x0cproce\ +ssed-by\x02\x0dwit-component\x070.208.1\x10wit-bindgen-rust\x060.25.0"; + +#[inline(never)] +#[doc(hidden)] +#[cfg(target_arch = "wasm32")] +pub fn __link_custom_section_describing_imports() { + wit_bindgen_rt::maybe_link_cabi_realloc(); +} diff --git a/test_files/components/rust_decoder/src/lib.rs b/test_files/components/rust_decoder/src/lib.rs new file mode 100644 index 0000000..16a5882 --- /dev/null +++ b/test_files/components/rust_decoder/src/lib.rs @@ -0,0 +1,30 @@ +#[allow(warnings)] +mod bindings; + +use bindings::component::rust_decoder::host; +use bindings::exports::component::rust_decoder::decoder; + +macro_rules! log { + ($($arg:tt)*) => (host::log(&format!($($arg)*))) +} + +static NAME: &str = "Rust Test Decoder"; + +struct Component; + +impl decoder::Guest for Component { + fn init() { + log!("'{NAME}' initialized") + } + + fn name() -> String { + NAME.to_string() + } + + fn format_signal_value(mut value: String) -> String { + value.push('!'); + value + } +} + +bindings::export!(Component with_types_in bindings); diff --git a/test_files/components/rust_decoder/wit/world.wit b/test_files/components/rust_decoder/wit/world.wit new file mode 100644 index 0000000..7beda12 --- /dev/null +++ b/test_files/components/rust_decoder/wit/world.wit @@ -0,0 +1,16 @@ +package component:rust-decoder; + +interface host { + log: func(message: string); +} + +interface decoder { + init: func(); + name: func() -> string; + format-signal-value: func(value: string) -> string; +} + +world component { + import host; + export decoder; +}