use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum PackageSystem {
Rpm,
Deb,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum PackageSource {
Installed,
Repo,
}
#[derive(Debug, Clone)]
pub struct CacheConfig {
pub ttl_secs: u64,
pub force_refresh: bool,
pub offline_mode: bool,
}
impl Default for CacheConfig {
fn default() -> Self {
Self {
ttl_secs: 86400,
force_refresh: false,
offline_mode: false,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct PkgMetadata {
pub name: String,
pub version: String,
pub release: String,
pub epoch: Option<String>,
pub arch: String,
pub summary: String,
pub description: String,
pub url: Option<String>,
pub license: Option<String>,
pub vendor: Option<String>,
pub packager: Option<String>,
pub source_pkg: Option<String>,
pub size: Option<u64>,
pub install_size: Option<u64>,
pub group: Option<String>,
pub priority: Option<String>,
pub build_time: Option<i64>,
pub location: Option<String>,
#[serde(default)]
pub source_repo: Option<String>,
pub requires: Vec<Dependency>,
pub recommends: Vec<Dependency>,
pub suggests: Vec<Dependency>,
pub provides: Vec<String>,
pub conflicts: Vec<Dependency>,
pub obsoletes: Vec<Dependency>,
pub replaces: Vec<Dependency>,
pub files: Vec<String>,
pub changelog: Vec<ChangelogEntry>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Dependency {
pub name: String,
pub version: Option<String>,
pub flags: Option<String>,
#[serde(default)]
pub is_alternative: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ChangelogEntry {
pub author: String,
pub timestamp: i64,
pub text: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BinaryPackageInfo {
pub name: String,
pub version: String,
pub arch: String,
pub installed: bool,
#[serde(default)]
pub source_repo: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SourcePackageInfo {
pub name: String,
pub version: String,
pub release: String,
pub url: Option<String>,
pub license: Option<String>,
pub maintainer: Option<String>,
pub binaries: Vec<BinaryPackageInfo>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct SearchResult {
pub pkg_name: String,
pub matched_text: String,
pub match_type: String,
pub source: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReverseDep {
pub pkg_name: String,
pub version: String,
#[serde(default)]
pub arch: Option<String>,
pub matched_deps: Vec<String>,
#[serde(default)]
pub source_repo: Option<String>,
}