use crate::common::{api_endpoints::DriveApi, api_utils::*};
use openlark_core::{
SDKResult,
api::{ApiRequest, ApiResponseTrait, ResponseFormat},
config::Config,
http::Transport,
validate_required,
};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize)]
pub struct DeleteFileRequest {
#[serde(skip)]
config: Config,
pub file_token: String,
#[serde(skip)]
pub r#type: String,
}
impl DeleteFileRequest {
pub fn new(config: Config, file_token: impl Into<String>, r#type: impl Into<String>) -> Self {
Self {
config,
file_token: file_token.into(),
r#type: r#type.into(),
}
}
pub async fn execute(self) -> SDKResult<DeleteFileResponse> {
self.execute_with_options(openlark_core::req_option::RequestOption::default())
.await
}
pub async fn execute_with_options(
self,
option: openlark_core::req_option::RequestOption,
) -> SDKResult<DeleteFileResponse> {
validate_required!(self.file_token.trim(), "file_token 不能为空");
validate_required!(self.r#type.trim(), "type 不能为空");
match self.r#type.as_str() {
"file" | "docx" | "bitable" | "folder" | "doc" | "sheet" | "mindnote" | "shortcut"
| "slides" => {}
_ => {
return Err(openlark_core::error::validation_error(
"type",
"type 仅支持 file/docx/bitable/folder/doc/sheet/mindnote/shortcut/slides",
));
}
}
let api_endpoint = DriveApi::DeleteFile(self.file_token);
let mut request = ApiRequest::<DeleteFileResponse>::delete(&api_endpoint.to_url());
request = request.query("type", self.r#type);
let response = Transport::request(request, &self.config, Some(option)).await?;
extract_response_data(response, "删除文件或文件夹")
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DeleteFileResponse {
pub task_id: Option<String>,
}
impl ApiResponseTrait for DeleteFileResponse {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_delete_file_request() {
let config = Config::default();
let request = DeleteFileRequest::new(config, "token_123", "file");
assert_eq!(request.file_token, "token_123");
assert_eq!(request.r#type, "file");
}
}