winbrew_models\catalog/
raw.rs

1//! Raw upstream catalog records before Winbrew validates and normalizes them.
2
3use serde::{Deserialize, Serialize};
4
5use crate::catalog::installer_type::CatalogInstallerType;
6use crate::shared::HashAlgorithm;
7
8/// Raw package payload exactly as it is received from the upstream feed.
9#[derive(Debug, Clone, Serialize, Deserialize)]
10pub struct RawCatalogPackage {
11    /// Raw catalog id string.
12    pub id: String,
13    /// Raw package name.
14    pub name: String,
15    /// Raw version string.
16    pub version: String,
17    /// Upstream source string.
18    pub source: String,
19    /// Optional namespace or bucket within the source.
20    #[serde(default, skip_serializing_if = "Option::is_none")]
21    pub namespace: Option<String>,
22    /// Source-local package identifier.
23    pub source_id: String,
24    /// Optional description text.
25    pub description: Option<String>,
26    /// Optional homepage URL.
27    pub homepage: Option<String>,
28    /// Optional license string.
29    pub license: Option<String>,
30    /// Optional publisher string.
31    pub publisher: Option<String>,
32    /// Optional package metadata locale.
33    #[serde(default, skip_serializing_if = "Option::is_none")]
34    pub locale: Option<String>,
35    /// Optional package moniker or alias.
36    #[serde(default, skip_serializing_if = "Option::is_none")]
37    pub moniker: Option<String>,
38    /// Optional package platform metadata encoded as JSON text.
39    #[serde(default, skip_serializing_if = "Option::is_none")]
40    pub platform: Option<String>,
41    /// Optional package commands encoded as JSON text.
42    #[serde(default, skip_serializing_if = "Option::is_none")]
43    pub commands: Option<String>,
44    /// Optional package protocols encoded as JSON text.
45    #[serde(default, skip_serializing_if = "Option::is_none")]
46    pub protocols: Option<String>,
47    /// Optional package file extensions encoded as JSON text.
48    #[serde(default, skip_serializing_if = "Option::is_none")]
49    pub file_extensions: Option<String>,
50    /// Optional package capabilities encoded as JSON text.
51    #[serde(default, skip_serializing_if = "Option::is_none")]
52    pub capabilities: Option<String>,
53    /// Optional package search tags encoded as JSON text.
54    #[serde(default, skip_serializing_if = "Option::is_none")]
55    pub tags: Option<String>,
56    /// Optional package bin metadata encoded as JSON text.
57    #[serde(default, skip_serializing_if = "Option::is_none")]
58    pub bin: Option<String>,
59    /// Optional package PATH add metadata encoded as JSON text.
60    #[serde(default, skip_serializing_if = "Option::is_none")]
61    pub env_add_path: Option<String>,
62}
63
64/// Raw installer payload exactly as it is received from the upstream feed.
65#[derive(Debug, Clone, Serialize, Deserialize)]
66pub struct RawCatalogInstaller {
67    /// Raw package id string.
68    pub package_id: String,
69    /// Raw installer URL.
70    pub url: String,
71    /// Raw checksum string.
72    pub hash: String,
73    /// Raw checksum algorithm.
74    pub hash_algorithm: HashAlgorithm,
75    /// Raw normalized installer family string.
76    pub installer_type: CatalogInstallerType,
77    /// Raw silent-install or package-manager switches.
78    #[serde(default, skip_serializing_if = "Option::is_none")]
79    pub installer_switches: Option<String>,
80    /// Raw platform metadata encoded as JSON text.
81    #[serde(default, skip_serializing_if = "Option::is_none")]
82    pub platform: Option<String>,
83    /// Raw commands encoded as JSON text.
84    #[serde(default, skip_serializing_if = "Option::is_none")]
85    pub commands: Option<String>,
86    /// Raw protocols encoded as JSON text.
87    #[serde(default, skip_serializing_if = "Option::is_none")]
88    pub protocols: Option<String>,
89    /// Raw file extensions encoded as JSON text.
90    #[serde(default, skip_serializing_if = "Option::is_none")]
91    pub file_extensions: Option<String>,
92    /// Raw capabilities encoded as JSON text.
93    #[serde(default, skip_serializing_if = "Option::is_none")]
94    pub capabilities: Option<String>,
95    /// Raw architecture string.
96    pub arch: String,
97    /// Raw installer kind string.
98    pub kind: String,
99    /// Raw nested installer kind string when the installer is archive-shaped.
100    #[serde(default, skip_serializing_if = "Option::is_none")]
101    pub nested_kind: Option<String>,
102    /// Raw install scope string when the source provides one.
103    #[serde(default, skip_serializing_if = "Option::is_none")]
104    pub scope: Option<String>,
105}