winget_types/locale/
mod.rs

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}