1use serde::Deserialize;
6use serde::Serialize;
7
8#[derive(Serialize, Deserialize, Clone, Debug)]
9pub enum HostToGuestMessage {
10 RunCommand { command: String },
11 Exit,
12}
13
14#[derive(Serialize, Deserialize, Clone, Copy, Debug)]
15pub enum ExitStatus {
16 Code(i32),
17 Signal(i32),
18 None,
19}
20
21#[derive(Serialize, Deserialize, Clone, Debug)]
22pub struct ProgramExit {
23 pub stdout: String,
24 pub stderr: String,
25 pub exit_status: ExitStatus,
26}
27
28#[derive(Serialize, Deserialize, Clone, Debug)]
29pub enum GuestToHostMessage {
30 ProgramExit(ProgramExit),
31 Ready,
32}
33
34#[derive(Serialize, Deserialize, Clone, Debug)]
35pub enum DelegateMessage {
36 HostToGuest(HostToGuestMessage),
37 GuestToHost(GuestToHostMessage),
38}
39
40impl DelegateMessage {
41 pub fn assume_host_to_guest(self) -> HostToGuestMessage {
42 match self {
43 DelegateMessage::HostToGuest(msg) => msg,
44 _ => panic!("Expected HostToGuestMessage"),
45 }
46 }
47
48 #[allow(unused)]
49 pub fn assume_guest_to_host(self) -> GuestToHostMessage {
50 match self {
51 DelegateMessage::GuestToHost(msg) => msg,
52 _ => panic!("Expected GuestToHostMessage"),
53 }
54 }
55}