use crate::core::{config::Config, req_option::RequestOption, SDKResult};
pub use create::{
create_subscription, CreateSubscriptionRequest, CreateSubscriptionResponse, SubscriptionConfig,
SubscriptionPriority,
};
pub use get::{
get_subscription, FileType, GetSubscriptionRequest, GetSubscriptionResponse,
SubscriptionDetail, SubscriptionStatus,
};
pub use patch::{patch_subscription, PatchSubscriptionRequest, PatchSubscriptionResponse};
pub mod create;
pub mod get;
pub mod patch;
pub struct SubscriptionService {
config: Config,
}
impl SubscriptionService {
pub fn new(config: Config) -> Self {
Self { config }
}
pub async fn get(
&self,
request: GetSubscriptionRequest,
option: Option<RequestOption>,
) -> SDKResult<GetSubscriptionResponse> {
let result = get_subscription(request, &self.config, option).await?;
result.data.ok_or_else(|| {
crate::core::error::LarkAPIError::IllegalParamError(
"Response data is missing".to_string(),
)
})
}
pub async fn create(
&self,
request: CreateSubscriptionRequest,
option: Option<RequestOption>,
) -> SDKResult<CreateSubscriptionResponse> {
let result = create_subscription(request, &self.config, option).await?;
result.data.ok_or_else(|| {
crate::core::error::LarkAPIError::IllegalParamError(
"Response data is missing".to_string(),
)
})
}
pub async fn patch(
&self,
request: PatchSubscriptionRequest,
option: Option<RequestOption>,
) -> SDKResult<PatchSubscriptionResponse> {
let result = patch_subscription(request, &self.config, option).await?;
result.data.ok_or_else(|| {
crate::core::error::LarkAPIError::IllegalParamError(
"Response data is missing".to_string(),
)
})
}
pub async fn quick_subscribe_doc(
&self,
file_token: impl ToString,
option: Option<RequestOption>,
) -> SDKResult<CreateSubscriptionResponse> {
let request = CreateSubscriptionRequest::builder()
.file_token(file_token)
.as_doc()
.basic_subscription()
.build();
self.create(request, option).await
}
pub async fn quick_subscribe_bitable(
&self,
file_token: impl ToString,
option: Option<RequestOption>,
) -> SDKResult<CreateSubscriptionResponse> {
let request = CreateSubscriptionRequest::builder()
.file_token(file_token)
.as_bitable()
.premium_subscription()
.build();
self.create(request, option).await
}
pub async fn quick_subscribe_sheet(
&self,
file_token: impl ToString,
option: Option<RequestOption>,
) -> SDKResult<CreateSubscriptionResponse> {
let request = CreateSubscriptionRequest::builder()
.file_token(file_token)
.as_sheet()
.basic_subscription()
.build();
self.create(request, option).await
}
pub async fn quick_subscribe_wiki(
&self,
file_token: impl ToString,
option: Option<RequestOption>,
) -> SDKResult<CreateSubscriptionResponse> {
let request = CreateSubscriptionRequest::builder()
.file_token(file_token)
.as_wiki()
.basic_subscription()
.build();
self.create(request, option).await
}
pub async fn activate(
&self,
file_token: impl ToString,
file_type: FileType,
option: Option<RequestOption>,
) -> SDKResult<PatchSubscriptionResponse> {
let request = PatchSubscriptionRequest::builder()
.file_token(file_token)
.file_type(file_type)
.activate()
.build();
self.patch(request, option).await
}
pub async fn pause(
&self,
file_token: impl ToString,
file_type: FileType,
option: Option<RequestOption>,
) -> SDKResult<PatchSubscriptionResponse> {
let request = PatchSubscriptionRequest::builder()
.file_token(file_token)
.file_type(file_type)
.pause()
.build();
self.patch(request, option).await
}
pub async fn cancel(
&self,
file_token: impl ToString,
file_type: FileType,
option: Option<RequestOption>,
) -> SDKResult<PatchSubscriptionResponse> {
let request = PatchSubscriptionRequest::builder()
.file_token(file_token)
.file_type(file_type)
.cancel()
.build();
self.patch(request, option).await
}
pub async fn quick_activate(
&self,
file_token: impl ToString,
file_type: FileType,
option: Option<RequestOption>,
) -> SDKResult<PatchSubscriptionResponse> {
let request = PatchSubscriptionRequest::builder()
.file_token(file_token)
.file_type(file_type)
.quick_activate()
.build();
self.patch(request, option).await
}
pub async fn eco_activate(
&self,
file_token: impl ToString,
file_type: FileType,
option: Option<RequestOption>,
) -> SDKResult<PatchSubscriptionResponse> {
let request = PatchSubscriptionRequest::builder()
.file_token(file_token)
.file_type(file_type)
.eco_activate()
.build();
self.patch(request, option).await
}
pub async fn safe_pause(
&self,
file_token: impl ToString,
file_type: FileType,
option: Option<RequestOption>,
) -> SDKResult<PatchSubscriptionResponse> {
let request = PatchSubscriptionRequest::builder()
.file_token(file_token)
.file_type(file_type)
.safe_pause()
.build();
self.patch(request, option).await
}
pub async fn is_subscribed(
&self,
file_token: impl ToString,
file_type: FileType,
option: Option<RequestOption>,
) -> SDKResult<bool> {
let request = GetSubscriptionRequest::builder()
.file_token(file_token)
.file_type(file_type)
.build();
let response = self.get(request, option).await?;
Ok(response.subscription.is_subscribed())
}
pub async fn batch_subscribe(
&self,
files: Vec<(String, FileType)>,
option: Option<RequestOption>,
) -> Vec<SDKResult<CreateSubscriptionResponse>> {
let mut results = Vec::new();
for (file_token, file_type) in files {
let request = CreateSubscriptionRequest::builder()
.file_token(file_token)
.file_type(file_type)
.basic_subscription()
.build();
let result = self.create(request, option.clone()).await;
results.push(result);
}
results
}
}