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