use zerodds_idl::ast::types::{ComponentDcl, HomeDcl};
use crate::error::Result;
pub fn emit_component(out: &mut String, c: &ComponentDcl) -> Result<()> {
let name = match c {
ComponentDcl::Def(def) => &def.name.text,
ComponentDcl::Forward(_, _) => return Ok(()),
};
let repo_id = zerodds_corba_codegen::build_repository_id(&[], name, 1, 0);
let repo_const = name.to_ascii_uppercase();
out.push_str("/// Generated by `zerodds-corba-rust` from IDL component (CCM 4.0 §6).\n");
out.push_str(&format!(
"/// CORBA Repository-ID fuer Component `{name}`.\npub const {repo_const}_REPOSITORY_ID: &str = \"{repo_id}\";\n"
));
out.push_str(&format!(
"pub trait {name}: zerodds_corba_rust::ComponentServant {{\n"
));
out.push_str(" /// CCM-Lifecycle: wird vom Container nach Config-Phase aufgerufen.\n");
out.push_str(" fn configuration_complete(&mut self) -> ::core::result::Result<(), zerodds_corba_rust::CorbaException> {\n");
out.push_str(" ::core::result::Result::Ok(())\n");
out.push_str(" }\n");
out.push_str(" /// CCM-Lifecycle: wird vom Container vor Removal aufgerufen.\n");
out.push_str(" fn ccm_remove(&mut self) -> ::core::result::Result<(), zerodds_corba_rust::CorbaException> {\n");
out.push_str(" ::core::result::Result::Ok(())\n");
out.push_str(" }\n");
out.push_str("}\n");
Ok(())
}
pub fn emit_home(out: &mut String, h: &HomeDcl) -> Result<()> {
let name = match h {
HomeDcl::Def(def) => &def.name.text,
HomeDcl::Forward(_, _) => return Ok(()),
};
let repo_id = zerodds_corba_codegen::build_repository_id(&[], name, 1, 0);
let repo_const = name.to_ascii_uppercase();
out.push_str("/// Generated by `zerodds-corba-rust` from IDL home (CCM 4.0 §6.5).\n");
out.push_str(&format!(
"/// CORBA Repository-ID fuer Home `{name}`.\npub const {repo_const}_REPOSITORY_ID: &str = \"{repo_id}\";\n"
));
out.push_str(&format!(
"pub trait {name}: zerodds_corba_rust::ComponentHome {{\n"
));
out.push_str("}\n");
Ok(())
}