use anyhow::{Ok, Result};
use arora_behavior_tree_types::{
declare_status_enumeration, declare_tick_id_structure, STATUS_ENUMERATION_ID,
STATUS_ENUMERATION_VERSION, TICK_ID_STRUCTURE_ID, TICK_ID_STRUCTURE_VERSION,
};
use arora_module_rust::{
generate_common_sources, generate_enumeration_source, generate_mods_in_directories,
generate_structure_source, rustfmt::apply_rustfmt,
};
use arora_registry::{
local::{LocalRegistry, ROOT_ID},
EditableRegistry,
};
use std::path::PathBuf;
#[tokio::main]
pub async fn main() -> Result<()> {
let mut registry = LocalRegistry::new();
let mut generated_sources = generate_common_sources()?;
let status = registry
.tag_enumeration(
STATUS_ENUMERATION_ID.to_owned(),
STATUS_ENUMERATION_VERSION.to_owned(),
declare_status_enumeration(ROOT_ID),
)
.await?;
generated_sources =
generate_enumeration_source(&STATUS_ENUMERATION_ID, &status, "behavior_tree")?
.merge_with(&generated_sources);
let tick_id = registry
.tag_structure(
TICK_ID_STRUCTURE_ID.to_owned(),
TICK_ID_STRUCTURE_VERSION.to_owned(),
declare_tick_id_structure(ROOT_ID),
)
.await?;
generated_sources = generate_structure_source(
&TICK_ID_STRUCTURE_ID,
&tick_id,
&mut registry,
"behavior_tree",
)
.await?
.merge_with(&generated_sources);
assert!(generate_mods_in_directories(&mut generated_sources)?);
let source_path = PathBuf::from("src/arora_generated/");
generated_sources.sync(source_path.clone()).await?;
apply_rustfmt(source_path).await?;
Ok(())
}