use std::path::PathBuf;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use crate::{CommitSha, Diagnostic, PackageId, RegistryKey, TagName, Version};
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "lowercase")]
pub enum NpmAccess {
Public,
Restricted,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
pub struct PublishPlan {
pub schema_version: u32,
pub rust_crates: Vec<CratePublish>,
pub npm_platform_packages: Vec<NpmPublish>,
pub npm_main_packages: Vec<NpmMainPublish>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub pypi_packages: Vec<PypiPublish>,
pub releases: Vec<ReleaseEntry>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub diagnostics: Vec<Diagnostic>,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
pub struct CratePublish {
pub name: String,
pub version: Version,
pub publish_to: RegistryKey,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub registry: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub package_dir: Option<PathBuf>,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
pub struct NpmPublish {
pub name: String,
pub version: Version,
pub publish_to: RegistryKey,
pub package_dir: PathBuf,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub registry: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub tag: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub access: Option<NpmAccess>,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
pub struct NpmMainPublish {
pub name: String,
pub version: Version,
pub publish_to: RegistryKey,
pub package_dir: PathBuf,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub registry: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub tag: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub access: Option<NpmAccess>,
pub depends_on_platforms: Vec<String>,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
pub struct ReleaseEntry {
pub package: PackageId,
pub tag_name: TagName,
pub sha: CommitSha,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub changelog_section: Option<String>,
pub is_prerelease: bool,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
pub struct PypiPublish {
pub name: String,
pub version: Version,
pub publish_to: RegistryKey,
pub package_dir: PathBuf,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub index: Option<String>,
}