use std::fmt::Write;
use zerodds_idl::ast::Annotation;
use zerodds_idl::semantics::annotations::{PlacementKind, lower_annotations};
use crate::error::CppGenError;
pub(crate) const CXX_LANG_ALIASES: &[&str] = &["c++", "cpp", "cxx"];
fn fmt_err(_e: std::fmt::Error) -> CppGenError {
CppGenError::Internal("string formatting failed".into())
}
pub(crate) fn emit_verbatim_at(
out: &mut String,
indent: &str,
anns: &[Annotation],
placement: PlacementKind,
) -> Result<(), CppGenError> {
let Ok(lowered) = lower_annotations(anns) else {
return Ok(());
};
for v in lowered.verbatims_for_language(CXX_LANG_ALIASES) {
if v.placement != placement {
continue;
}
for line in v.text.lines() {
writeln!(out, "{indent}{line}").map_err(fmt_err)?;
}
}
Ok(())
}