use serde::{Deserialize, Serialize};
use crate::model::ExtensionMap;
use crate::DPCS_SPEC_VERSION;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "jsonschema", derive(schemars::JsonSchema))]
pub struct PackageManifest {
pub id: String,
pub version: String,
pub dpcs_version: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(default)]
pub artifacts: Vec<PackageArtifactEntry>,
#[serde(default, flatten)]
#[cfg_attr(feature = "jsonschema", schemars(skip))]
pub extensions: ExtensionMap,
}
impl Default for PackageManifest {
fn default() -> Self {
Self {
id: String::new(),
version: "0.1.0".to_owned(),
dpcs_version: DPCS_SPEC_VERSION.to_owned(),
name: None,
description: None,
artifacts: Vec::new(),
extensions: ExtensionMap::default(),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "jsonschema", derive(schemars::JsonSchema))]
pub struct PackageArtifactEntry {
pub id: String,
#[serde(rename = "type")]
pub artifact_type: String,
pub version: String,
pub path: String,
#[serde(default, flatten)]
#[cfg_attr(feature = "jsonschema", schemars(skip))]
pub extensions: ExtensionMap,
}