use crate::clangd::config::DEFAULT_INDEX_WAIT_TIMEOUT_SECS;
use crate::project::ComponentSession;
use crate::project::index::IndexStatusView;
use std::time::Duration;
use tracing::info;
pub fn serialize_result(content: &serde_json::Value) -> String {
serde_json::to_string_pretty(content)
.unwrap_or_else(|e| format!("Error serializing result: {e}"))
}
pub async fn handle_selective_indexing_wait(
component_session: &ComponentSession,
skip_indexing_condition: bool,
wait_timeout: Option<u64>,
operation_type: &str,
) -> Option<IndexStatusView> {
if skip_indexing_condition {
info!("{} detected - skipping indexing wait", operation_type);
Some(component_session.get_index_status().await)
} else {
let wait_timeout_secs = wait_timeout.unwrap_or(DEFAULT_INDEX_WAIT_TIMEOUT_SECS);
if wait_timeout_secs == 0 {
info!("Zero timeout specified - skipping indexing wait");
Some(component_session.get_index_status().await)
} else {
info!(
"{} detected - waiting for indexing completion ({}s)",
operation_type, wait_timeout_secs
);
let timeout = Duration::from_secs(wait_timeout_secs);
match component_session.ensure_indexed(timeout).await {
Ok(()) => {
info!("Indexing completed successfully");
None }
Err(e) => {
info!("Indexing timeout or failure: {} - including status", e);
Some(component_session.get_index_status().await)
}
}
}
}
}