winget_types/version/
mod.rs

1use const_format::formatc;
2use serde::{Deserialize, Serialize};
3
4use crate::{
5    shared::{LanguageTag, ManifestType, ManifestVersion, PackageIdentifier, PackageVersion},
6    traits::Manifest,
7};
8
9#[derive(Serialize, Deserialize)]
10#[serde(rename_all = "PascalCase")]
11pub struct VersionManifest {
12    pub package_identifier: PackageIdentifier,
13    pub package_version: PackageVersion,
14    pub default_locale: LanguageTag,
15    pub manifest_type: ManifestType,
16    #[serde(default)]
17    pub manifest_version: ManifestVersion,
18}
19
20impl VersionManifest {
21    pub fn update(&mut self, package_version: &PackageVersion) {
22        self.package_version.clone_from(package_version);
23        self.manifest_type = ManifestType::Version;
24        self.manifest_version = ManifestVersion::default();
25    }
26}
27
28impl Manifest for VersionManifest {
29    const SCHEMA: &'static str = formatc!(
30        "https://aka.ms/winget-manifest.version.{}.schema.json",
31        ManifestVersion::DEFAULT
32    );
33
34    const TYPE: ManifestType = ManifestType::Version;
35}
36
37impl Default for VersionManifest {
38    fn default() -> Self {
39        Self {
40            package_identifier: PackageIdentifier::default(),
41            package_version: PackageVersion::default(),
42            default_locale: LanguageTag::default(),
43            manifest_type: ManifestType::Version,
44            manifest_version: ManifestVersion::default(),
45        }
46    }
47}