Skip to main content

wasmtime_wasi/p2/host/
exit.rs

1use crate::I32Exit;
2use crate::cli::WasiCliCtxView;
3use crate::p2::bindings::cli::exit;
4
5impl exit::Host for WasiCliCtxView<'_> {
6    fn exit(&mut self, status: Result<(), ()>) -> wasmtime::Result<()> {
7        let status = match status {
8            Ok(()) => 0,
9            Err(()) => 1,
10        };
11        Err(wasmtime::format_err!(I32Exit(status)))
12    }
13
14    fn exit_with_code(&mut self, status_code: u8) -> wasmtime::Result<()> {
15        Err(wasmtime::format_err!(I32Exit(status_code.into())))
16    }
17}
18
19mod named {
20    use crate::cli::WasiCliNamedView;
21    use crate::p2::bindings::named_imports::wasi::cli::exit;
22    use crate::{NamedId, WasiCtxNamedView};
23
24    impl<T> exit::Host for WasiCtxNamedView<'_, T>
25    where
26        T: WasiCliNamedView,
27    {
28        fn exit(&mut self, id: NamedId, status: Result<(), ()>) -> wasmtime::Result<()> {
29            super::exit::Host::exit(&mut self.0.cli(id), status)
30        }
31
32        fn exit_with_code(&mut self, id: NamedId, status_code: u8) -> wasmtime::Result<()> {
33            super::exit::Host::exit_with_code(&mut self.0.cli(id), status_code)
34        }
35    }
36}