wasmer_wasix/runners/wcgi/
create_env.rs

1use virtual_fs::Pipe;
2
3use crate::{
4    WasiEnvBuilder, capabilities::Capabilities, http::HttpClientCapabilityV1,
5    runners::wcgi::callbacks::CreateEnvResult,
6};
7
8use super::{RecycleEnvConfig, callbacks::CreateEnvConfig};
9
10pub(crate) async fn default_recycle_env(mut conf: RecycleEnvConfig) {
11    tracing::debug!("Destroying the WebAssembly instance");
12
13    conf.env.disable_fs_cleanup = false;
14    conf.env.on_exit(None).await;
15}
16
17pub(crate) async fn default_create_env(conf: CreateEnvConfig) -> anyhow::Result<CreateEnvResult> {
18    tracing::debug!("Creating the WebAssembly instance");
19
20    let (req_body_sender, req_body_receiver) = Pipe::channel();
21    let (res_body_sender, res_body_receiver) = Pipe::channel();
22    let (stderr_sender, stderr_receiver) = Pipe::channel();
23
24    let mut builder = WasiEnvBuilder::new(&conf.program_name);
25
26    (conf.setup_builder)(&mut builder)?;
27
28    builder.add_envs(conf.env);
29
30    let builder = builder
31        .stdin(Box::new(req_body_receiver))
32        .stdout(Box::new(res_body_sender))
33        .stderr(Box::new(stderr_sender))
34        .capabilities(Capabilities {
35            insecure_allow_all: true,
36            http_client: HttpClientCapabilityV1::new_allow_all(),
37            threading: Default::default(),
38        });
39    let env = builder.build()?;
40
41    Ok(CreateEnvResult {
42        env,
43        memory: None,
44        body_sender: req_body_sender,
45        body_receiver: res_body_receiver,
46        stderr_receiver,
47    })
48}