xref: /aosp_15_r20/external/crosvm/e2e_tests/guest_under_test/rootfs/delegate/src/wire_format.rs (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
1 // Copyright 2023 The ChromiumOS Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 use serde::Deserialize;
6 use serde::Serialize;
7 
8 #[derive(Serialize, Deserialize, Clone, Debug)]
9 pub enum HostToGuestMessage {
10     RunCommand { command: String },
11     Exit,
12 }
13 
14 #[derive(Serialize, Deserialize, Clone, Copy, Debug)]
15 pub enum ExitStatus {
16     Code(i32),
17     Signal(i32),
18     None,
19 }
20 
21 #[derive(Serialize, Deserialize, Clone, Debug)]
22 pub struct ProgramExit {
23     pub stdout: String,
24     pub stderr: String,
25     pub exit_status: ExitStatus,
26 }
27 
28 #[derive(Serialize, Deserialize, Clone, Debug)]
29 pub enum GuestToHostMessage {
30     ProgramExit(ProgramExit),
31     Ready,
32 }
33 
34 #[derive(Serialize, Deserialize, Clone, Debug)]
35 pub enum DelegateMessage {
36     HostToGuest(HostToGuestMessage),
37     GuestToHost(GuestToHostMessage),
38 }
39 
40 impl DelegateMessage {
assume_host_to_guest(self) -> HostToGuestMessage41     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)]
assume_guest_to_host(self) -> GuestToHostMessage49     pub fn assume_guest_to_host(self) -> GuestToHostMessage {
50         match self {
51             DelegateMessage::GuestToHost(msg) => msg,
52             _ => panic!("Expected GuestToHostMessage"),
53         }
54     }
55 }
56