use super::request_agent;
use mbx_cache_core::{AgentRequest, AgentResponse};
pub(crate) fn note(message: &str) {
use std::io::Write as _;
let _ = writeln!(std::io::stderr(), "{message}");
}
static STDERR_RESERVED: std::sync::atomic::AtomicBool = std::sync::atomic::AtomicBool::new(false);
pub(crate) fn reserve_stderr_for_compiler() {
STDERR_RESERVED.store(true, std::sync::atomic::Ordering::Relaxed);
}
pub(crate) fn report_shim_warning(message: &str) {
let mut message = message.replace(['\n', '\r'], "; ");
if message.len() > 2048 {
let end = (0..=2048).rfind(|&index| message.is_char_boundary(index));
message.truncate(end.unwrap_or_default());
message.push_str("...");
}
let delivered = matches!(
request_agent(&[AgentRequest::RecordWarning {
message: message.clone(),
}])
.map(|responses| responses.into_iter().next()),
Ok(Some(AgentResponse::WarningRecorded))
);
if !delivered && !STDERR_RESERVED.load(std::sync::atomic::Ordering::Relaxed) {
note(&format!("mbx[warning]: {message}"));
}
}