wasi_net/backend/
process.rs

1use base64;
2use bincode;
3use serde::{Deserialize, Serialize};
4use std::{io, process::ExitStatus};
5
6use super::*;
7
8#[derive(Serialize, Deserialize, Debug)]
9pub enum MessageProcess {
10    Kill,
11    Exited(i32),
12    Stdin(Vec<u8>),
13    Stdout(Vec<u8>),
14    Stderr(Vec<u8>),
15}
16
17impl MessageProcess {
18    pub fn serialize(&self) -> io::Result<String> {
19        let ret = bincode::serialize(self).map_err(|err| {
20            io::Error::new(
21                io::ErrorKind::Other,
22                format!("failed to serialize into bincode bytes - {}", err),
23            )
24        })?;
25        Ok(base64::encode(&ret[..]))
26    }
27
28    pub fn deserialize(input: &str) -> io::Result<Self> {
29        let input = base64::decode(input.trim()).map_err(|err| {
30            io::Error::new(
31                io::ErrorKind::Other,
32                format!("failed to decode base64 string - {}", err),
33            )
34        })?;
35        Ok(bincode::deserialize(&input[..]).map_err(|err| {
36            io::Error::new(
37                io::ErrorKind::Other,
38                format!("failed to deserialize from bincode bytes - {}", err),
39            )
40        })?)
41    }
42}