delegate/
wire_format.rs

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
5use 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}