make wasmtime_wasi::Wasi a struct which does both snapshots!

This commit is contained in:
Pat Hickey
2021-01-29 13:23:04 -08:00
parent 11821e5bfd
commit 8b285ec2e7
2 changed files with 27 additions and 9 deletions

View File

@@ -1,7 +1,32 @@
use std::cell::RefCell;
use std::rc::Rc;
pub use wasi_common::{ pub use wasi_common::{
Error, FdFlags, FileCaps, Filestat, OFlags, ReaddirCursor, ReaddirEntity, SystemTimeSpec, Error, FdFlags, FileCaps, Filestat, OFlags, ReaddirCursor, ReaddirEntity, SystemTimeSpec,
WasiCtx, WasiCtxBuilder, WasiDir, WasiFile, WasiCtx, WasiCtxBuilder, WasiDir, WasiFile,
}; };
use wasmtime::{Linker, Store};
pub struct Wasi {
preview_1: snapshots::preview_1::Wasi,
preview_0: snapshots::preview_0::Wasi,
}
impl Wasi {
pub fn new(store: &Store, context: WasiCtx) -> Self {
let context = Rc::new(RefCell::new(context));
let preview_1 = snapshots::preview_1::Wasi::new(store, context.clone());
let preview_0 = snapshots::preview_0::Wasi::new(store, context);
Self {
preview_1,
preview_0,
}
}
pub fn add_to_linker(&self, linker: &mut Linker) -> Result<(), anyhow::Error> {
self.preview_1.add_to_linker(linker)?;
self.preview_0.add_to_linker(linker)?;
Ok(())
}
}
pub mod snapshots { pub mod snapshots {
pub mod preview_1 { pub mod preview_1 {

View File

@@ -13,8 +13,7 @@ use std::{
use structopt::{clap::AppSettings, StructOpt}; use structopt::{clap::AppSettings, StructOpt};
use wasi_cap_std_sync::WasiCtxBuilder; use wasi_cap_std_sync::WasiCtxBuilder;
use wasmtime::{Engine, Func, Linker, Module, Store, Trap, Val, ValType}; use wasmtime::{Engine, Func, Linker, Module, Store, Trap, Val, ValType};
use wasmtime_wasi::snapshots::preview_0::Wasi as WasiSnapshot0; use wasmtime_wasi::Wasi;
use wasmtime_wasi::snapshots::preview_1::Wasi as WasiSnapshot1;
#[cfg(feature = "wasi-nn")] #[cfg(feature = "wasi-nn")]
use wasmtime_wasi_nn::{WasiNn, WasiNnCtx}; use wasmtime_wasi_nn::{WasiNn, WasiNnCtx};
@@ -352,9 +351,6 @@ fn populate_with_wasi(
argv: &[String], argv: &[String],
vars: &[(String, String)], vars: &[(String, String)],
) -> Result<()> { ) -> Result<()> {
use std::cell::RefCell;
use std::rc::Rc;
// Add the current snapshot to the linker. // Add the current snapshot to the linker.
let mut builder = WasiCtxBuilder::new(); let mut builder = WasiCtxBuilder::new();
builder = builder.inherit_stdio().args(argv)?.envs(vars)?; builder = builder.inherit_stdio().args(argv)?.envs(vars)?;
@@ -363,10 +359,7 @@ fn populate_with_wasi(
builder = builder.preopened_dir(dir, name)?; builder = builder.preopened_dir(dir, name)?;
} }
let cx = Rc::new(RefCell::new(builder.build()?)); Wasi::new(linker.store(), builder.build()?).add_to_linker(linker)?;
WasiSnapshot1::new(linker.store(), cx.clone()).add_to_linker(linker)?;
WasiSnapshot0::new(linker.store(), cx).add_to_linker(linker)?;
#[cfg(feature = "wasi-nn")] #[cfg(feature = "wasi-nn")]
{ {