use openlark_core::{
api::{ApiRequest, ApiResponseTrait, ResponseFormat},
config::Config,
http::Transport,
req_option::RequestOption,
validate_required, SDKResult,
};
use crate::common::{api_endpoints::CcmSheetApiOld, api_utils::*};
#[derive(Debug, Clone)]
pub struct SpreadsheetApi {
config: Config,
}
impl SpreadsheetApi {
pub fn new(config: Config) -> Self {
Self { config }
}
pub fn config(&self) -> &Config {
&self.config
}
}
pub mod models;
pub use models::{
CreateSpreadsheetParams, CreateSpreadsheetResponse, CreateSpreadsheetResult,
GetSpreadsheetParams, GetSpreadsheetResponse, SpreadsheetInfo, SpreadsheetSheetInfo,
UpdateSpreadsheetParams, UpdateSpreadsheetResponse, UpdateSpreadsheetResult, UserInfo,
};
impl ApiResponseTrait for GetSpreadsheetResponse {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
impl ApiResponseTrait for CreateSpreadsheetResponse {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
impl ApiResponseTrait for UpdateSpreadsheetResponse {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
pub async fn get_spreadsheet(
config: &Config,
spreadsheet_token: &str,
params: GetSpreadsheetParams,
) -> SDKResult<GetSpreadsheetResponse> {
get_spreadsheet_with_options(config, spreadsheet_token, params, RequestOption::default()).await
}
pub async fn get_spreadsheet_with_options(
config: &Config,
spreadsheet_token: &str,
params: GetSpreadsheetParams,
option: RequestOption,
) -> SDKResult<GetSpreadsheetResponse> {
validate_required!(spreadsheet_token.trim(), "表格Token不能为空");
let api_endpoint = CcmSheetApiOld::GetSpreadsheet(spreadsheet_token.to_string());
let api_request: ApiRequest<GetSpreadsheetResponse> = ApiRequest::get(&api_endpoint.to_url())
.query_opt("include_sheet", params.include_sheet.map(|v| v.to_string()));
let response = Transport::request(api_request, config, Some(option)).await?;
extract_response_data(response, "获取表格信息")
}
pub async fn create_spreadsheet(
config: &Config,
params: CreateSpreadsheetParams,
) -> SDKResult<CreateSpreadsheetResponse> {
create_spreadsheet_with_options(config, params, RequestOption::default()).await
}
pub async fn create_spreadsheet_with_options(
config: &Config,
params: CreateSpreadsheetParams,
option: RequestOption,
) -> SDKResult<CreateSpreadsheetResponse> {
validate_required!(params.title.trim(), "表格标题不能为空");
let api_endpoint = CcmSheetApiOld::CreateSpreadsheet;
let api_request: ApiRequest<CreateSpreadsheetResponse> =
ApiRequest::post(&api_endpoint.to_url()).body(serialize_params(¶ms, "创建表格")?);
let response = Transport::request(api_request, config, Some(option)).await?;
extract_response_data(response, "创建表格")
}
pub async fn update_spreadsheet(
config: &Config,
spreadsheet_token: &str,
params: UpdateSpreadsheetParams,
) -> SDKResult<UpdateSpreadsheetResponse> {
update_spreadsheet_with_options(config, spreadsheet_token, params, RequestOption::default())
.await
}
pub async fn update_spreadsheet_with_options(
config: &Config,
spreadsheet_token: &str,
params: UpdateSpreadsheetParams,
option: RequestOption,
) -> SDKResult<UpdateSpreadsheetResponse> {
validate_required!(spreadsheet_token.trim(), "表格Token不能为空");
let api_endpoint = CcmSheetApiOld::UpdateSpreadsheet(spreadsheet_token.to_string());
let api_request: ApiRequest<UpdateSpreadsheetResponse> =
ApiRequest::post(&api_endpoint.to_url()).body(serialize_params(¶ms, "更新表格")?);
let response = Transport::request(api_request, config, Some(option)).await?;
extract_response_data(response, "更新表格")
}
#[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).unwrap();
assert_eq!(value["field"], "data");
}
}