From a79beede727a28ccdd26456e4e0cd17d7cd9c03f Mon Sep 17 00:00:00 2001 From: Ivan Enderlin Date: Mon, 2 Dec 2019 15:46:08 +0100 Subject: [PATCH] =?UTF-8?q?feat(wasi)=20Add=20the=20=E2=80=9Cvolatile?= =?UTF-8?q?=E2=80=9D=20`WasiVersion::Latest`=20version.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In addition to `Snapshot0` and `Snapshot1`, I believe it is an interesting API to provide the `Latest` version, so that the user can write: ```rust generate_import_object_for_version(WasiVersion::Latest, …); ``` This is a way to ensure that modules will run only if they come with the latest WASI version (in case of security issues for instance), by just updating the runtime. Note that it can be dangerous if not used carefully, but we assume the user knows what it does by sticking on a specific “floating” version. Also note that the `Latest` version is never returned by any API. It is provided only by the user. --- lib/wasi/src/lib.rs | 4 +++- lib/wasi/src/utils.rs | 9 ++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/lib/wasi/src/lib.rs b/lib/wasi/src/lib.rs index ca439bfdb..712bfa4c7 100644 --- a/lib/wasi/src/lib.rs +++ b/lib/wasi/src/lib.rs @@ -142,7 +142,9 @@ pub fn generate_import_object_for_version( WasiVersion::Snapshot0 => { generate_import_object_snapshot0(args, envs, preopened_files, mapped_dirs) } - WasiVersion::Snapshot1 => generate_import_object(args, envs, preopened_files, mapped_dirs), + WasiVersion::Snapshot1 | WasiVersion::Latest => { + generate_import_object(args, envs, preopened_files, mapped_dirs) + } } } diff --git a/lib/wasi/src/utils.rs b/lib/wasi/src/utils.rs index b19a40488..9774abe20 100644 --- a/lib/wasi/src/utils.rs +++ b/lib/wasi/src/utils.rs @@ -7,13 +7,16 @@ pub fn is_wasi_module(module: &Module) -> bool { get_wasi_version(module).is_some() } -/// The version of WASI. This is determined by the namespace string +/// The version of WASI. This is determined by the imports namespace +/// string. #[derive(Debug, Clone, Copy, PartialEq)] pub enum WasiVersion { - /// "wasi_unstable" + /// `wasi_unstable`. Snapshot0, - /// "wasi_snapshot_preview1" + /// `wasi_snapshot_preview1`. Snapshot1, + /// Latest version (for the moment, an alias to `Snapshot1`). + Latest, } /// Detect the version of WASI being used from the namespace