use openlark_core::{
api::{ApiRequest, ApiResponseTrait},
config::Config,
http::Transport,
req_option::RequestOption,
SDKResult,
};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone)]
pub struct CountryRegionListBuilder {
config: Config,
page_size: Option<i32>,
page_token: Option<String>,
}
impl CountryRegionListBuilder {
pub fn new(config: Config) -> Self {
Self {
config,
page_size: None,
page_token: None,
}
}
pub fn page_size(mut self, page_size: i32) -> Self {
self.page_size = Some(page_size);
self
}
pub fn page_token(mut self, page_token: impl Into<String>) -> Self {
self.page_token = Some(page_token.into());
self
}
pub async fn execute(self) -> SDKResult<CountryRegionListResponse> {
self.execute_with_options(RequestOption::default()).await
}
pub async fn execute_with_options(
self,
option: RequestOption,
) -> SDKResult<CountryRegionListResponse> {
let mut url = "/open-apis/mdm/v3/country_regions".to_string();
let mut params = Vec::new();
if let Some(page_size) = self.page_size {
params.push(format!("page_size={}", page_size));
}
if let Some(ref page_token) = self.page_token {
params.push(format!("page_token={}", page_token));
}
if !params.is_empty() {
url.push('?');
url.push_str(¶ms.join("&"));
}
let req: ApiRequest<CountryRegionListResponse> = ApiRequest::get(&url);
let resp = Transport::request(req, &self.config, Some(option)).await?;
resp.data
.ok_or_else(|| openlark_core::error::validation_error("Operation", "响应数据为空"))
}
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct CountryRegionListResponse {
pub items: Vec<CountryRegion>,
#[serde(rename = "page_token")]
pub page_token: Option<String>,
#[serde(rename = "has_more")]
pub has_more: Option<bool>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct CountryRegion {
#[serde(rename = "mdm_code")]
pub mdm_code: String,
pub name: String,
#[serde(rename = "i18n_name")]
pub i18n_name: Option<CountryRegionI18nName>,
#[serde(rename = "phone_code")]
pub phone_code: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct CountryRegionI18nName {
#[serde(rename = "zh_cn")]
pub zh_cn: Option<String>,
#[serde(rename = "en_us")]
pub en_us: Option<String>,
#[serde(rename = "ja_jp")]
pub ja_jp: Option<String>,
}
impl ApiResponseTrait for CountryRegionListResponse {}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_builder_basic() {
let config = openlark_core::config::Config::builder()
.app_id("test_app")
.app_secret("test_secret")
.build();
let request = CountryRegionListBuilder::new(config.clone())
.page_size(1)
.page_token("test".to_string());
let _ = request;
}
}