use crate::domain::app::InstallScope; use crate::domain::source::SourceKind; use crate::domain::update::{ParsedMetadataKind, UpdateChannelKind}; #[derive(Clone, Debug, Eq, PartialEq)] pub enum ShowResult { Installed(InstalledShow), Remote(RemoteShow), } #[derive(Clone, Debug, Eq, PartialEq)] pub struct InstalledShow { pub stable_id: String, pub display_name: String, pub installed_version: Option, pub source_input: Option, pub source: Option, pub install_scope: Option, pub tracked_paths: TrackedInstallPaths, pub update_strategy: Option, pub metadata: Vec, } #[derive(Clone, Debug, Eq, PartialEq)] pub struct RemoteShow { pub source: SourceSummary, pub artifact: RemoteArtifactSummary, pub interactions: Vec, pub warnings: Vec, } #[derive(Clone, Debug, Eq, PartialEq)] pub struct SourceSummary { pub kind: SourceKind, pub locator: String, pub canonical_locator: Option, } #[derive(Clone, Debug, Eq, PartialEq)] pub struct TrackedInstallPaths { pub payload_path: Option, pub desktop_entry_path: Option, pub icon_path: Option, } #[derive(Clone, Debug, Eq, PartialEq)] pub struct UpdateStrategySummary { pub preferred: UpdateChannelSummary, pub alternates: Vec, } #[derive(Clone, Debug, Eq, PartialEq)] pub struct UpdateChannelSummary { pub kind: UpdateChannelKind, pub locator: String, pub reason: String, } #[derive(Clone, Debug, Eq, PartialEq)] pub struct MetadataSummary { pub kind: ParsedMetadataKind, pub version: Option, pub primary_download: Option, pub checksum: Option, pub architecture: Option, pub channel_label: Option, pub warnings: Vec, } #[derive(Clone, Debug, Eq, PartialEq)] pub struct RemoteArtifactSummary { pub url: String, pub version: Option, pub arch: Option, pub trusted_checksum: Option, pub selection_reason: String, } #[derive(Clone, Debug, Eq, PartialEq)] pub enum RemoteInteractionSummary { ChooseTrackingPreference { requested_version: String, latest_version: String, }, SelectArtifact { candidate_count: usize, }, } #[derive(Clone, Debug, Eq, PartialEq)] pub enum ShowResultError { AmbiguousInstalledMatch { query: String, matches: Vec, }, UnsupportedQuery, NoInstallableArtifact { source: SourceSummary, }, AdapterResolutionFailed { adapter_id: String, kind: AdapterFailureKind, detail: Option, }, GitHubDiscoveryFailed { kind: GitHubDiscoveryFailureKind, detail: Option, }, NoInstallableCandidates, } #[derive(Clone, Debug, Eq, PartialEq)] pub enum AdapterFailureKind { UnsupportedQuery, UnsupportedSource, ResolutionFailed, } #[derive(Clone, Debug, Eq, PartialEq)] pub enum GitHubDiscoveryFailureKind { Unsupported, FixtureDocumentMissing, NoReleases, Transport, }