1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
use serde::{Deserialize, Serialize};
use std::path::{Path, PathBuf};
#[derive(Debug, Serialize, Deserialize)]
pub enum HandleFileCommand {
Download,
Upload,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct FileAgentRequest {
pub cmd: HandleFileCommand,
pub info: Vec<HandleFileInfo>,
pub fusion_base: PathBuf,
}
impl FileAgentRequest {
pub fn new<T: IntoIterator>(
cmd: HandleFileCommand,
info: T,
fusion_base: impl AsRef<Path>,
) -> Self
where
<T as IntoIterator>::Item: Into<HandleFileInfo>,
{
FileAgentRequest {
cmd,
info: info.into_iter().map(|x| x.into()).collect(),
fusion_base: fusion_base.as_ref().to_owned(),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HandleFileInfo {
pub local: PathBuf,
pub remote: url::Url,
}
impl HandleFileInfo {
pub fn new(local: impl AsRef<std::path::Path>, remote: &url::Url) -> Self {
HandleFileInfo {
local: local.as_ref().to_owned(),
remote: remote.to_owned(),
}
}
}
impl std::convert::From<&HandleFileInfo> for HandleFileInfo {
fn from(info: &HandleFileInfo) -> HandleFileInfo {
info.clone()
}
}