rusteal-codegen 0.8.0

Code generator: UHT JSON to Rust bindings and C++ wrappers for rusteal
Documentation
use std::collections::HashSet;
use std::path::Path;

use crate::context::CodegenContext;

const ENTRIES: &[(&str, &str)] = &[
    (
        "core",
        "crate::core_ue::{\n    \
             FVector, FVectorExt,\n    \
             FVector2D, FVector2DExt,\n    \
             FVector4, FVector4Ext,\n    \
             FQuat, FQuatExt,\n    \
             FRotator, FRotatorExt,\n    \
             FTransform, FTransformExt,\n    \
             FLinearColor, FLinearColorExt,\n    \
             FColor, FColorExt,\n    \
             FPlane, FPlaneExt,\n    \
             FBox2D, FBox2DExt,\n\
         }",
    ),
    ("core", "crate::manual::vector::OwnedFVectorExt"),
    ("core", "crate::manual::vector2d::OwnedFVector2DExt"),
    ("core", "crate::manual::vector4::OwnedFVector4Ext"),
    ("core", "crate::manual::quat::OwnedFQuatExt"),
    ("core", "crate::manual::rotator::OwnedFRotatorExt"),
    ("core", "crate::manual::transform::OwnedFTransformExt"),
    ("core", "crate::manual::linear_color::OwnedFLinearColorExt"),
    ("core", "crate::manual::color::OwnedFColorExt"),
    ("core", "crate::manual::plane::OwnedFPlaneExt"),
    ("core", "crate::manual::ue_box2d::OwnedFBox2DExt"),
    (
        "engine",
        "crate::engine::{Actor, ActorExt, World, WorldExt}",
    ),
    (
        "engine",
        "crate::manual::world_ext::{ObjectWorldExt, SpawnCollisionMethod, SpawnParams, WorldSpawnExt, find_object, load_class, load_object}",
    ),
    ("engine", "crate::manual::collision::object_type_query"),
    (
        "engine",
        "crate::manual::data_table::{DataTableRowHandleRowExt, find_data_table_row}",
    ),
    (
        "umg",
        "crate::manual::widget_ext::{create_widget, create_widget_of_class}",
    ),
    ("input", "crate::input_core::FKey"),
    ("input", "crate::manual::fkey::FKeyExt"),
    (
        "enhanced-input",
        "crate::manual::input_ext::{InputActionValueExt, bind_action, enhanced_input_subsystem}",
    ),
];

pub fn write_prelude(src_dir: &Path, ctx: &CodegenContext) {
    let available: HashSet<&str> = ctx
        .enabled_modules
        .iter()
        .filter_map(|module| ctx.feature_for_module(module))
        .collect();

    let mut out = String::from(
        "// Auto-generated by rusteal-codegen. Do not edit.\n\
         //\n\
         // One-import access to the engine types used most often:\n\
         //\n\
         //     use rusteal_runtime::prelude::*;\n\
         //     use bindings::prelude::*;\n\n",
    );

    for (feature, path) in ENTRIES {
        if !available.contains(feature) {
            continue;
        }

        out.push_str(&format!(
            "#[cfg(feature = \"{feature}\")]\npub use {path};\n"
        ));
    }

    let path = src_dir.join("prelude.rs");

    crate::write_if_changed(&path, &out)
        .unwrap_or_else(|e| panic!("Failed to write {}: {e}", path.display()));
}