1mod agreement;
2mod author;
3mod copyright;
4mod description;
5mod icon;
6mod installation_notes;
7mod license;
8mod moniker;
9mod package_name;
10mod publisher;
11mod release_notes;
12mod short_description;
13mod tag;
14
15use std::collections::BTreeSet;
16
17use const_format::formatc;
18use serde::{Deserialize, Serialize};
19use serde_with::skip_serializing_none;
20use url::Url;
21
22pub use crate::locale::{
23 agreement::Agreement, author::Author, copyright::Copyright, description::Description,
24 icon::Icon, installation_notes::InstallationNotes, license::License, moniker::Moniker,
25 package_name::PackageName, publisher::Publisher, release_notes::ReleaseNotes,
26 short_description::ShortDescription, tag::Tag,
27};
28use crate::{
29 shared::{
30 LanguageTag, ManifestType, ManifestVersion, PackageIdentifier, PackageVersion,
31 url::{
32 CopyrightUrl, LicenseUrl, PackageUrl, PublisherSupportUrl, PublisherUrl,
33 ReleaseNotesUrl,
34 },
35 },
36 traits::Manifest,
37};
38
39#[skip_serializing_none]
40#[derive(Serialize, Deserialize, Default)]
41#[serde(rename_all = "PascalCase")]
42pub struct DefaultLocaleManifest {
43 pub package_identifier: PackageIdentifier,
44 pub package_version: PackageVersion,
45 pub package_locale: LanguageTag,
46 pub publisher: Publisher,
47 pub publisher_url: Option<PublisherUrl>,
48 pub publisher_support_url: Option<PublisherSupportUrl>,
49 pub privacy_url: Option<Url>,
50 pub author: Option<Author>,
51 pub package_name: PackageName,
52 pub package_url: Option<PackageUrl>,
53 pub license: License,
54 pub license_url: Option<LicenseUrl>,
55 pub copyright: Option<Copyright>,
56 pub copyright_url: Option<CopyrightUrl>,
57 pub short_description: ShortDescription,
58 pub description: Option<Description>,
59 pub moniker: Option<Moniker>,
60 pub tags: Option<BTreeSet<Tag>>,
61 pub agreements: Option<BTreeSet<Agreement>>,
62 pub release_notes: Option<ReleaseNotes>,
63 pub release_notes_url: Option<ReleaseNotesUrl>,
64 pub purchase_url: Option<Url>,
65 pub installation_notes: Option<InstallationNotes>,
66 pub documentations: Option<BTreeSet<Documentation>>,
67 pub icons: Option<BTreeSet<Icon>>,
68 pub manifest_type: ManifestType,
69 #[serde(default)]
70 pub manifest_version: ManifestVersion,
71}
72
73impl Manifest for DefaultLocaleManifest {
74 const SCHEMA: &'static str = formatc!(
75 "https://aka.ms/winget-manifest.defaultLocale.{}.schema.json",
76 ManifestVersion::DEFAULT
77 );
78 const TYPE: ManifestType = ManifestType::DefaultLocale;
79}
80
81#[skip_serializing_none]
82#[derive(Serialize, Deserialize, Ord, PartialOrd, Eq, PartialEq)]
83#[serde(rename_all = "PascalCase")]
84pub struct Documentation {
85 pub document_label: Option<String>,
86 pub document_url: Option<Url>,
87}
88
89#[skip_serializing_none]
90#[derive(Serialize, Deserialize)]
91#[serde(rename_all = "PascalCase")]
92pub struct LocaleManifest {
93 pub package_identifier: PackageIdentifier,
94 pub package_version: PackageVersion,
95 pub package_locale: LanguageTag,
96 pub publisher: Option<Publisher>,
97 pub publisher_url: Option<Url>,
98 pub publisher_support_url: Option<Url>,
99 pub privacy_url: Option<Url>,
100 pub author: Option<Author>,
101 pub package_name: Option<PackageName>,
102 pub package_url: Option<Url>,
103 pub license: Option<License>,
104 pub license_url: Option<Url>,
105 pub copyright: Option<Copyright>,
106 pub copyright_url: Option<Url>,
107 pub short_description: Option<ShortDescription>,
108 pub description: Option<Description>,
109 pub tags: Option<BTreeSet<Tag>>,
110 pub agreements: Option<BTreeSet<Agreement>>,
111 pub release_notes: Option<ReleaseNotes>,
112 pub release_notes_url: Option<ReleaseNotesUrl>,
113 pub purchase_url: Option<Url>,
114 pub installation_notes: Option<InstallationNotes>,
115 pub documentations: Option<BTreeSet<Documentation>>,
116 pub icons: Option<BTreeSet<Icon>>,
117 pub manifest_type: ManifestType,
118 #[serde(default)]
119 pub manifest_version: ManifestVersion,
120}
121
122impl Manifest for LocaleManifest {
123 const SCHEMA: &'static str = formatc!(
124 "https://aka.ms/winget-manifest.locale.{}.schema.json",
125 ManifestVersion::DEFAULT
126 );
127 const TYPE: ManifestType = ManifestType::Locale;
128}