Skip to main content

openlark_workflow/v2/attachment/
mod.rs

1/// 删除接口。
2pub mod delete;
3/// 获取接口。
4pub mod get;
5/// 列表接口。
6pub mod list;
7/// 数据模型。
8pub mod models;
9/// 上传接口。
10pub mod upload;
11
12use openlark_core::config::Config;
13use std::sync::Arc;
14
15/// Attachment:附件资源
16#[derive(Clone)]
17pub struct Attachment {
18    config: Arc<Config>,
19    task_guid: String,
20}
21
22impl Attachment {
23    /// 创建新的实例。
24    pub fn new(config: Arc<Config>) -> Self {
25        Self {
26            config,
27            task_guid: String::new(),
28        }
29    }
30
31    /// 绑定任务上下文。
32    pub fn with_task(mut self, task_guid: impl Into<String>) -> Self {
33        self.task_guid = task_guid.into();
34        self
35    }
36
37    /// upload。
38    pub fn upload(&self, file_path: String) -> upload::UploadAttachmentRequest {
39        upload::UploadAttachmentRequest::new(self.config.clone(), self.task_guid.clone(), file_path)
40    }
41
42    /// 创建删除请求。
43    pub fn delete(&self, attachment_guid: impl Into<String>) -> delete::DeleteAttachmentRequest {
44        delete::DeleteAttachmentRequest::new(
45            self.config.clone(),
46            self.task_guid.clone(),
47            attachment_guid.into(),
48        )
49    }
50
51    /// 获取附件(不需要 task_guid)
52    pub fn get(&self, attachment_guid: impl Into<String>) -> get::GetAttachmentRequest {
53        get::GetAttachmentRequest::new(self.config.clone(), attachment_guid.into())
54    }
55
56    /// 列取附件(不需要 task_guid)
57    pub fn list(&self) -> list::ListAttachmentsRequest {
58        list::ListAttachmentsRequest::new(self.config.clone())
59    }
60}
61
62// 重新导出请求类型
63pub use delete::DeleteAttachmentRequest;
64pub use get::GetAttachmentRequest;
65pub use list::ListAttachmentsRequest;
66pub use upload::UploadAttachmentRequest;
67
68// 重新导出响应类型
69pub use get::{AttachmentInfo, GetAttachmentResponse};
70pub use list::{AttachmentListItem, ListAttachmentsResponse};
71pub use models::{DeleteAttachmentResponse, UploadAttachmentResponse};
72
73#[cfg(test)]
74#[allow(unused_imports)]
75mod tests {
76    use super::*;
77    use std::sync::Arc;
78
79    fn create_test_config() -> Arc<Config> {
80        Arc::new(
81            Config::builder()
82                .app_id("test_app")
83                .app_secret("test_secret")
84                .build(),
85        )
86    }
87
88    #[test]
89    fn test_attachment_new() {
90        let config = create_test_config();
91        let attachment = Attachment::new(config);
92        assert!(attachment.task_guid.is_empty());
93    }
94
95    #[test]
96    fn test_attachment_with_task() {
97        let config = create_test_config();
98        let attachment = Attachment::new(config).with_task("task_123");
99        assert_eq!(attachment.task_guid, "task_123");
100    }
101
102    #[test]
103    fn test_attachment_upload() {
104        let config = create_test_config();
105        let attachment = Attachment::new(config).with_task("task_123");
106        let _request = attachment.upload("/path/to/file.txt".to_string());
107    }
108
109    #[test]
110    fn test_attachment_delete() {
111        let config = create_test_config();
112        let attachment = Attachment::new(config).with_task("task_123");
113        let _request = attachment.delete("attachment_456");
114    }
115
116    #[test]
117    fn test_attachment_get() {
118        let config = create_test_config();
119        let attachment = Attachment::new(config);
120        let _request = attachment.get("attachment_456");
121    }
122
123    #[test]
124    fn test_attachment_list() {
125        let config = create_test_config();
126        let attachment = Attachment::new(config);
127        let _request = attachment.list();
128    }
129}