use serde::{Deserialize, Serialize};
use std::collections::{BTreeMap, HashMap};
use std::path::PathBuf;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ActionKind {
CompileRlib,
CompileBin,
BuildScript,
Custom(String),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Action {
pub id: String,
pub kind: ActionKind,
pub description: String,
pub toolchain: ToolchainInfo,
pub inputs: Vec<PathBuf>,
pub outputs: Vec<PathBuf>,
pub args: Vec<String>,
pub env: HashMap<String, String>,
pub dependencies: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct ToolchainInfo {
pub name: String,
pub version: String,
pub target_triple: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ActionResult {
pub action_id: String,
pub exit_code: i32,
pub success: bool,
pub stdout: String,
pub stderr: String,
pub cached: bool,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct BuildPlan {
pub actions: Vec<Action>,
pub target_directory: PathBuf,
#[serde(default)]
pub artifacts: BTreeMap<String, PathBuf>,
#[serde(default)]
pub unit_cfgs: BTreeMap<String, Vec<String>>,
#[serde(default)]
pub unit_env: BTreeMap<String, HashMap<String, String>>,
#[serde(default)]
pub unit_link_args: BTreeMap<String, Vec<String>>,
#[serde(default)]
pub tracked_extra_files: BTreeMap<PathBuf, String>,
#[serde(default)]
pub tracked_env_vars: BTreeMap<String, Option<String>>,
#[serde(default)]
pub inputs_incomplete: bool,
}