use openlark_core::api::{ApiResponseTrait, ResponseFormat};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct CheckMemberPermissionRequest {
pub file_token: String,
pub permission: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_id_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_id: Option<String>,
}
impl CheckMemberPermissionRequest {
pub fn validate(&self) -> openlark_core::SDKResult<()> {
use openlark_core::validate_required;
validate_required!(self.file_token, "文件token不能为空");
validate_required!(self.permission, "权限类型不能为空");
Ok(())
}
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
pub struct CheckMemberPermissionResponse {
#[serde(skip_serializing_if = "Option::is_none")]
pub permitted: Option<bool>,
}
impl ApiResponseTrait for CheckMemberPermissionResponse {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct TransferOwnerRequest {
pub file_token: String,
pub user_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_id_type: Option<String>,
}
impl TransferOwnerRequest {
pub fn validate(&self) -> openlark_core::SDKResult<()> {
use openlark_core::validate_required;
validate_required!(self.file_token, "文件token不能为空");
validate_required!(self.user_id, "用户ID不能为空");
Ok(())
}
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
pub struct TransferOwnerResponse {
#[serde(skip_serializing_if = "Option::is_none")]
pub success: Option<bool>,
}
impl ApiResponseTrait for TransferOwnerResponse {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct GetPublicPermissionRequest {
pub file_token: String,
}
impl GetPublicPermissionRequest {
pub fn validate(&self) -> openlark_core::SDKResult<()> {
use openlark_core::validate_required;
validate_required!(self.file_token, "文件token不能为空");
Ok(())
}
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
pub struct GetPublicPermissionResponse {
#[serde(skip_serializing_if = "Option::is_none")]
pub public_permission: Option<PublicPermission>,
}
impl ApiResponseTrait for GetPublicPermissionResponse {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
pub struct PublicPermission {
#[serde(skip_serializing_if = "Option::is_none")]
pub external_access_enabled: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub share_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub permission: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub password_protected: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub expire_time: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub allow_comment: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub allow_copy: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub allow_print: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
pub struct UserPermission {
#[serde(skip_serializing_if = "Option::is_none")]
pub user_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub permission: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub is_owner: Option<bool>,
}
#[cfg(test)]
mod tests {
use serde_json;
#[test]
fn test_serialization_roundtrip() {
let json = r#"{"test": "value"}"#;
assert!(serde_json::from_str::<serde_json::Value>(json).is_ok());
}
#[test]
fn test_deserialization_from_json() {
let json = r#"{"field": "data"}"#;
let value: serde_json::Value = serde_json::from_str(json).expect("JSON 反序列化失败");
assert_eq!(value["field"], "data");
}
}