cyfs_lib/trans/
input_request.rs

1use super::output_request::*;
2use crate::{NDNInputRequestCommon, TransTaskControlAction, TransTaskInfo, TransTaskStatus};
3use cyfs_base::{*};
4use cyfs_core::TransContext;
5use cyfs_util::cache::FileDirRef;
6
7use serde::{Deserialize, Serialize};
8use std::path::PathBuf;
9use std::str::FromStr;
10
11pub struct TransGetContextInputRequest {
12    pub common: NDNInputRequestCommon,
13    pub context_id: Option<ObjectId>,
14    pub context_path: Option<String>,
15}
16
17pub type TransGetContextInputResponse = TransGetContextOutputResponse;
18
19pub struct TransUpdateContextInputRequest {
20    pub common: NDNInputRequestCommon,
21
22    pub context: TransContext,
23    pub access: Option<AccessString>,
24}
25
26#[derive(Debug)]
27pub struct TransCreateTaskInputRequest {
28    pub common: NDNInputRequestCommon,
29    pub object_id: ObjectId,
30    // 保存到的本地目录or文件
31    pub local_path: PathBuf,
32    pub device_list: Vec<DeviceId>,
33
34    pub group: Option<String>,
35    pub context: Option<String>,
36
37    pub auto_start: bool,
38}
39
40impl TransCreateTaskInputRequest {
41    pub fn check_valid(&self) -> BuckyResult<()> {
42        self.common.check_param_with_referer(&self.object_id)
43    }
44}
45
46// 控制传输一个任务的状态
47#[derive(Debug)]
48pub struct TransControlTaskInputRequest {
49    // 用以处理acl
50    pub common: NDNInputRequestCommon,
51    pub task_id: String,
52    pub action: TransTaskControlAction,
53}
54
55#[derive(Debug)]
56pub struct TransGetTaskStateInputRequest {
57    // 用以处理acl
58    pub common: NDNInputRequestCommon,
59    pub task_id: String,
60}
61
62pub type TransGetTaskStateInputResponse = TransGetTaskStateOutputResponse;
63
64// method how to deal with chunk position tracker record 
65#[derive(Debug, Clone, Copy)]
66pub enum TransPublishChunkMethod {
67    // track local postion 
68    Track, 
69    // copy to chunk cache path
70    Copy, 
71    // do nothing
72    None
73}
74
75impl Default for TransPublishChunkMethod {
76    fn default() -> Self {
77        Self::Track
78    }
79}
80
81impl TryFrom<u8> for TransPublishChunkMethod {
82    type Error = BuckyError;
83
84    fn try_from(v: u8) -> BuckyResult<Self> {
85        match v {
86            0 => Ok(Self::Track), 
87            1 => Ok(Self::Copy), 
88            2 => Ok(Self::None), 
89            _ => Err(BuckyError::new(BuckyErrorCode::InvalidInput, format!("invalid track chunk method {}", v)))
90        }
91    }
92}
93
94impl Into<u8> for TransPublishChunkMethod {
95    fn into(self) -> u8 {
96        match self {
97            Self::Track => 0, 
98            Self::Copy => 1, 
99            Self::None => 2
100        }
101    }
102}
103
104impl FromStr for TransPublishChunkMethod {
105    type Err = BuckyError;
106
107    fn from_str(str: &str) -> BuckyResult<Self> {
108        match str {
109            "Track" => Ok(Self::Track), 
110            "Copy" => Ok(Self::Copy), 
111            "None" => Ok(Self::None),
112            _ => Err(BuckyError::new(BuckyErrorCode::InvalidInput, format!("invalid chunk method {}", str)))
113        }
114    }
115}
116
117impl ProtobufTransform<TransPublishChunkMethod> for i32 {
118    fn transform(value: TransPublishChunkMethod) -> BuckyResult<Self> {
119        Ok(Into::<u8>::into(value) as i32)
120    }
121}
122
123impl ProtobufTransform<Option<i32>> for TransPublishChunkMethod {
124    fn transform(value: Option<i32>) -> BuckyResult<Self> {
125        value.map(|v|  Self::try_from(v as u8)).unwrap_or(Ok(Self::Track))
126    }
127}
128
129#[derive(Debug)]
130pub struct TransPublishFileInputRequest {
131    // 用以处理acl
132    pub common: NDNInputRequestCommon,
133    // 文件所属者
134    pub owner: ObjectId,
135
136    // 文件的本地路径
137    pub local_path: PathBuf,
138    // chunk大小
139    pub chunk_size: u32,
140    // how to deal with chunk position tracker record 
141    pub chunk_method: TransPublishChunkMethod, 
142
143    pub access: Option<AccessString>,
144    
145    pub file_id: Option<ObjectId>,
146    // 关联的dirs
147    pub dirs: Option<Vec<FileDirRef>>,
148}
149
150#[derive(Debug)]
151pub struct TransQueryTasksInputRequest {
152    pub common: NDNInputRequestCommon,
153    pub task_status: Option<TransTaskStatus>,
154    pub range: Option<(u64, u32)>,
155}
156
157#[derive(Debug, Serialize, Deserialize)]
158pub struct TransPublishFileInputResponse {
159    pub file_id: ObjectId,
160}
161
162#[derive(Debug, Serialize, Deserialize)]
163pub struct TransCreateTaskInputResponse {
164    pub task_id: String,
165}
166
167pub struct TransQueryTasksInputResponse {
168    pub task_list: Vec<TransTaskInfo>,
169}
170
171// get task group state
172#[derive(Debug)]
173pub struct TransGetTaskGroupStateInputRequest {
174    pub common: NDNInputRequestCommon,
175    pub group_type: TransTaskGroupType, 
176    pub group: String,
177    pub speed_when: Option<u64>,
178}
179
180pub type TransGetTaskGroupStateInputResponse = TransGetTaskGroupStateOutputResponse;
181
182// control task group
183#[derive(Debug)]
184pub struct TransControlTaskGroupInputRequest {
185    pub common: NDNInputRequestCommon,
186    pub group_type: TransTaskGroupType, 
187    pub group: String,
188    pub action: TransTaskGroupControlAction,
189}
190
191pub type TransControlTaskGroupInputResponse = TransControlTaskGroupOutputResponse;