use crate::interface::slack::slack_client::messages;
use slack_morphism::prelude::*;
use tokio_util::task::TaskTracker;
pub async fn execute_with_response<F, Fut>(
task_tracker: &TaskTracker,
http_client: reqwest::Client,
response_url: SlackResponseUrl,
operation: F,
) -> SlackCommandEventResponse
where
F: FnOnce() -> Fut + Send + 'static,
Fut: std::future::Future<Output = Result<String, String>> + Send + 'static,
{
task_tracker.spawn(async move {
let message = match operation().await {
Ok(msg) => msg,
Err(err) => err,
};
messages::send_ephemeral(&http_client, &response_url, message).await;
});
SlackCommandEventResponse::new(SlackMessageContent::new().with_text("⏳ 処理中...".to_string()))
}