Skip to main content

Mountain/Environment/StatusBarProvider/
Tooltip.rs

1//! # StatusBarProvider - Tooltip Resolution
2//!
3//! Implementation of dynamic tooltip resolution for
4//! [`MountainEnvironment`]
5
6use std::sync::Arc;
7
8use CommonLibrary::{
9	Environment::Requires::Requires,
10	Error::CommonError::CommonError,
11	IPC::{DTO::ProxyTarget::ProxyTarget, IPCProvider::IPCProvider},
12};
13use serde_json::{Value, json};
14
15use super::super::MountainEnvironment::MountainEnvironment;
16use crate::dev_log;
17
18/// Tooltip resolution operations implementation for MountainEnvironment
19pub(super) async fn provide_tooltip_impl(
20	env:&MountainEnvironment,
21
22	entry_identifier:String,
23) -> Result<Option<Value>, CommonError> {
24	dev_log!(
25		"lifecycle",
26		"[StatusBarProvider] Providing dynamic tooltip for entry: {}",
27		entry_identifier
28	);
29
30	let ipc_provider:Arc<dyn IPCProvider> = env.Require();
31
32	// This is a "reverse" call, where the host needs data from the sidecar.
33	let rpc_method = format!("{}$ProvideStatusbarTooltip", ProxyTarget::ExtHostStatusBar.GetTargetPrefix());
34
35	let rpc_response = ipc_provider
36		.SendRequestToSideCar("cocoon-main".to_string(), rpc_method, json!([entry_identifier]), 5000)
37		.await?;
38
39	// If the response is null or fails to parse, we gracefully return None.
40	Ok(serde_json::from_value(rpc_response).unwrap_or(None))
41}