wasmer_wasix/runners/wcgi/
create_env.rs1use 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}