use crate::common::{InitializePluginInput, InitializePluginOutput};
use crate::context::*;
use moon_common::Id;
use moon_config::{DockerPruneConfig, DockerScaffoldConfig, LanguageType};
use moon_project::ProjectFragment;
use schematic::Schema;
use std::path::PathBuf;
use warpgate_api::{VirtualPath, api_struct, api_unit_enum};
pub use proto_pdk_api::{
DetectVersionInput, DetectVersionOutput, ParseVersionFileInput, ParseVersionFileOutput,
};
pub type InitializeToolchainInput = InitializePluginInput;
pub type InitializeToolchainOutput = InitializePluginOutput;
api_struct!(
pub struct RegisterToolchainInput {
pub id: Id,
}
);
api_struct!(
#[serde(default)]
pub struct RegisterToolchainOutput {
#[serde(skip_serializing_if = "Vec::is_empty")]
pub config_file_globs: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub exe_names: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub language: Option<LanguageType>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub lock_file_names: Vec<String>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub manifest_file_names: Vec<String>,
pub name: String,
pub plugin_version: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub vendor_dir_name: Option<String>,
}
);
api_struct!(
pub struct DefineToolchainConfigOutput {
pub schema: Schema,
}
);
api_struct!(
pub struct DefineDockerMetadataInput {
pub context: MoonContext,
pub toolchain_config: serde_json::Value,
}
);
api_struct!(
#[serde(default)]
pub struct DefineDockerMetadataOutput {
#[serde(skip_serializing_if = "Option::is_none")]
pub default_image: Option<String>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub scaffold_globs: Vec<String>,
}
);
api_unit_enum!(
pub enum ScaffoldDockerPhase {
#[default]
Configs,
Sources,
}
);
api_struct!(
pub struct ScaffoldDockerInput {
pub context: MoonContext,
pub docker_config: DockerScaffoldConfig,
pub input_dir: VirtualPath,
pub output_dir: VirtualPath,
pub phase: ScaffoldDockerPhase,
pub project: Option<ProjectFragment>,
pub toolchain_config: serde_json::Value,
}
);
api_struct!(
#[serde(default)]
pub struct ScaffoldDockerOutput {
#[serde(skip_serializing_if = "Vec::is_empty")]
pub copied_files: Vec<PathBuf>,
}
);
api_struct!(
pub struct PruneDockerInput {
pub context: MoonContext,
pub docker_config: DockerPruneConfig,
pub projects: Vec<ProjectFragment>,
pub root: VirtualPath,
pub toolchain_config: serde_json::Value,
}
);
api_struct!(
#[serde(default)]
pub struct PruneDockerOutput {
#[serde(skip_serializing_if = "Vec::is_empty")]
pub changed_files: Vec<PathBuf>,
}
);