use serde::{Deserialize, Serialize};
use std::path::PathBuf;
#[derive(Debug, Clone)]
pub struct CompileResult {
pub so_path: PathBuf,
pub manifest: PackageManifest,
}
#[derive(Debug, Clone)]
pub struct CompileOptions {
pub target: Option<String>,
pub profile: String,
pub cargo_flags: Vec<String>,
pub jobs: Option<u32>,
}
impl Default for CompileOptions {
fn default() -> Self {
Self {
target: None,
profile: "debug".to_string(),
cargo_flags: Vec::new(),
jobs: None,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PackageManifest {
pub package: PackageInfo,
pub library: LibraryInfo,
pub tasks: Vec<TaskInfo>,
#[serde(skip_serializing_if = "Option::is_none")]
pub graph: Option<crate::WorkflowGraphData>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PackageInfo {
pub name: String,
pub version: String,
pub description: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub author: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub workflow_fingerprint: Option<String>,
pub cloacina_version: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LibraryInfo {
pub filename: String,
pub symbols: Vec<String>,
pub architecture: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TaskInfo {
pub index: u32,
pub id: String,
pub dependencies: Vec<String>,
pub description: String,
pub source_location: String,
}
#[derive(Debug, Clone, Deserialize)]
pub struct CargoToml {
pub package: Option<CargoPackage>,
pub lib: Option<CargoLib>,
pub dependencies: Option<toml::Value>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct CargoPackage {
pub name: String,
pub version: String,
pub description: Option<String>,
pub authors: Option<Vec<String>>,
pub keywords: Option<Vec<String>>,
#[serde(rename = "rust-version")]
pub rust_version: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct CargoLib {
#[serde(rename = "crate-type")]
pub crate_type: Option<Vec<String>>,
}
pub const MANIFEST_FILENAME: &str = "manifest.json";
pub const EXECUTE_TASK_SYMBOL: &str = "cloacina_execute_task";
pub const CLOACINA_VERSION: &str = env!("CARGO_PKG_VERSION");