rusteal-codegen 0.8.0

Code generator: UHT JSON to Rust bindings and C++ wrappers for rusteal
Documentation
use crate::context::FuncEntry;

pub fn generate_rust_func_ids(entries: &[FuncEntry]) -> String {
    let mut out = String::with_capacity(entries.len() * 60 + 256);
    out.push_str("// Auto-generated by rusteal-codegen. Do not edit.\n\n");
    out.push_str("#![allow(dead_code)]\n\n");

    for entry in entries {
        let const_name = func_id_const_name(&entry.class_name, &entry.func_name);
        let id = entry.func_id;
        out.push_str(&format!("pub const {const_name}: u32 = {id};\n"));
    }

    out.push('\n');

    out.push_str(&format!("pub const FUNC_COUNT: u32 = {};\n", entries.len()));

    out
}

pub fn func_id_const_name(class_name: &str, func_name: &str) -> String {
    let class = to_screaming_snake(class_name);
    let func = to_screaming_snake(func_name);
    format!("{class}_{func}")
}

fn to_screaming_snake(name: &str) -> String {
    let snake = crate::naming::to_snake_case(name);
    snake.to_ascii_uppercase()
}