use reqwest::Method;
use crate::{
core::{
api_resp::BaseResponse, constants::AccessTokenType, endpoints::EndpointBuilder,
http::Transport, req_option::RequestOption, standard_response::StandardResponse, SDKResult,
},
service::im::v1::message::{CreateMessageResp, Message},
};
use crate::service::im::v1::message::MessageService;
impl MessageService {
pub async fn create(
&self,
create_message_request: crate::service::im::v1::message::builders::CreateMessageRequest,
option: Option<RequestOption>,
) -> SDKResult<Message> {
let mut api_req = create_message_request.api_req;
api_req.http_method = Method::POST;
api_req.api_path = crate::core::endpoints::im::IM_V1_SEND_MESSAGE.to_string();
api_req.supported_access_token_types = vec![AccessTokenType::Tenant, AccessTokenType::User];
let api_resp: BaseResponse<CreateMessageResp> =
Transport::request(api_req, &self.config, option).await?;
api_resp.into_result().map(|resp| resp.data)
}
pub async fn delete(&self, message_id: &str, option: Option<RequestOption>) -> SDKResult<()> {
let api_req = crate::core::api_req::ApiRequest {
http_method: Method::DELETE,
api_path: EndpointBuilder::replace_param(
crate::core::endpoints::im::IM_V1_DELETE_MESSAGE,
"message_id",
message_id,
),
supported_access_token_types: vec![AccessTokenType::Tenant, AccessTokenType::User],
..Default::default()
};
let api_resp: BaseResponse<serde_json::Value> =
Transport::request(api_req, &self.config, option).await?;
api_resp.into_result().map(|_| ())
}
pub async fn update(
&self,
message_id: &str,
update_message_request: crate::service::im::v1::message::builders::UpdateMessageRequest,
option: Option<RequestOption>,
) -> SDKResult<Message> {
let mut api_req = update_message_request.api_req;
api_req.http_method = Method::PATCH;
api_req.api_path = EndpointBuilder::replace_param(
crate::core::endpoints::im::IM_V1_UPDATE_MESSAGE,
"message_id",
message_id,
);
api_req.supported_access_token_types = vec![AccessTokenType::Tenant, AccessTokenType::User];
let api_resp: BaseResponse<CreateMessageResp> =
Transport::request(api_req, &self.config, option).await?;
api_resp.into_result().map(|resp| resp.data)
}
pub async fn reply(
&self,
message_id: &str,
reply_message_request: crate::service::im::v1::message::builders::CreateMessageRequest,
option: Option<RequestOption>,
) -> SDKResult<Message> {
let mut api_req = reply_message_request.api_req;
api_req.http_method = Method::POST;
api_req.api_path = EndpointBuilder::replace_param(
crate::core::endpoints::im::IM_V1_REPLY_MESSAGE,
"message_id",
message_id,
);
api_req.supported_access_token_types = vec![AccessTokenType::Tenant, AccessTokenType::User];
let api_resp: BaseResponse<CreateMessageResp> =
Transport::request(api_req, &self.config, option).await?;
api_resp.into_result().map(|resp| resp.data)
}
}