modio/util/download/
action.rs1use crate::types::files::File;
2use crate::types::id::{FileId, GameId, ModId};
3use crate::types::mods::Mod;
4
5#[derive(Debug)]
6pub enum DownloadAction {
7 Primary { game_id: GameId, mod_id: ModId },
9 File {
11 game_id: GameId,
12 mod_id: ModId,
13 file_id: FileId,
14 },
15 FileObj(Box<File>),
17 Version {
19 game_id: GameId,
20 mod_id: ModId,
21 version: String,
22 policy: ResolvePolicy,
23 },
24}
25
26#[derive(Debug)]
28pub enum ResolvePolicy {
29 Latest,
31 Fail,
35}
36
37impl From<Mod> for DownloadAction {
39 fn from(m: Mod) -> DownloadAction {
40 if let Some(file) = m.modfile {
41 DownloadAction::from(file)
42 } else {
43 DownloadAction::Primary {
44 game_id: m.game_id,
45 mod_id: m.id,
46 }
47 }
48 }
49}
50
51impl From<File> for DownloadAction {
53 fn from(file: File) -> DownloadAction {
54 DownloadAction::FileObj(Box::new(file))
55 }
56}
57
58impl From<(GameId, ModId)> for DownloadAction {
60 fn from((game_id, mod_id): (GameId, ModId)) -> DownloadAction {
61 DownloadAction::Primary { game_id, mod_id }
62 }
63}
64
65impl From<(GameId, ModId, FileId)> for DownloadAction {
67 fn from((game_id, mod_id, file_id): (GameId, ModId, FileId)) -> DownloadAction {
68 DownloadAction::File {
69 game_id,
70 mod_id,
71 file_id,
72 }
73 }
74}
75
76impl From<(GameId, ModId, String)> for DownloadAction {
79 fn from((game_id, mod_id, version): (GameId, ModId, String)) -> DownloadAction {
80 DownloadAction::Version {
81 game_id,
82 mod_id,
83 version,
84 policy: ResolvePolicy::Latest,
85 }
86 }
87}
88
89impl<'a> From<(GameId, ModId, &'a str)> for DownloadAction {
92 fn from((game_id, mod_id, version): (GameId, ModId, &'a str)) -> DownloadAction {
93 DownloadAction::Version {
94 game_id,
95 mod_id,
96 version: version.to_string(),
97 policy: ResolvePolicy::Latest,
98 }
99 }
100}