use std::ffi::OsString;
use server::ServerInfo;
/// A client request.
#[derive(Serialize, Deserialize, Debug)]
pub enum Request {
/// Zero the server's statistics.
ZeroStats,
/// Get server statistics.
GetStats,
/// Shut the server down gracefully.
Shutdown,
/// Execute a compile or fetch a cached compilation result.
Compile(Compile),
}
/// A server response.
#[derive(Serialize, Deserialize, Debug)]
pub enum Response {
/// Response for `Request::Compile`.
Compile(CompileResponse),
/// Response for `Request::GetStats`, containing server statistics.
Stats(ServerInfo),
/// Response for `Request::Shutdown`, containing server statistics.
ShuttingDown(ServerInfo),
/// Second response for `Request::Compile`, containing the results of the compilation.
CompileFinished(CompileFinished),
}
/// Possible responses from the server for a `Compile` request.
#[derive(Serialize, Deserialize, Debug)]
pub enum CompileResponse {
/// The compilation was started.
CompileStarted,
/// The server could not handle this compilation request.
UnhandledCompile,
}
/// Information about a finished compile, either from cache or executed locally.
#[derive(Serialize, Deserialize, Debug, Default)]
pub struct CompileFinished {
/// The return code of the compile process, if available.
pub retcode: Option<i32>,
/// The signal that terminated the compile process, if available.
pub signal: Option<i32>,
/// The compiler's stdout.
pub stdout: Vec<u8>,
/// The compiler's stderr.
pub stderr: Vec<u8>,
}
/// The contents of a compile request from a client.
#[derive(Serialize, Deserialize, Debug)]
pub struct Compile {
/// The full path to the compiler executable.
pub exe: OsString,
/// The current working directory in which to execute the compile.
pub cwd: OsString,
/// The commandline arguments passed to the compiler.
pub args: Vec<OsString>,
/// The environment variables present when the compiler was executed, as (var, val).
pub env_vars: Vec<(OsString, OsString)>,
}