diff --git a/Cargo.lock b/Cargo.lock index 05af473dd53..0914e938d9a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7534,6 +7534,7 @@ dependencies = [ "insta", "itertools 0.12.1", "regex", + "serde_json", "spacetimedb-data-structures", "spacetimedb-lib 1.11.0", "spacetimedb-primitives 1.11.0", diff --git a/crates/cli/src/subcommands/generate.rs b/crates/cli/src/subcommands/generate.rs index 4e6fb5ec124..8cb58573eaf 100644 --- a/crates/cli/src/subcommands/generate.rs +++ b/crates/cli/src/subcommands/generate.rs @@ -25,7 +25,7 @@ use std::io::Read; pub fn cli() -> clap::Command { clap::Command::new("generate") .about("Generate client files for a spacetime module.") - .override_usage("spacetime generate --lang --out-dir [--project-path | --bin-path | --module-name | --uproject-dir ]") + .override_usage("spacetime generate --lang --out-dir [--project-path | --bin-path | --module-name | --uproject-dir | --module-prefix ]") .arg( Arg::new("wasm_file") .value_parser(clap::value_parser!(PathBuf)) @@ -93,6 +93,11 @@ pub fn cli() -> clap::Command { .help("The module name that should be used for DLL export macros (required for lang unrealcpp)") .required_if_eq("lang", "unrealcpp") ) + .arg( + Arg::new("module_prefix") + .long("module-prefix") + .help("The module prefix to use for generated types (only used with --lang unrealcpp)") + ) .arg( Arg::new("lang") .required(true) @@ -135,6 +140,7 @@ pub async fn exec_ex( let lang = *args.get_one::("lang").unwrap(); let namespace = args.get_one::("namespace").unwrap(); let module_name = args.get_one::("module_name"); + let module_prefix = args.get_one::("module_prefix"); let force = args.get_flag("force"); let build_options = args.get_one::("build_options").unwrap(); @@ -186,6 +192,7 @@ pub async fn exec_ex( unreal_cpp_lang = UnrealCpp { module_name: module_name.as_ref().unwrap(), uproject_dir: out_dir, + module_prefix: module_prefix.as_ref().map(|s| s.as_str()).unwrap_or(""), }; &unreal_cpp_lang as &dyn Lang } diff --git a/crates/codegen/Cargo.toml b/crates/codegen/Cargo.toml index 54e0f589669..9d362a09ade 100644 --- a/crates/codegen/Cargo.toml +++ b/crates/codegen/Cargo.toml @@ -15,6 +15,7 @@ spacetimedb-schema.workspace = true anyhow.workspace = true convert_case.workspace = true itertools.workspace = true +serde_json.workspace = true [dev-dependencies] fs-err.workspace = true diff --git a/crates/codegen/src/unrealcpp.rs b/crates/codegen/src/unrealcpp.rs index 2fe7abd60e7..f5727e70ac0 100644 --- a/crates/codegen/src/unrealcpp.rs +++ b/crates/codegen/src/unrealcpp.rs @@ -1,8 +1,7 @@ //! Autogenerated Unreal‑C++ code‑gen backend for SpacetimeDB CLI use crate::code_indenter::CodeIndenter; use crate::util::{ - collect_case, fmt_fn, iter_table_names_and_types, print_auto_generated_file_comment, - print_auto_generated_version_comment, + fmt_fn, iter_table_names_and_types, print_auto_generated_file_comment, print_auto_generated_version_comment, }; use crate::util::{iter_indexes, iter_procedures, iter_reducers}; use crate::Lang; @@ -24,6 +23,7 @@ use std::path::Path; pub struct UnrealCpp<'opts> { pub module_name: &'opts str, pub uproject_dir: &'opts Path, + pub module_prefix: &'opts str, } // --------------------------------------------------------------------------- @@ -38,10 +38,10 @@ impl UnrealCpp<'_> { impl Lang for UnrealCpp<'_> { fn generate_table_file_from_schema(&self, module: &ModuleDef, table: &TableDef, schema: TableSchema) -> OutputFile { - let struct_name = type_ref_name(module, table.product_type_ref); - let table_pascal = table.name.deref().to_case(Case::Pascal); + let module_prefix = self.module_prefix; + let struct_name = type_ref_name(module_prefix, module, table.product_type_ref); + let table_pascal = format!("{module_prefix}{}", table.name.deref().to_case(Case::Pascal)); let self_header = table_pascal.clone() + "Table"; - let mut output = UnrealCppAutogen::new( &[ "Types/Builtins.h", @@ -75,7 +75,8 @@ impl Lang for UnrealCpp<'_> { if let Some(col) = columns.as_singleton() { let (f_name, f_ty) = &product_type.unwrap().elements[col.idx()]; let field_name = f_name.deref().to_case(Case::Pascal); - let field_type = cpp_ty_fmt_with_module(module, f_ty, self.module_name).to_string(); + let field_type = + cpp_ty_fmt_with_module(self.module_prefix, module, f_ty, self.module_name).to_string(); let index_name = accessor_name.deref().to_case(Case::Pascal); let index_class_name = format!("U{table_pascal}{index_name}UniqueIndex"); let key_type = field_type.clone(); @@ -172,7 +173,8 @@ impl Lang for UnrealCpp<'_> { .map(|col| { let (f_name, f_ty) = &product_type.unwrap().elements[col.idx()]; let field_name = f_name.deref().to_case(Case::Pascal); - let field_type = cpp_ty_fmt_with_module(module, f_ty, self.module_name).to_string(); + let field_type = + cpp_ty_fmt_with_module(self.module_prefix, module, f_ty, self.module_name).to_string(); let param_type = format!("const {field_type}&"); (field_name, field_type, param_type, f_ty, f_name.deref().to_string()) @@ -325,21 +327,21 @@ impl Lang for UnrealCpp<'_> { // Generate table events in public section writeln!(output, " // Table Events"); writeln!(output, " DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams( "); - writeln!(output, " FOn{table_pascal}Insert,"); - writeln!(output, " const FEventContext&, Context,"); + writeln!(output, " F{module_prefix}On{table_pascal}Insert,"); + writeln!(output, " const F{module_prefix}EventContext&, Context,"); writeln!(output, " const {row_struct}&, NewRow);"); writeln!(output); writeln!(output, " DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams( "); - writeln!(output, " FOn{table_pascal}Update,"); - writeln!(output, " const FEventContext&, Context,"); + writeln!(output, " F{module_prefix}On{table_pascal}Update,"); + writeln!(output, " const F{module_prefix}EventContext&, Context,"); writeln!(output, " const {row_struct}&, OldRow,"); writeln!(output, " const {row_struct}&, NewRow);"); writeln!(output); writeln!(output, " DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams( "); - writeln!(output, " FOn{table_pascal}Delete,"); - writeln!(output, " const FEventContext&, Context,"); + writeln!(output, " F{module_prefix}On{table_pascal}Delete,"); + writeln!(output, " const F{module_prefix}EventContext&, Context,"); writeln!(output, " const {row_struct}&, DeletedRow);"); writeln!(output); @@ -347,21 +349,21 @@ impl Lang for UnrealCpp<'_> { output, " UPROPERTY(BlueprintAssignable, Category = \"SpacetimeDB Events\")" ); - writeln!(output, " FOn{table_pascal}Insert OnInsert;"); + writeln!(output, " F{module_prefix}On{table_pascal}Insert OnInsert;"); writeln!(output); writeln!( output, " UPROPERTY(BlueprintAssignable, Category = \"SpacetimeDB Events\")" ); - writeln!(output, " FOn{table_pascal}Update OnUpdate;"); + writeln!(output, " F{module_prefix}On{table_pascal}Update OnUpdate;"); writeln!(output); writeln!( output, " UPROPERTY(BlueprintAssignable, Category = \"SpacetimeDB Events\")" ); - writeln!(output, " FOn{table_pascal}Delete OnDelete;"); + writeln!(output, " F{module_prefix}On{table_pascal}Delete OnDelete;"); writeln!(output); writeln!(output, "private:"); @@ -373,8 +375,9 @@ impl Lang for UnrealCpp<'_> { OutputFile { filename: format!( - "Source/{}/Public/ModuleBindings/Tables/{}Table.g.h", + "Source/{}/Public/ModuleBindings/Tables/{}{}Table.g.h", self.module_name, + self.module_prefix, table.name.deref().to_case(Case::Pascal) //type_ref_name(module, table.product_type_ref) ), code: output.into_inner(), @@ -382,42 +385,49 @@ impl Lang for UnrealCpp<'_> { } fn generate_type_files(&self, module: &ModuleDef, typ: &TypeDef) -> Vec { - let name = typ - .name - .name_segments() - .last() - .map(|id| id.deref()) - .unwrap_or("Unnamed"); + let name = type_ref_name(self.module_prefix, module, typ.ty); + let filename = format!( "Source/{}/Public/ModuleBindings/Types/{}Type.g.h", - self.module_name, - collect_case(Case::Pascal, typ.name.name_segments()) + self.module_name, &name ); let code: String = match &module.typespace_for_generate()[typ.ty] { - AlgebraicTypeDef::PlainEnum(plain_enum) => autogen_cpp_enum(name, plain_enum), - AlgebraicTypeDef::Product(product_type_def) => { - autogen_cpp_struct(module, name, product_type_def, &self.get_api_macro(), self.module_name) - } - AlgebraicTypeDef::Sum(sum_type_def) => { - autogen_cpp_sum(module, name, sum_type_def, &self.get_api_macro(), self.module_name) - } + AlgebraicTypeDef::PlainEnum(plain_enum) => autogen_cpp_enum(&name, plain_enum), + AlgebraicTypeDef::Product(product_type_def) => autogen_cpp_struct( + self.module_prefix, + module, + &name, + product_type_def, + &self.get_api_macro(), + self.module_name, + ), + AlgebraicTypeDef::Sum(sum_type_def) => autogen_cpp_sum( + self.module_prefix, + module, + &name, + sum_type_def, + &self.get_api_macro(), + self.module_name, + ), }; vec![OutputFile { filename, code }] } fn generate_reducer_file(&self, module: &ModuleDef, reducer: &ReducerDef) -> OutputFile { - let reducer_snake = reducer.name.deref(); - let pascal = reducer_snake.to_case(Case::Pascal); + let reducer_original = reducer.name.deref(); + let reducer_pascal = reducer_original.to_case(Case::Pascal); + let module_prefix = self.module_prefix; + let pascal = format!("{module_prefix}{reducer_pascal}"); // Collect includes for parameter types let mut includes = HashSet::::new(); for (_param_name, param_type) in &reducer.params_for_generate.elements { - collect_includes_for_type(module, param_type, &mut includes, self.module_name); + collect_includes_for_type(module_prefix, module, param_type, &mut includes, self.module_name); } // Add ReducerBase.g.h for UReducerBase definition - includes.insert("ModuleBindings/ReducerBase.g.h".to_string()); + includes.insert(format!("ModuleBindings/{module_prefix}ReducerBase.g.h")); // Convert to sorted vector let mut include_vec: Vec = includes.into_iter().collect(); @@ -441,8 +451,9 @@ impl Lang for UnrealCpp<'_> { // Generate properties for each parameter for (param_name, param_type) in &reducer.params_for_generate.elements { let param_pascal = param_name.deref().to_case(Case::Pascal); - let type_str = cpp_ty_fmt_with_module(module, param_type, self.module_name).to_string(); - let field_decl = format!("{type_str} {param_pascal}"); + let type_str = cpp_ty_fmt_with_module(self.module_prefix, module, param_type, self.module_name).to_string(); + let init_str = cpp_ty_init_fmt_impl(param_type, type_str.as_str()); + let field_decl = format!("{type_str} {param_pascal}{init_str}"); // Check if the type is blueprintable if is_blueprintable(module, param_type) { @@ -472,7 +483,8 @@ impl Lang for UnrealCpp<'_> { } first = false; let param_pascal = param_name.deref().to_case(Case::Pascal); - let type_str = cpp_ty_fmt_with_module(module, param_type, self.module_name).to_string(); + let type_str = + cpp_ty_fmt_with_module(self.module_prefix, module, param_type, self.module_name).to_string(); write!(header, "const {type_str}& In{param_pascal}"); } @@ -558,7 +570,7 @@ impl Lang for UnrealCpp<'_> { writeln!(header, "UCLASS(BlueprintType)"); writeln!( header, - "class {} U{pascal}Reducer : public UReducerBase", + "class {} U{pascal}Reducer : public U{module_prefix}ReducerBase", self.get_api_macro() ); writeln!(header, "{{"); @@ -569,7 +581,7 @@ impl Lang for UnrealCpp<'_> { // Generate properties for each parameter (for dispatching) for (param_name, param_type) in &reducer.params_for_generate.elements { let param_pascal = param_name.deref().to_case(Case::Pascal); - let type_str = cpp_ty_fmt_with_module(module, param_type, self.module_name).to_string(); + let type_str = cpp_ty_fmt_with_module(self.module_prefix, module, param_type, self.module_name).to_string(); let field_decl = format!("{type_str} {param_pascal}"); // Check if the type is blueprintable @@ -606,14 +618,16 @@ impl Lang for UnrealCpp<'_> { procedure: &spacetimedb_schema::def::ProcedureDef, ) -> OutputFile { let procedure_snake = procedure.name.deref(); - let pascal = procedure_snake.to_case(Case::Pascal); + let procedure_name = procedure_snake.to_case(Case::Pascal); + let pascal = format!("{}{}", self.module_prefix, procedure_name); // Collect includes for parameter types let mut includes = HashSet::::new(); for (_param_name, param_type) in &procedure.params_for_generate.elements { - collect_includes_for_type(module, param_type, &mut includes, self.module_name); + collect_includes_for_type(self.module_prefix, module, param_type, &mut includes, self.module_name); } collect_includes_for_type( + self.module_prefix, module, &procedure.return_type_for_generate, &mut includes, @@ -642,8 +656,9 @@ impl Lang for UnrealCpp<'_> { // Generate properties for each parameter for (param_name, param_type) in &procedure.params_for_generate.elements { let param_pascal = param_name.deref().to_case(Case::Pascal); - let type_str = cpp_ty_fmt_with_module(module, param_type, self.module_name).to_string(); - let field_decl = format!("{type_str} {param_pascal}"); + let type_str = cpp_ty_fmt_with_module(self.module_prefix, module, param_type, self.module_name).to_string(); + let init_str = cpp_ty_init_fmt_impl(param_type, type_str.as_str()); + let field_decl = format!("{type_str} {param_pascal}{init_str}"); // Check if the type is blueprintable if is_blueprintable(module, param_type) { @@ -673,7 +688,8 @@ impl Lang for UnrealCpp<'_> { } first = false; let param_pascal = param_name.deref().to_case(Case::Pascal); - let type_str = cpp_ty_fmt_with_module(module, param_type, self.module_name).to_string(); + let type_str = + cpp_ty_fmt_with_module(self.module_prefix, module, param_type, self.module_name).to_string(); write!(header, "const {type_str}& In{param_pascal}"); } @@ -764,16 +780,54 @@ impl Lang for UnrealCpp<'_> { fn generate_global_files(&self, module: &ModuleDef) -> Vec { let mut files: Vec = vec![]; + let module_prefix = self.module_prefix; + + // First, we need to confirm this module has the required base files + // Unreal works on the idea of modules added to the .uproject Source folder and described in the .uproject file + // To have the module build these files must exist + let source_dir = self.uproject_dir.join("Source").join(self.module_name); + let required_files = [ + ( + format!("{}.Build.cs", self.module_name), + generate_build_cs_content(self.module_name), + ), + ( + format!("{}.cpp", self.module_name), + generate_module_cpp_content(self.module_name), + ), + ( + format!("{}.h", self.module_name), + generate_module_h_content(self.module_name), + ), + ]; + + for (filename, content) in required_files { + let file_path = source_dir.join(&filename); + if !file_path.exists() { + files.push(OutputFile { + filename: format!("Source/{}/{}", self.module_name, filename), + code: content, + }); + } + } + // We also need to ensure the .uproject file includes this module + let _ = ensure_module_in_uproject(self.uproject_dir, self.module_name); - // First, collect and generate all optional types - let optional_types = collect_optional_types(module); + // Second, collect and generate all optional types + let optional_types = collect_optional_types(self.module_prefix, module); for optional_name in optional_types { let module_name = &self.module_name; let module_name_pascal = module_name.to_case(Case::Pascal); let filename = format!("Source/{module_name}/Public/ModuleBindings/Optionals/{module_name_pascal}{optional_name}.g.h"); - let content = generate_optional_type(&optional_name, module, &self.get_api_macro(), self.module_name); + let content = generate_optional_type( + &optional_name, + self.module_prefix, + module, + &self.get_api_macro(), + self.module_name, + ); files.push(OutputFile { filename, code: content, @@ -789,38 +843,52 @@ impl Lang for UnrealCpp<'_> { includes.insert("Connection/Subscription.h".to_string()); includes.insert("Connection/SetReducerFlags.h".to_string()); includes.insert("Connection/Callback.h".to_string()); - includes.insert("ModuleBindings/ReducerBase.g.h".to_string()); + includes.insert(format!("ModuleBindings/{module_prefix}ReducerBase.g.h")); includes.insert("Kismet/BlueprintFunctionLibrary.h".to_string()); // Include reducers for reducer in iter_reducers(module) { - let reducer_pascal = reducer.name.deref().to_case(Case::Pascal); + let reducer_pascal = format!("{module_prefix}{}", reducer.name.deref().to_case(Case::Pascal)); + includes.insert(format!("ModuleBindings/Reducers/{reducer_pascal}.g.h")); } // Include procedures for procedure in iter_procedures(module) { - let procedure_pascal = procedure.name.deref().to_case(Case::Pascal); + let procedure_pascal = format!("{}{}", module_prefix, procedure.name.deref().to_case(Case::Pascal)); includes.insert(format!("ModuleBindings/Procedures/{procedure_pascal}.g.h")); } // Collect includes for types used in delegates and contexts - // FSpacetimeDBIdentity is used in FOnConnectDelegate and context methods - collect_includes_for_type(module, &AlgebraicTypeUse::Identity, &mut includes, self.module_name); + // FSpacetimeDBIdentity is used in F{module_prefix}OnConnectDelegate and context methods + collect_includes_for_type( + self.module_prefix, + module, + &AlgebraicTypeUse::Identity, + &mut includes, + self.module_name, + ); // FSpacetimeDBConnectionId is used in context methods - collect_includes_for_type(module, &AlgebraicTypeUse::ConnectionId, &mut includes, self.module_name); + collect_includes_for_type( + self.module_prefix, + module, + &AlgebraicTypeUse::ConnectionId, + &mut includes, + self.module_name, + ); // Collect includes for all reducer parameter types for reducer in iter_reducers(module) { for (_param_name, param_type) in &reducer.params_for_generate.elements { - collect_includes_for_type(module, param_type, &mut includes, self.module_name); + collect_includes_for_type(module_prefix, module, param_type, &mut includes, self.module_name); } } // Collect includes for all procedure parameter types for procedure in iter_procedures(module) { for (_param_name, param_type) in &procedure.params_for_generate.elements { - collect_includes_for_type(module, param_type, &mut includes, self.module_name); + collect_includes_for_type(module_prefix, module, param_type, &mut includes, self.module_name); } collect_includes_for_type( + module_prefix, module, &procedure.return_type_for_generate, &mut includes, @@ -835,31 +903,37 @@ impl Lang for UnrealCpp<'_> { // Convert to string references let include_refs: Vec<&str> = include_vec.iter().map(|s| s.as_str()).collect(); - let mut client_h = UnrealCppAutogen::new(&include_refs, "SpacetimeDBClient", true); + let self_header = format!("{module_prefix}SpacetimeDBClient"); + let mut client_h = UnrealCppAutogen::new(&include_refs, self_header.as_str(), true); // Forward declarations writeln!(client_h, "// Forward declarations"); - writeln!(client_h, "class UDbConnection;"); - writeln!(client_h, "class URemoteTables;"); - writeln!(client_h, "class URemoteReducers;"); - writeln!(client_h, "class URemoteProcedures;"); - writeln!(client_h, "class USubscriptionBuilder;"); - writeln!(client_h, "class USubscriptionHandle;"); + writeln!(client_h, "class U{module_prefix}DbConnection;"); + writeln!(client_h, "class U{module_prefix}RemoteTables;"); + writeln!(client_h, "class U{module_prefix}RemoteReducers;"); + writeln!(client_h, "class U{module_prefix}URemoteProcedures;"); + writeln!(client_h, "class U{module_prefix}SubscriptionBuilder;"); + writeln!(client_h, "class U{module_prefix}SubscriptionHandle;"); writeln!(client_h); writeln!(client_h, "/** Forward declaration for tables */"); for (table_name, _) in iter_table_names_and_types(module) { - writeln!(client_h, "class U{}Table;", table_name.deref().to_case(Case::Pascal)); + writeln!( + client_h, + "class U{module_prefix}{}Table;", + table_name.deref().to_case(Case::Pascal) + ); } writeln!(client_h, "/***/"); writeln!(client_h); // Delegates first (as in manual) - generate_delegates(&mut client_h); + generate_delegates(&mut client_h, module_prefix); // Context structs generate_context_structs( &mut client_h, + self.module_prefix, module, &self.get_api_macro(), &self.module_name.to_case(Case::Pascal), @@ -869,7 +943,7 @@ impl Lang for UnrealCpp<'_> { writeln!(client_h, "UCLASS(BlueprintType)"); writeln!( client_h, - "class {} USetReducerFlags : public USetReducerFlagsBase", + "class {} U{module_prefix}SetReducerFlags : public USetReducerFlagsBase", self.get_api_macro() ); writeln!(client_h, "{{"); @@ -878,9 +952,9 @@ impl Lang for UnrealCpp<'_> { writeln!(client_h, "public:"); for reducer in iter_reducers(module) { - let reducer_pascal = reducer.name.deref().to_case(Case::Pascal); + let reducer_name = reducer.name.deref().to_case(Case::Pascal); writeln!(client_h, "\tUFUNCTION(BlueprintCallable, Category = \"SpacetimeDB\")"); - writeln!(client_h, "\tvoid {reducer_pascal}(ECallReducerFlags Flag);"); + writeln!(client_h, "\tvoid {reducer_name}(ECallReducerFlags Flag);"); } writeln!(client_h); @@ -888,53 +962,78 @@ impl Lang for UnrealCpp<'_> { writeln!(client_h); // RemoteTables class - generate_remote_tables_class(&mut client_h, module, &self.get_api_macro()); + generate_remote_tables_class(&mut client_h, module_prefix, module, &self.get_api_macro()); // RemoteReducers class - generate_remote_reducers_class(&mut client_h, module, &self.get_api_macro(), self.module_name); + generate_remote_reducers_class( + &mut client_h, + module_prefix, + module, + &self.get_api_macro(), + self.module_name, + ); // RemoteProcedures class - generate_remote_procedures_class(&mut client_h, module, &self.get_api_macro(), self.module_name); + generate_remote_procedures_class( + &mut client_h, + module, + &self.get_api_macro(), + self.module_name, + self.module_prefix, + ); // SubscriptionBuilder class - generate_subscription_builder_class(&mut client_h, &self.get_api_macro()); + generate_subscription_builder_class(&mut client_h, module_prefix, &self.get_api_macro()); // SubscriptionHandle class - generate_subscription_handle_class(&mut client_h, &self.get_api_macro()); + generate_subscription_handle_class(&mut client_h, module_prefix, &self.get_api_macro()); // DbConnectionBuilder class - generate_db_connection_builder_class(&mut client_h, &self.get_api_macro()); + generate_db_connection_builder_class(&mut client_h, module_prefix, &self.get_api_macro()); // Main DbConnection class - generate_db_connection_class(&mut client_h, module, &self.get_api_macro()); + generate_db_connection_class( + &mut client_h, + module_prefix, + module, + &self.get_api_macro(), + self.module_name, + ); // Generate the separate ReducerBase file - let mut reducer_base_header = UnrealCppAutogen::new(&[], "ReducerBase", false); + let reducer_base_header_name = format!("{module_prefix}ReducerBase"); + let mut reducer_base_header = UnrealCppAutogen::new(&[], reducer_base_header_name.as_str(), false); // Generate the UReducerBase class writeln!(reducer_base_header, "// Abstract Reducer base class"); writeln!(reducer_base_header, "UCLASS(Abstract, BlueprintType)"); writeln!( reducer_base_header, - "class {} UReducerBase : public UObject", + "class {} U{module_prefix}ReducerBase : public UObject", self.get_api_macro() ); writeln!(reducer_base_header, "{{"); writeln!(reducer_base_header, " GENERATED_BODY()"); writeln!(reducer_base_header); writeln!(reducer_base_header, "public:"); - writeln!(reducer_base_header, " virtual ~UReducerBase() = default;"); + writeln!( + reducer_base_header, + " virtual ~U{module_prefix}ReducerBase() = default;" + ); writeln!(reducer_base_header, "}};"); writeln!(reducer_base_header); files.push(OutputFile { - filename: format!("Source/{}/Public/ModuleBindings/ReducerBase.g.h", self.module_name), + filename: format!( + "Source/{}/Public/ModuleBindings/{module_prefix}ReducerBase.g.h", + self.module_name + ), code: reducer_base_header.into_inner(), }); files.push(OutputFile { filename: format!( - "Source/{}/Public/ModuleBindings/SpacetimeDBClient.g.h", + "Source/{}/Public/ModuleBindings/{module_prefix}SpacetimeDBClient.g.h", self.module_name ), code: client_h.into_inner(), @@ -944,14 +1043,16 @@ impl Lang for UnrealCpp<'_> { let table_includes: Vec = iter_table_names_and_types(module) .map(|(table_name, _)| { format!( - "ModuleBindings/Tables/{}Table.g.h", + "ModuleBindings/Tables/{}{}Table.g.h", + self.module_prefix, table_name.deref().to_case(Case::Pascal) //type_ref_name(module, product_type_ref) ) }) .collect(); let table_includes_str: Vec<&str> = table_includes.iter().map(|s| s.as_str()).collect(); - let mut cpp_includes = vec!["ModuleBindings/SpacetimeDBClient.g.h"]; + let spacetime_include = format!("ModuleBindings/{module_prefix}SpacetimeDBClient.g.h"); + let mut cpp_includes = vec![spacetime_include.as_str()]; // Add additional includes from manual reference cpp_includes.extend_from_slice(&["DBCache/WithBsatn.h", "BSATN/UEBSATNHelpers.h"]); @@ -960,10 +1061,10 @@ impl Lang for UnrealCpp<'_> { cpp_includes.extend(table_includes_str); let mut client_cpp = UnrealCppAutogen::new_cpp(&cpp_includes); - generate_client_implementation(&mut client_cpp, module, self.module_name); + generate_client_implementation(&mut client_cpp, module_prefix, module, self.module_name); files.push(OutputFile { filename: format!( - "Source/{}/Private/ModuleBindings/SpacetimeDBClient.g.cpp", + "Source/{}/Private/ModuleBindings/{module_prefix}SpacetimeDBClient.g.cpp", self.module_name ), code: client_cpp.into_inner(), @@ -974,9 +1075,9 @@ impl Lang for UnrealCpp<'_> { let schema = TableSchema::from_module_def(module, table, (), 0.into()) .validated() .expect("table schema should validate"); - let table_cpp_content = generate_table_cpp(module, table, self.module_name, &schema); + let table_cpp_content = generate_table_cpp(module_prefix, module, table, self.module_name, &schema); let table_cpp_filename = format!( - "Source/{}/Private/ModuleBindings/Tables/{}Table.g.cpp", + "Source/{}/Private/ModuleBindings/Tables/{module_prefix}{}Table.g.cpp", self.module_name, table.name.deref().to_case(Case::Pascal) //type_ref_name(module, table.product_type_ref) ); @@ -990,9 +1091,9 @@ impl Lang for UnrealCpp<'_> { let schema = TableSchema::from_view_def_for_codegen(module, view) .validated() .expect("Failed to generate table due to validation errors"); - let view_cpp_content = generate_table_cpp(module, &tbl, self.module_name, &schema); + let view_cpp_content = generate_table_cpp(module_prefix, module, &tbl, self.module_name, &schema); let view_cpp_filename = format!( - "Source/{}/Private/ModuleBindings/Tables/{}Table.g.cpp", + "Source/{}/Private/ModuleBindings/Tables/{module_prefix}{}Table.g.cpp", self.module_name, view.name.deref().to_case(Case::Pascal) //type_ref_name(module, view.product_type_ref) ); @@ -1007,9 +1108,16 @@ impl Lang for UnrealCpp<'_> { } // Helper function to generate table .cpp implementation files -fn generate_table_cpp(module: &ModuleDef, table: &TableDef, module_name: &str, schema: &TableSchema) -> String { - let table_pascal = table.name.deref().to_case(Case::Pascal); - let struct_name = type_ref_name(module, table.product_type_ref); +fn generate_table_cpp( + module_prefix: &str, + module: &ModuleDef, + table: &TableDef, + module_name: &str, + schema: &TableSchema, +) -> String { + let table_name = table.name.deref().to_case(Case::Pascal); + let table_pascal = format!("{}{}", module_prefix, table_name); + let struct_name = type_ref_name(module_prefix, module, table.product_type_ref); let row_struct = format!("F{struct_name}Type"); // Include the table header and other necessary headers @@ -1039,7 +1147,7 @@ fn generate_table_cpp(module: &ModuleDef, table: &TableDef, module_name: &str, s if let Some(col) = columns.as_singleton() { let (f_name, f_ty) = &product_type.unwrap().elements[col.idx()]; let _field_name = f_name.deref().to_case(Case::Pascal); - let field_type = cpp_ty_fmt_with_module(module, f_ty, module_name).to_string(); + let field_type = cpp_ty_fmt_with_module(module_prefix, module, f_ty, module_name).to_string(); let index_name = accessor_name.deref().to_case(Case::Pascal); unique_indexes.push((index_name, field_type, f_name.deref().to_string())); } @@ -1054,7 +1162,7 @@ fn generate_table_cpp(module: &ModuleDef, table: &TableDef, module_name: &str, s .map(|col| { let (f_name, f_ty) = &product_type.unwrap().elements[col.idx()]; let field_name = f_name.deref().to_case(Case::Pascal); - let field_type = cpp_ty_fmt_with_module(module, f_ty, module_name).to_string(); + let field_type = cpp_ty_fmt_with_module(module_prefix, module, f_ty, module_name).to_string(); (field_name, field_type) }) .collect(); @@ -1151,7 +1259,7 @@ fn generate_table_cpp(module: &ModuleDef, table: &TableDef, module_name: &str, s if let Some(pk) = schema.pk() { let pk_field_name = pk.col_name.deref().to_case(Case::Pascal); let pk_type = &product_type.unwrap().elements[pk.col_pos.idx()].1; - let pk_type_str = cpp_ty_fmt_with_module(module, pk_type, module_name).to_string(); + let pk_type_str = cpp_ty_fmt_with_module(module_prefix, module, pk_type, module_name).to_string(); writeln!(output, " Diff.DeriveUpdatesByPrimaryKey<{pk_type_str}>("); writeln!(output, " [](const {row_struct}& Row) "); writeln!(output, " {{"); @@ -1195,7 +1303,7 @@ fn generate_table_cpp(module: &ModuleDef, table: &TableDef, module_name: &str, s // Helper functions for generating the consolidated SpacetimeDBClient file -fn generate_delegates(output: &mut UnrealCppAutogen) { +fn generate_delegates(output: &mut UnrealCppAutogen, module_prefix: &str) { writeln!( output, "// Delegates using the generated connection type. These wrap the base" @@ -1204,46 +1312,58 @@ fn generate_delegates(output: &mut UnrealCppAutogen) { output, "// delegates defined in the SDK so that projects can work directly with" ); - writeln!(output, "// UDbConnection without manual casting in user code."); + writeln!( + output, + "// U{module_prefix}DbConnection without manual casting in user code." + ); writeln!(output, "DECLARE_DYNAMIC_DELEGATE_ThreeParams("); - writeln!(output, "\tFOnConnectDelegate,"); - writeln!(output, "\tUDbConnection*, Connection,"); + writeln!(output, "\tF{module_prefix}OnConnectDelegate,"); + writeln!(output, "\tU{module_prefix}DbConnection*, Connection,"); writeln!(output, "\tFSpacetimeDBIdentity, Identity,"); writeln!(output, "\tconst FString&, Token);"); writeln!(output); writeln!(output, "DECLARE_DYNAMIC_DELEGATE_TwoParams("); - writeln!(output, "\tFOnDisconnectDelegate,"); - writeln!(output, "\tUDbConnection*, Connection,"); + writeln!(output, "\tF{module_prefix}OnDisconnectDelegate,"); + writeln!(output, "\tU{module_prefix}DbConnection*, Connection,"); writeln!(output, "\tconst FString&, Error);"); writeln!(output); writeln!(output); } -fn generate_context_structs(output: &mut UnrealCppAutogen, module: &ModuleDef, api_macro: &str, module_name: &str) { +fn generate_context_structs( + output: &mut UnrealCppAutogen, + module_prefix: &str, + module: &ModuleDef, + api_macro: &str, + module_name: &str, +) { writeln!(output, "// Context classes for event handling"); writeln!(output); writeln!(output, "USTRUCT(BlueprintType)"); - writeln!(output, "struct {api_macro} FContextBase"); + writeln!(output, "struct {api_macro} F{module_prefix}ContextBase"); writeln!(output, "{{"); writeln!(output, "\tGENERATED_BODY()"); writeln!(output); writeln!( output, - "\tFContextBase() : Db(nullptr), Reducers(nullptr), SetReducerFlags(nullptr), Procedures(nullptr), Conn(nullptr) {{}};" + "\tF{module_prefix}ContextBase() : Db(nullptr), Reducers(nullptr), SetReducerFlags(nullptr), Procedures(nullptr), Conn(nullptr) {{}};" + ); + writeln!( + output, + "\tF{module_prefix}ContextBase(U{module_prefix}DbConnection* InConn);" ); - writeln!(output, "\tFContextBase(UDbConnection* InConn);"); writeln!(output); writeln!(output, "\tUPROPERTY(BlueprintReadOnly, Category = \"SpacetimeDB\")"); - writeln!(output, "\tURemoteTables* Db;"); + writeln!(output, "\tU{module_prefix}RemoteTables* Db;"); writeln!(output); writeln!(output, "\tUPROPERTY(BlueprintReadOnly, Category = \"SpacetimeDB\")"); - writeln!(output, "\tURemoteReducers* Reducers;"); + writeln!(output, "\tU{module_prefix}RemoteReducers* Reducers;"); writeln!(output); writeln!(output, "\tUPROPERTY(BlueprintReadOnly, Category = \"SpacetimeDB\")"); - writeln!(output, "\tUSetReducerFlags* SetReducerFlags;"); + writeln!(output, "\tU{module_prefix}SetReducerFlags* SetReducerFlags;"); writeln!(output); writeln!(output, "\tUPROPERTY(BlueprintReadOnly, Category = \"SpacetimeDB\")"); - writeln!(output, "\tURemoteProcedures* Procedures;"); + writeln!(output, "\tU{module_prefix}RemoteProcedures* Procedures;"); writeln!(output); writeln!(output, "\tbool IsActive() const;"); writeln!(output, "\tvoid Disconnect();"); @@ -1252,11 +1372,11 @@ fn generate_context_structs(output: &mut UnrealCppAutogen, module: &ModuleDef, a "\tbool TryGetIdentity(FSpacetimeDBIdentity& OutIdentity) const;" ); writeln!(output, "\tFSpacetimeDBConnectionId GetConnectionId() const;"); - writeln!(output, "\tUSubscriptionBuilder* SubscriptionBuilder();"); + writeln!(output, "\tU{module_prefix}SubscriptionBuilder* SubscriptionBuilder();"); writeln!(output); writeln!(output, "protected:"); writeln!(output, "\tUPROPERTY()"); - writeln!(output, "\tUDbConnection* Conn;"); + writeln!(output, "\tU{module_prefix}DbConnection* Conn;"); writeln!(output); writeln!(output, "}};"); writeln!(output); @@ -1265,7 +1385,7 @@ fn generate_context_structs(output: &mut UnrealCppAutogen, module: &ModuleDef, a writeln!(output, "UCLASS()"); writeln!( output, - "class {api_macro} UContextBaseBpLib : public UBlueprintFunctionLibrary" + "class {api_macro} U{module_prefix}ContextBaseBpLib : public UBlueprintFunctionLibrary" ); writeln!(output, "{{"); writeln!(output, "\tGENERATED_BODY()"); @@ -1275,37 +1395,37 @@ fn generate_context_structs(output: &mut UnrealCppAutogen, module: &ModuleDef, a writeln!(output, "\tUFUNCTION(BlueprintPure, Category=\"SpacetimeDB\")"); writeln!( output, - "\tstatic URemoteTables* GetDb(const FContextBase& Ctx) {{ return Ctx.Db; }}" + "\tstatic U{module_prefix}RemoteTables* GetDb(const F{module_prefix}ContextBase& Ctx) {{ return Ctx.Db; }}" ); writeln!(output); writeln!(output, "\tUFUNCTION(BlueprintPure, Category=\"SpacetimeDB\")"); writeln!( output, - "\tstatic URemoteReducers* GetReducers(const FContextBase& Ctx) {{ return Ctx.Reducers; }}" + "\tstatic U{module_prefix}RemoteReducers* GetReducers(const F{module_prefix}ContextBase& Ctx) {{ return Ctx.Reducers; }}" ); writeln!(output); writeln!(output, "\tUFUNCTION(BlueprintPure, Category=\"SpacetimeDB\")"); writeln!( output, - "\tstatic USetReducerFlags* GetSetReducerFlags(const FContextBase& Ctx) {{ return Ctx.SetReducerFlags; }}" + "\tstatic U{module_prefix}SetReducerFlags* GetSetReducerFlags(const F{module_prefix}ContextBase& Ctx) {{ return Ctx.SetReducerFlags; }}" ); writeln!(output); writeln!( output, - "\tstatic URemoteProcedures* GetProcedures(const FContextBase& Ctx) {{ return Ctx.Procedures; }}" + "\tstatic U{module_prefix}RemoteProcedures* GetProcedures(const F{module_prefix}ContextBase& Ctx) {{ return Ctx.Procedures; }}" ); writeln!(output); writeln!(output, "\tUFUNCTION(BlueprintPure, Category=\"SpacetimeDB\")"); writeln!( output, - "\tstatic bool IsActive(const FContextBase& Ctx) {{ return Ctx.IsActive(); }}" + "\tstatic bool IsActive(const F{module_prefix}ContextBase& Ctx) {{ return Ctx.IsActive(); }}" ); writeln!(output, "}};"); writeln!(output); - generate_reducer_bindings(output, module, api_macro, module_name); - generate_procedure_bindings(output, module, api_macro, module_name); + generate_reducer_bindings(output, module_prefix, module, api_macro, module_name); + generate_procedure_bindings(output, module_prefix, module, api_macro, module_name); // {}Event: union-like struct representing SpacetimeDB event messages writeln!(output, "/** Represents event with variant message data. */"); @@ -1319,7 +1439,10 @@ fn generate_context_structs(output: &mut UnrealCppAutogen, module: &ModuleDef, a output, "\t/** Tagged union holding reducer call, unit events, or error string */" ); - writeln!(output, "\tTVariant MessageData;"); + writeln!( + output, + "\tTVariant MessageData;" + ); writeln!(output); writeln!(output, "\t/** Type tag indicating what this event represents */"); @@ -1332,11 +1455,14 @@ fn generate_context_structs(output: &mut UnrealCppAutogen, module: &ModuleDef, a // === Static factory methods === writeln!(output, "\t/** === Static factory methods ===*/"); - writeln!(output, "\tstatic F{module_name}Event Reducer(const FReducer& Value)"); + writeln!( + output, + "\tstatic F{module_name}Event Reducer(const F{module_prefix}Reducer& Value)" + ); writeln!(output, "\t{{"); writeln!(output, "\t\tF{module_name}Event Obj;"); writeln!(output, "\t\tObj.Tag = ESpacetimeDBEventTag::Reducer;"); - writeln!(output, "\t\tObj.MessageData.Set(Value);"); + writeln!(output, "\t\tObj.MessageData.Set(Value);"); writeln!(output, "\t\treturn Obj;"); writeln!(output, "\t}}"); writeln!(output); @@ -1405,13 +1531,13 @@ fn generate_context_structs(output: &mut UnrealCppAutogen, module: &ModuleDef, a output, "\tFORCEINLINE bool IsReducer() const {{ return Tag == ESpacetimeDBEventTag::Reducer; }}" ); - writeln!(output, "\tFORCEINLINE FReducer GetAsReducer() const"); + writeln!(output, "\tFORCEINLINE F{module_prefix}Reducer GetAsReducer() const"); writeln!(output, "\t{{"); writeln!( output, "\t\tensureMsgf(IsReducer(), TEXT(\"MessageData does not hold Reducer!\"));" ); - writeln!(output, "\t\treturn MessageData.Get();"); + writeln!(output, "\t\treturn MessageData.Get();"); writeln!(output, "\t}}"); writeln!(output); writeln!( @@ -1537,7 +1663,7 @@ fn generate_context_structs(output: &mut UnrealCppAutogen, module: &ModuleDef, a ); writeln!( output, - " static F{module_name}Event Reducer(const FReducer& InValue)" + " static F{module_name}Event Reducer(const F{module_prefix}Reducer& InValue)" ); writeln!(output, " {{"); writeln!(output, " return F{module_name}Event::Reducer(InValue);"); @@ -1647,7 +1773,7 @@ fn generate_context_structs(output: &mut UnrealCppAutogen, module: &ModuleDef, a ); writeln!( output, - " static FReducer GetAsReducer(const F{module_name}Event& Event)" + " static F{module_prefix}Reducer GetAsReducer(const F{module_name}Event& Event)" ); writeln!(output, " {{"); writeln!(output, " return Event.GetAsReducer();"); @@ -1725,14 +1851,17 @@ fn generate_context_structs(output: &mut UnrealCppAutogen, module: &ModuleDef, a // FEventContext, FReducerEventContext, FErrorContext, FSubscriptionEventContext writeln!(output); writeln!(output, "USTRUCT(BlueprintType)"); - writeln!(output, "struct {api_macro} FEventContext : public FContextBase"); + writeln!( + output, + "struct {api_macro} F{module_prefix}EventContext : public F{module_prefix}ContextBase" + ); writeln!(output, "{{"); writeln!(output, "\tGENERATED_BODY()"); writeln!(output); - writeln!(output, "\tFEventContext() = default;"); + writeln!(output, "\tF{module_prefix}EventContext() = default;"); writeln!( output, - "\tFEventContext(UDbConnection* InConn, const F{module_name}Event& InEvent) : FContextBase(InConn), Event(InEvent) {{}}" + "\tF{module_prefix}EventContext(U{module_prefix}DbConnection* InConn, const F{module_name}Event& InEvent) : F{module_prefix}ContextBase(InConn), Event(InEvent) {{}}" ); writeln!(output); writeln!(output, "\tUPROPERTY(BlueprintReadOnly, Category=\"SpacetimeDB\")"); @@ -1742,12 +1871,15 @@ fn generate_context_structs(output: &mut UnrealCppAutogen, module: &ModuleDef, a // FReducerEventContext writeln!(output, "USTRUCT(BlueprintType)"); - writeln!(output, "struct {api_macro} FReducerEventContext : public FContextBase"); + writeln!( + output, + "struct {api_macro} F{module_prefix}ReducerEventContext : public F{module_prefix}ContextBase" + ); writeln!(output, "{{"); writeln!(output, "\tGENERATED_BODY()"); writeln!(output); - writeln!(output, "\tFReducerEventContext() = default;"); - writeln!(output, "\tFReducerEventContext(UDbConnection* InConn, F{module_name}ReducerEvent InEvent) : FContextBase(InConn), Event(InEvent) {{}}"); + writeln!(output, "\tF{module_prefix}ReducerEventContext() = default;"); + writeln!(output, "\tF{module_prefix}ReducerEventContext(U{module_prefix}DbConnection* InConn, F{module_name}ReducerEvent InEvent) : F{module_prefix}ContextBase(InConn), Event(InEvent) {{}}"); writeln!(output, "\t"); writeln!(output, "\tUPROPERTY(BlueprintReadOnly, Category=\"SpacetimeDB\") "); writeln!(output, "\tF{module_name}ReducerEvent Event;"); @@ -1758,13 +1890,13 @@ fn generate_context_structs(output: &mut UnrealCppAutogen, module: &ModuleDef, a writeln!(output, "USTRUCT(BlueprintType)"); writeln!( output, - "struct {api_macro} FProcedureEventContext : public FContextBase" + "struct {api_macro} F{module_prefix}ProcedureEventContext : public F{module_prefix}ContextBase" ); writeln!(output, "{{"); writeln!(output, "\tGENERATED_BODY()"); writeln!(output); - writeln!(output, "\tFProcedureEventContext() = default;"); - writeln!(output, "\tFProcedureEventContext(UDbConnection* InConn, F{module_name}ProcedureEvent InEvent) : FContextBase(InConn), Event(InEvent) {{}}"); + writeln!(output, "\tF{module_prefix}ProcedureEventContext() = default;"); + writeln!(output, "\tF{module_prefix}ProcedureEventContext(U{module_prefix}DbConnection* InConn, F{module_name}ProcedureEvent InEvent) : F{module_prefix}ContextBase(InConn), Event(InEvent) {{}}"); writeln!(output, "\t"); writeln!(output, "\tUPROPERTY(BlueprintReadOnly, Category=\"SpacetimeDB\") "); writeln!(output, "\tF{module_name}ProcedureEvent Event;"); @@ -1773,14 +1905,17 @@ fn generate_context_structs(output: &mut UnrealCppAutogen, module: &ModuleDef, a // FErrorContext writeln!(output, "USTRUCT(BlueprintType)"); - writeln!(output, "struct {api_macro} FErrorContext : public FContextBase"); + writeln!( + output, + "struct {api_macro} F{module_prefix}ErrorContext : public F{module_prefix}ContextBase" + ); writeln!(output, "{{"); writeln!(output, "\tGENERATED_BODY()"); writeln!(output); - writeln!(output, "\tFErrorContext() = default;"); + writeln!(output, "\tF{module_prefix}ErrorContext() = default;"); writeln!( output, - "\tFErrorContext(UDbConnection* InConn, const FString& InError) : FContextBase(InConn), Error(InError) {{}}" + "\tF{module_prefix}ErrorContext(U{module_prefix}DbConnection* InConn, const FString& InError) : F{module_prefix}ContextBase(InConn), Error(InError) {{}}" ); writeln!(output); writeln!(output, "\tUPROPERTY(BlueprintReadOnly, Category=\"SpacetimeDB\")"); @@ -1793,36 +1928,42 @@ fn generate_context_structs(output: &mut UnrealCppAutogen, module: &ModuleDef, a writeln!(output, "USTRUCT(BlueprintType)"); writeln!( output, - "struct {api_macro} FSubscriptionEventContext : public FContextBase" + "struct {api_macro} F{module_prefix}SubscriptionEventContext : public F{module_prefix}ContextBase" ); writeln!(output, "{{"); writeln!(output, "\tGENERATED_BODY()"); writeln!(output); - writeln!(output, "\tFSubscriptionEventContext() = default;"); + writeln!(output, "\tF{module_prefix}SubscriptionEventContext() = default;"); writeln!( output, - "\tFSubscriptionEventContext(UDbConnection* InConn) : FContextBase(InConn) {{}}" + "\tF{module_prefix}SubscriptionEventContext(U{module_prefix}DbConnection* InConn) : F{module_prefix}ContextBase(InConn) {{}}" ); writeln!(output); writeln!(output, "}};"); writeln!(output); writeln!(output, "DECLARE_DYNAMIC_DELEGATE_OneParam("); - writeln!(output, "\tFOnSubscriptionApplied,"); - writeln!(output, "\tFSubscriptionEventContext, Context);"); + writeln!(output, "\tF{module_prefix}OnSubscriptionApplied,"); + writeln!(output, "\tF{module_prefix}SubscriptionEventContext, Context);"); writeln!(output); writeln!(output, "DECLARE_DYNAMIC_DELEGATE_OneParam("); - writeln!(output, "\tFOnSubscriptionError,"); - writeln!(output, "\tFErrorContext, Context);"); + writeln!(output, "\tF{module_prefix}OnSubscriptionError,"); + writeln!(output, "\tF{module_prefix}ErrorContext, Context);"); writeln!(output); } -fn generate_reducer_bindings(output: &mut UnrealCppAutogen, module: &ModuleDef, api_macro: &str, module_name: &str) { +fn generate_reducer_bindings( + output: &mut UnrealCppAutogen, + module_prefix: &str, + module: &ModuleDef, + api_macro: &str, + module_name: &str, +) { let reducer_count: usize = iter_reducers(module).count(); // --------------------------------------------------------------------- // Per-module typed Reducer tagged union + typed Event // --------------------------------------------------------------------- writeln!(output, "UENUM(BlueprintType, Category = \"SpacetimeDB\")"); - writeln!(output, "enum class EReducerTag : uint8"); + writeln!(output, "enum class E{module_prefix}ReducerTag : uint8"); writeln!(output, "{{"); { let mut first = true; @@ -1846,19 +1987,22 @@ fn generate_reducer_bindings(output: &mut UnrealCppAutogen, module: &ModuleDef, // FReducer: tagged union over reducer args, with optional metadata writeln!(output, "USTRUCT(BlueprintType)"); - writeln!(output, "struct {api_macro} FReducer"); + writeln!(output, "struct {api_macro} F{module_prefix}Reducer"); writeln!(output, "{{"); writeln!(output, " GENERATED_BODY()"); writeln!(output); writeln!(output, "public:"); writeln!(output, " UPROPERTY(BlueprintReadOnly, Category = \"SpacetimeDB\")"); - writeln!(output, " EReducerTag Tag = static_cast(0);"); + writeln!( + output, + " E{module_prefix}ReducerTag Tag = static_cast(0);" + ); writeln!(output); write!(output, " TVariant<"); { let mut first = true; for reducer in iter_reducers(module) { - let reducer_pascal = reducer.name.deref().to_case(Case::Pascal); + let reducer_pascal = format!("{module_prefix}{}", reducer.name.deref().to_case(Case::Pascal)); if !first { write!(output, ", "); } else { @@ -1881,14 +2025,15 @@ fn generate_reducer_bindings(output: &mut UnrealCppAutogen, module: &ModuleDef, // Static constructors, Is*, GetAs* for reducer in iter_reducers(module) { - let reducer_pascal = reducer.name.deref().to_case(Case::Pascal); + let reducer_name = reducer.name.deref().to_case(Case::Pascal); + let reducer_pascal = format!("{module_prefix}{reducer_name}"); writeln!( output, - " static FReducer {reducer_pascal}(const F{reducer_pascal}Args& Value)" + " static F{module_prefix}Reducer {reducer_name}(const F{reducer_pascal}Args& Value)" ); writeln!(output, " {{"); - writeln!(output, " FReducer Out;"); - writeln!(output, " Out.Tag = EReducerTag::{reducer_pascal};"); + writeln!(output, " F{module_prefix}Reducer Out;"); + writeln!(output, " Out.Tag = E{module_prefix}ReducerTag::{reducer_name};"); writeln!(output, " Out.Data.Set(Value);"); writeln!(output, " Out.ReducerName = TEXT(\"{}\");", reducer.name.deref()); writeln!(output, " return Out;"); @@ -1896,36 +2041,39 @@ fn generate_reducer_bindings(output: &mut UnrealCppAutogen, module: &ModuleDef, writeln!(output); writeln!( output, - " FORCEINLINE bool Is{reducer_pascal}() const {{ return Tag == EReducerTag::{reducer_pascal}; }}" + " FORCEINLINE bool Is{reducer_name}() const {{ return Tag == E{module_prefix}ReducerTag::{reducer_name}; }}" ); writeln!( output, - " FORCEINLINE F{reducer_pascal}Args GetAs{reducer_pascal}() const" + " FORCEINLINE F{reducer_pascal}Args GetAs{reducer_name}() const" ); writeln!(output, " {{"); writeln!( output, - " ensureMsgf(Is{reducer_pascal}(), TEXT(\"Reducer does not hold {reducer_pascal}!\"));" + " ensureMsgf(Is{reducer_name}(), TEXT(\"Reducer does not hold {reducer_name}!\"));" ); writeln!(output, " return Data.Get();"); writeln!(output, " }}"); writeln!(output); } - writeln!(output, " FORCEINLINE bool operator==(const FReducer& Other) const"); + writeln!( + output, + " FORCEINLINE bool operator==(const F{module_prefix}Reducer& Other) const" + ); writeln!(output, " {{"); writeln!(output, " if (Tag != Other.Tag || ReducerId != Other.ReducerId || RequestId != Other.RequestId || ReducerName != Other.ReducerName) return false;"); writeln!(output, " switch (Tag)"); writeln!(output, " {{"); for reducer in iter_reducers(module) { - let reducer_pascal = reducer.name.deref().to_case(Case::Pascal); - writeln!(output, " case EReducerTag::{reducer_pascal}:"); + let reducer_name = reducer.name.deref().to_case(Case::Pascal); + writeln!(output, " case E{module_prefix}ReducerTag::{reducer_name}:"); writeln!( output, - " return GetAs{reducer_pascal}() == Other.GetAs{reducer_pascal}();" + " return GetAs{reducer_name}() == Other.GetAs{reducer_name}();" ); } if reducer_count == 0 { - writeln!(output, " case EReducerTag::None:"); + writeln!(output, " case E{module_prefix}ReducerTag::None:"); writeln!(output, " return true;"); } @@ -1934,7 +2082,7 @@ fn generate_reducer_bindings(output: &mut UnrealCppAutogen, module: &ModuleDef, writeln!(output, " }}"); writeln!( output, - " FORCEINLINE bool operator!=(const FReducer& Other) const {{ return !(*this == Other); }}" + " FORCEINLINE bool operator!=(const F{module_prefix}Reducer& Other) const {{ return !(*this == Other); }}" ); writeln!(output, "}};"); writeln!(output); @@ -1943,7 +2091,7 @@ fn generate_reducer_bindings(output: &mut UnrealCppAutogen, module: &ModuleDef, writeln!(output, "UCLASS()"); writeln!( output, - "class {api_macro} UReducerBpLib : public UBlueprintFunctionLibrary" + "class {api_macro} U{module_prefix}ReducerBpLib : public UBlueprintFunctionLibrary" ); writeln!(output, "{{"); writeln!(output, " GENERATED_BODY()"); @@ -1951,7 +2099,8 @@ fn generate_reducer_bindings(output: &mut UnrealCppAutogen, module: &ModuleDef, writeln!(output, "private:"); for reducer in iter_reducers(module) { - let reducer_pascal = reducer.name.deref().to_case(Case::Pascal); + let reducer_name = reducer.name.deref().to_case(Case::Pascal); + let reducer_pascal = format!("{module_prefix}{reducer_name}"); // ---- Static constructors ---- writeln!(output); writeln!( @@ -1960,9 +2109,9 @@ fn generate_reducer_bindings(output: &mut UnrealCppAutogen, module: &ModuleDef, ); writeln!( output, - " static FReducer {reducer_pascal}(const F{reducer_pascal}Args& Value) {{" + " static F{module_prefix}Reducer {reducer_name}(const F{reducer_pascal}Args& Value) {{" ); - writeln!(output, " return FReducer::{reducer_pascal}(Value);"); + writeln!(output, " return F{module_prefix}Reducer::{reducer_name}(Value);"); writeln!(output, " }}"); writeln!(output); @@ -1973,7 +2122,7 @@ fn generate_reducer_bindings(output: &mut UnrealCppAutogen, module: &ModuleDef, ); writeln!( output, - " static bool Is{reducer_pascal}(const FReducer& Reducer) {{ return Reducer.Is{reducer_pascal}(); }}" + " static bool Is{reducer_name}(const F{module_prefix}Reducer& Reducer) {{ return Reducer.Is{reducer_name}(); }}" ); writeln!(output); @@ -1984,9 +2133,9 @@ fn generate_reducer_bindings(output: &mut UnrealCppAutogen, module: &ModuleDef, ); writeln!( output, - " static F{reducer_pascal}Args GetAs{reducer_pascal}(const FReducer& Reducer) {{" + " static F{reducer_pascal}Args GetAs{reducer_name}(const F{module_prefix}Reducer& Reducer) {{" ); - writeln!(output, " return Reducer.GetAs{reducer_pascal}();"); + writeln!(output, " return Reducer.GetAs{reducer_name}();"); writeln!(output, " }}"); } @@ -2046,7 +2195,7 @@ fn generate_reducer_bindings(output: &mut UnrealCppAutogen, module: &ModuleDef, output, "\tUPROPERTY(EditAnywhere, BlueprintReadWrite, Category=\"SpacetimeDB\")" ); - writeln!(output, "\tFReducer Reducer;"); + writeln!(output, "\tF{module_prefix}Reducer Reducer;"); writeln!(output); writeln!( @@ -2074,14 +2223,20 @@ fn generate_reducer_bindings(output: &mut UnrealCppAutogen, module: &ModuleDef, writeln!(output); } -fn generate_procedure_bindings(output: &mut UnrealCppAutogen, module: &ModuleDef, api_macro: &str, module_name: &str) { +fn generate_procedure_bindings( + output: &mut UnrealCppAutogen, + module_prefix: &str, + module: &ModuleDef, + api_macro: &str, + module_name: &str, +) { let procedure_count: usize = iter_procedures(module).count(); if procedure_count > 0 { // --------------------------------------------------------------------- // Per-module typed Procedure tagged union + typed Event // --------------------------------------------------------------------- writeln!(output, "UENUM(BlueprintType, Category = \"SpacetimeDB\")"); - writeln!(output, "enum class EProcedureTag : uint8"); + writeln!(output, "enum class E{module_prefix}ProcedureTag : uint8"); writeln!(output, "{{"); { let mut first = true; @@ -2101,19 +2256,22 @@ fn generate_procedure_bindings(output: &mut UnrealCppAutogen, module: &ModuleDef // FProcedure: tagged union over procedure args, with optional metadata writeln!(output, "USTRUCT(BlueprintType)"); - writeln!(output, "struct {api_macro} FProcedure"); + writeln!(output, "struct {api_macro} F{module_prefix}Procedure"); writeln!(output, "{{"); writeln!(output, " GENERATED_BODY()"); writeln!(output); writeln!(output, "public:"); writeln!(output, " UPROPERTY(BlueprintReadOnly, Category = \"SpacetimeDB\")"); - writeln!(output, " EProcedureTag Tag = static_cast(0);"); + writeln!( + output, + " E{module_prefix}ProcedureTag Tag = static_cast(0);" + ); writeln!(output); write!(output, " TVariant<"); { let mut first = true; for procedure in iter_procedures(module) { - let procedure_pascal = procedure.name.deref().to_case(Case::Pascal); + let procedure_pascal = format!("{module_prefix}{}", procedure.name.deref().to_case(Case::Pascal)); if !first { write!(output, ", "); } else { @@ -2133,14 +2291,18 @@ fn generate_procedure_bindings(output: &mut UnrealCppAutogen, module: &ModuleDef // Static constructors, Is*, GetAs* for procedure in iter_procedures(module) { - let procedure_pascal = procedure.name.deref().to_case(Case::Pascal); + let procedure_name = procedure.name.deref().to_case(Case::Pascal); + let procedure_pascal = format!("{module_prefix}{procedure_name}"); writeln!( output, - " static FProcedure {procedure_pascal}(const F{procedure_pascal}Args& Value)" + " static F{module_prefix}Procedure {procedure_name}(const F{procedure_pascal}Args& Value)" ); writeln!(output, " {{"); - writeln!(output, " FProcedure Out;"); - writeln!(output, " Out.Tag = EProcedureTag::{procedure_pascal};"); + writeln!(output, " F{module_prefix}Procedure Out;"); + writeln!( + output, + " Out.Tag = E{module_prefix}ProcedureTag::{procedure_name};" + ); writeln!(output, " Out.Data.Set(Value);"); writeln!( output, @@ -2152,32 +2314,35 @@ fn generate_procedure_bindings(output: &mut UnrealCppAutogen, module: &ModuleDef writeln!(output); writeln!( output, - " FORCEINLINE bool Is{procedure_pascal}() const {{ return Tag == EProcedureTag::{procedure_pascal}; }}" + " FORCEINLINE bool Is{procedure_name}() const {{ return Tag == E{module_prefix}ProcedureTag::{procedure_name}; }}" ); writeln!( output, - " FORCEINLINE F{procedure_pascal}Args GetAs{procedure_pascal}() const" + " FORCEINLINE F{procedure_pascal}Args GetAs{procedure_name}() const" ); writeln!(output, " {{"); writeln!( output, - " ensureMsgf(Is{procedure_pascal}(), TEXT(\"Procedure does not hold {procedure_pascal}!\"));" + " ensureMsgf(Is{procedure_name}(), TEXT(\"Procedure does not hold {procedure_name}!\"));" ); writeln!(output, " return Data.Get();"); writeln!(output, " }}"); writeln!(output); } - writeln!(output, " FORCEINLINE bool operator==(const FProcedure& Other) const"); + writeln!( + output, + " FORCEINLINE bool operator==(const F{module_prefix}Procedure& Other) const" + ); writeln!(output, " {{"); writeln!(output, " if (Tag != Other.Tag || ProcedureId != Other.ProcedureId || RequestId != Other.RequestId || ProcedureName != Other.ProcedureName) return false;"); writeln!(output, " switch (Tag)"); writeln!(output, " {{"); for procedure in iter_procedures(module) { - let procedure_pascal = procedure.name.deref().to_case(Case::Pascal); - writeln!(output, " case EProcedureTag::{procedure_pascal}:"); + let procedure_name = procedure.name.deref().to_case(Case::Pascal); + writeln!(output, " case E{module_prefix}ProcedureTag::{procedure_name}:"); writeln!( output, - " return GetAs{procedure_pascal}() == Other.GetAs{procedure_pascal}();" + " return GetAs{procedure_name}() == Other.GetAs{procedure_name}();" ); } writeln!(output, " default: return false;"); @@ -2185,7 +2350,7 @@ fn generate_procedure_bindings(output: &mut UnrealCppAutogen, module: &ModuleDef writeln!(output, " }}"); writeln!( output, - " FORCEINLINE bool operator!=(const FProcedure& Other) const {{ return !(*this == Other); }}" + " FORCEINLINE bool operator!=(const F{module_prefix}Procedure& Other) const {{ return !(*this == Other); }}" ); writeln!(output, "}};"); writeln!(output); @@ -2194,7 +2359,7 @@ fn generate_procedure_bindings(output: &mut UnrealCppAutogen, module: &ModuleDef writeln!(output, "UCLASS()"); writeln!( output, - "class {api_macro} UProcedureBpLib : public UBlueprintFunctionLibrary" + "class {api_macro} U{module_prefix}ProcedureBpLib : public UBlueprintFunctionLibrary" ); writeln!(output, "{{"); writeln!(output, " GENERATED_BODY()"); @@ -2202,7 +2367,8 @@ fn generate_procedure_bindings(output: &mut UnrealCppAutogen, module: &ModuleDef writeln!(output, "private:"); for procedure in iter_procedures(module) { - let procedure_pascal = procedure.name.deref().to_case(Case::Pascal); + let procedure_name = procedure.name.deref().to_case(Case::Pascal); + let procedure_pascal = format!("{module_prefix}{procedure_name}"); // ---- Static constructors ---- writeln!(output); writeln!( @@ -2211,9 +2377,12 @@ fn generate_procedure_bindings(output: &mut UnrealCppAutogen, module: &ModuleDef ); writeln!( output, - " static FProcedure {procedure_pascal}(const F{procedure_pascal}Args& Value) {{" + " static F{module_prefix}Procedure {procedure_name}(const F{procedure_pascal}Args& Value) {{" + ); + writeln!( + output, + " return F{module_prefix}Procedure::{procedure_name}(Value);" ); - writeln!(output, " return FProcedure::{procedure_pascal}(Value);"); writeln!(output, " }}"); writeln!(output); @@ -2224,7 +2393,7 @@ fn generate_procedure_bindings(output: &mut UnrealCppAutogen, module: &ModuleDef ); writeln!( output, - " static bool Is{procedure_pascal}(const FProcedure& Procedure) {{ return Procedure.Is{procedure_pascal}(); }}" + " static bool Is{procedure_name}(const F{module_prefix}Procedure& Procedure) {{ return Procedure.Is{procedure_name}(); }}" ); writeln!(output); @@ -2235,9 +2404,9 @@ fn generate_procedure_bindings(output: &mut UnrealCppAutogen, module: &ModuleDef ); writeln!( output, - " static F{procedure_pascal}Args GetAs{procedure_pascal}(const FProcedure& Procedure) {{" + " static F{procedure_pascal}Args GetAs{procedure_name}(const F{module_prefix}Procedure& Procedure) {{" ); - writeln!(output, " return Procedure.GetAs{procedure_pascal}();"); + writeln!(output, " return Procedure.GetAs{procedure_name}();"); writeln!(output, " }}"); } @@ -2319,10 +2488,18 @@ fn generate_procedure_bindings(output: &mut UnrealCppAutogen, module: &ModuleDef writeln!(output); } -fn generate_remote_tables_class(output: &mut UnrealCppAutogen, module: &ModuleDef, api_macro: &str) { +fn generate_remote_tables_class( + output: &mut UnrealCppAutogen, + module_prefix: &str, + module: &ModuleDef, + api_macro: &str, +) { writeln!(output, "// RemoteTables class"); writeln!(output, "UCLASS(BlueprintType)"); - writeln!(output, "class {api_macro} URemoteTables : public UObject"); + writeln!( + output, + "class {api_macro} U{module_prefix}RemoteTables : public UObject" + ); writeln!(output, "{{"); writeln!(output, " GENERATED_BODY()"); writeln!(output); @@ -2335,7 +2512,8 @@ fn generate_remote_tables_class(output: &mut UnrealCppAutogen, module: &ModuleDe writeln!(output, " UPROPERTY(BlueprintReadOnly, Category=\"SpacetimeDB\")"); writeln!( output, - " U{}Table* {};", + " U{}{}Table* {};", + module_prefix, table_name.deref().to_case(Case::Pascal), table_name.deref().to_case(Case::Pascal) ); @@ -2348,13 +2526,17 @@ fn generate_remote_tables_class(output: &mut UnrealCppAutogen, module: &ModuleDe fn generate_remote_reducers_class( output: &mut UnrealCppAutogen, + module_prefix: &str, module: &ModuleDef, api_macro: &str, module_name: &str, ) { writeln!(output, "// RemoteReducers class"); writeln!(output, "UCLASS(BlueprintType)"); - writeln!(output, "class {api_macro} URemoteReducers : public UObject"); + writeln!( + output, + "class {api_macro} U{module_prefix}RemoteReducers : public UObject" + ); writeln!(output, "{{"); writeln!(output, " GENERATED_BODY()"); writeln!(output); @@ -2363,7 +2545,8 @@ fn generate_remote_reducers_class( // Generate reducer events and call methods for reducer in iter_reducers(module) { - let reducer_pascal = reducer.name.deref().to_case(Case::Pascal); + let reducer_name = reducer.name.deref().to_case(Case::Pascal); + let reducer_pascal = format!("{module_prefix}{reducer_name}"); // Generate delegate for reducer event let param_count = reducer.params_for_generate.elements.len() + 1; // +1 for context @@ -2376,7 +2559,7 @@ fn generate_remote_reducers_class( // For more than 9 params, use a struct to wrap the arguments writeln!(output, " DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams("); writeln!(output, " F{reducer_pascal}Handler,"); - writeln!(output, " const FReducerEventContext&, Context,"); + writeln!(output, " const F{module_prefix}ReducerEventContext&, Context,"); writeln!(output, " const F{reducer_pascal}Args&, Args"); writeln!(output, " );"); @@ -2388,7 +2571,7 @@ fn generate_remote_reducers_class( // But functions still need to check individual parameters for (_, param_type) in &reducer.params_for_generate.elements { if !is_type_blueprintable_for_delegates(module, param_type) { - let type_str = cpp_ty_fmt_with_module(module, param_type, module_name).to_string(); + let type_str = cpp_ty_fmt_with_module(module_prefix, module, param_type, module_name).to_string(); non_blueprintable_types_for_function.push(type_str); } } @@ -2409,12 +2592,13 @@ fn generate_remote_reducers_class( write!( output, - " {delegate_macro}(\n F{reducer_pascal}Handler,\n const FReducerEventContext&, Context" + " {delegate_macro}(\n F{reducer_pascal}Handler,\n const F{module_prefix}ReducerEventContext&, Context" ); for (param_name, param_type) in &reducer.params_for_generate.elements { // Use Blueprint-compatible types for delegates - let type_str = cpp_ty_fmt_blueprint_compatible(module, param_type, module_name).to_string(); + let type_str = + cpp_ty_fmt_blueprint_compatible(module_prefix, module, param_type, module_name).to_string(); // Collect non-blueprintable types for both delegate and function if !is_type_blueprintable_for_delegates(module, param_type) { @@ -2452,21 +2636,21 @@ fn generate_remote_reducers_class( " // NOTE: Not exposed to Blueprint because {types_str} types are not Blueprint-compatible" ); } - writeln!(output, " F{reducer_pascal}Handler On{reducer_pascal};"); + writeln!(output, " F{reducer_pascal}Handler On{reducer_name};"); writeln!(output); // Generate call method if non_blueprintable_types_for_function.is_empty() { write!( output, - " UFUNCTION(BlueprintCallable, Category=\"SpacetimeDB\")\n void {reducer_pascal}(" + " UFUNCTION(BlueprintCallable, Category=\"SpacetimeDB\")\n void {reducer_name}(" ); } else { // Generate specific message about which types are not Blueprint-compatible let types_str = non_blueprintable_types_for_function.join(", "); write!( output, - " // NOTE: Not exposed to Blueprint because {types_str} types are not Blueprint-compatible\n void {reducer_pascal}(" + " // NOTE: Not exposed to Blueprint because {types_str} types are not Blueprint-compatible\n void {reducer_name}(" ); } @@ -2479,9 +2663,9 @@ fn generate_remote_reducers_class( // For UFUNCTION parameters, use Blueprint-compatible types let type_str = if non_blueprintable_types_for_function.is_empty() { - cpp_ty_fmt_blueprint_compatible(module, param_type, module_name).to_string() + cpp_ty_fmt_blueprint_compatible(module_prefix, module, param_type, module_name).to_string() } else { - cpp_ty_fmt_with_module(module, param_type, module_name).to_string() + cpp_ty_fmt_with_module(module_prefix, module, param_type, module_name).to_string() }; if should_pass_by_value_in_delegate(module, param_type) { @@ -2508,7 +2692,7 @@ fn generate_remote_reducers_class( // Generate invoke method write!( output, - " bool Invoke{reducer_pascal}(const FReducerEventContext& Context, const U{reducer_pascal}Reducer* Args);" + " bool Invoke{reducer_name}(const F{module_prefix}ReducerEventContext& Context, const U{reducer_pascal}Reducer* Args);" ); writeln!(output); writeln!(output); @@ -2516,22 +2700,22 @@ fn generate_remote_reducers_class( // Internal error handling writeln!(output, " // Internal error handling"); - writeln!(output, " DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FInternalOnUnhandledReducerError, const FReducerEventContext&, Context, const FString&, Error);"); + writeln!(output, " DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(F{module_prefix}InternalOnUnhandledReducerError, const F{module_prefix}ReducerEventContext&, Context, const FString&, Error);"); writeln!( output, - " FInternalOnUnhandledReducerError InternalOnUnhandledReducerError;" + " F{module_prefix}InternalOnUnhandledReducerError InternalOnUnhandledReducerError;" ); writeln!(output); writeln!(output, "private:"); writeln!(output); - writeln!(output, " friend UDbConnection;"); + writeln!(output, " friend U{module_prefix}DbConnection;"); writeln!(output); writeln!(output, " UPROPERTY()"); - writeln!(output, " class UDbConnection* Conn;"); + writeln!(output, " class U{module_prefix}DbConnection* Conn;"); writeln!(output); writeln!(output, " UPROPERTY()"); - writeln!(output, " USetReducerFlags* SetCallReducerFlags;"); + writeln!(output, " U{module_prefix}SetReducerFlags* SetCallReducerFlags;"); writeln!(output, "}};"); writeln!(output); } @@ -2541,15 +2725,16 @@ fn generate_remote_procedures_class( module: &ModuleDef, api_macro: &str, module_name: &str, + module_prefix: &str, ) { for procedure in iter_procedures(module) { - let procedure_pascal = procedure.name.deref().to_case(Case::Pascal); + let procedure_name = procedure.name.deref().to_case(Case::Pascal); let blueprintable_type_for_return = is_type_blueprintable_for_delegates(module, &procedure.return_type_for_generate); // In generate_remote_procedures_class, before the existing event delegate generation: let return_type_str = - cpp_ty_fmt_with_module(module, &procedure.return_type_for_generate, module_name).to_string(); + cpp_ty_fmt_with_module(module_prefix, module, &procedure.return_type_for_generate, module_name).to_string(); let return_type_ref = if return_type_str.starts_with('F') && return_type_str != "FSpacetimeDBUnit" { format!("const {}&", return_type_str) } else { @@ -2559,19 +2744,22 @@ fn generate_remote_procedures_class( if !blueprintable_type_for_return { writeln!( output, - "// NOTE: Procedure {procedure_pascal} has non-Blueprint-compatible return type: {return_type_str}" + "// NOTE: Procedure {procedure_name} has non-Blueprint-compatible return type: {return_type_str}" + ); + writeln!( + output, + "DECLARE_DELEGATE_ThreeParams(F{module_prefix}On{procedure_name}Complete," ); - writeln!(output, "DECLARE_DELEGATE_ThreeParams(FOn{procedure_pascal}Complete,"); - writeln!(output, " const FProcedureEventContext&, /*Context*/"); + writeln!(output, " const F{module_prefix}ProcedureEventContext&, /*Context*/"); writeln!(output, " {return_type_ref}, /*Result,*/"); writeln!(output, " bool /*bSuccess*/);"); writeln!(output); } else { writeln!( output, - "DECLARE_DYNAMIC_DELEGATE_ThreeParams(FOn{procedure_pascal}Complete," + "DECLARE_DYNAMIC_DELEGATE_ThreeParams(F{module_prefix}On{procedure_name}Complete," ); - writeln!(output, " const FProcedureEventContext&, Context,"); + writeln!(output, " const F{module_prefix}ProcedureEventContext&, Context,"); writeln!(output, " {}, Result,", return_type_ref); writeln!(output, " bool, bSuccess);"); writeln!(output); @@ -2580,7 +2768,10 @@ fn generate_remote_procedures_class( writeln!(output, "// RemoteProcedures class"); writeln!(output, "UCLASS(BlueprintType)"); - writeln!(output, "class {api_macro} URemoteProcedures : public UObject"); + writeln!( + output, + "class {api_macro} U{module_prefix}RemoteProcedures : public UObject" + ); writeln!(output, "{{"); writeln!(output, " GENERATED_BODY()"); writeln!(output); @@ -2589,13 +2780,13 @@ fn generate_remote_procedures_class( // Generate procedure events and call methods for procedure in iter_procedures(module) { - let procedure_pascal = procedure.name.deref().to_case(Case::Pascal); + let procedure_name = procedure.name.deref().to_case(Case::Pascal); let mut non_blueprintable_types_for_function = Vec::new(); for (_, param_type) in &procedure.params_for_generate.elements { if !is_type_blueprintable_for_delegates(module, param_type) { - let type_str = cpp_ty_fmt_with_module(module, param_type, module_name).to_string(); + let type_str = cpp_ty_fmt_with_module(module_prefix, module, param_type, module_name).to_string(); non_blueprintable_types_for_function.push(type_str); } } @@ -2606,14 +2797,14 @@ fn generate_remote_procedures_class( if non_blueprintable_types_for_function.is_empty() && blueprintable_type_for_return { write!( output, - " UFUNCTION(BlueprintCallable, Category=\"SpacetimeDB\")\n void {procedure_pascal}(" + " UFUNCTION(BlueprintCallable, Category=\"SpacetimeDB\")\n void {procedure_name}(" ); } else { // Generate specific message about which types are not Blueprint-compatible let types_str = non_blueprintable_types_for_function.join(", "); write!( output, - " // NOTE: Not exposed to Blueprint because return type or {types_str} types are not Blueprint-compatible\n void {procedure_pascal}(" + " // NOTE: Not exposed to Blueprint because return type or {types_str} types are not Blueprint-compatible\n void {procedure_name}(" ); } @@ -2626,9 +2817,9 @@ fn generate_remote_procedures_class( // For UFUNCTION parameters, use Blueprint-compatible types let type_str = if non_blueprintable_types_for_function.is_empty() { - cpp_ty_fmt_blueprint_compatible(module, param_type, module_name).to_string() + cpp_ty_fmt_blueprint_compatible(module_prefix, module, param_type, module_name).to_string() } else { - cpp_ty_fmt_with_module(module, param_type, module_name).to_string() + cpp_ty_fmt_with_module(module_prefix, module, param_type, module_name).to_string() }; if should_pass_by_value_in_delegate(module, param_type) { @@ -2652,7 +2843,7 @@ fn generate_remote_procedures_class( if !first { write!(output, ", "); } - writeln!(output, "FOn{}Complete Callback);", procedure_pascal); + writeln!(output, "F{module_prefix}On{}Complete Callback);", procedure_name); writeln!(output); writeln!(output); @@ -2660,7 +2851,7 @@ fn generate_remote_procedures_class( // Internal error handling writeln!(output, " // Internal error handling"); - writeln!(output, " DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FInternalOnUnhandledProcedureError, const FProcedureEventContext&, Context, const FString&, Error);"); + writeln!(output, " DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FInternalOnUnhandledProcedureError, const F{module_prefix}ProcedureEventContext&, Context, const FString&, Error);"); writeln!( output, " FInternalOnUnhandledProcedureError InternalOnUnhandledProcedureError;" @@ -2669,20 +2860,20 @@ fn generate_remote_procedures_class( writeln!(output, "private:"); writeln!(output); - writeln!(output, " friend UDbConnection;"); + writeln!(output, " friend U{module_prefix}DbConnection;"); writeln!(output); writeln!(output, " UPROPERTY()"); - writeln!(output, " class UDbConnection* Conn;"); + writeln!(output, " class U{module_prefix}DbConnection* Conn;"); writeln!(output, "}};"); writeln!(output); } -fn generate_subscription_builder_class(output: &mut UnrealCppAutogen, api_macro: &str) { +fn generate_subscription_builder_class(output: &mut UnrealCppAutogen, module_prefix: &str, api_macro: &str) { writeln!(output, "// SubscriptionBuilder class"); writeln!(output, "UCLASS(BlueprintType)"); writeln!( output, - "class {api_macro} USubscriptionBuilder : public USubscriptionBuilderBase" + "class {api_macro} U{module_prefix}SubscriptionBuilder : public USubscriptionBuilderBase" ); writeln!(output, "{{"); writeln!(output, " GENERATED_BODY()"); @@ -2692,19 +2883,19 @@ fn generate_subscription_builder_class(output: &mut UnrealCppAutogen, api_macro: writeln!(output, " UFUNCTION(BlueprintCallable, Category = \"SpacetimeDB\")"); writeln!( output, - " USubscriptionBuilder* OnApplied(FOnSubscriptionApplied Callback);" + " U{module_prefix}SubscriptionBuilder* OnApplied(F{module_prefix}OnSubscriptionApplied Callback);" ); writeln!(output); writeln!(output, " UFUNCTION(BlueprintCallable, Category = \"SpacetimeDB\")"); writeln!( output, - " USubscriptionBuilder* OnError(FOnSubscriptionError Callback);" + " U{module_prefix}SubscriptionBuilder* OnError(F{module_prefix}OnSubscriptionError Callback);" ); writeln!(output); writeln!(output, " UFUNCTION(BlueprintCallable, Category=\"SpacetimeDB\")"); writeln!( output, - " USubscriptionHandle* Subscribe(const TArray& SQL);" + " U{module_prefix}SubscriptionHandle* Subscribe(const TArray& SQL);" ); writeln!(output); writeln!( @@ -2712,54 +2903,66 @@ fn generate_subscription_builder_class(output: &mut UnrealCppAutogen, api_macro: " /** Convenience for subscribing to all rows from all tables */" ); writeln!(output, " UFUNCTION(BlueprintCallable, Category = \"SpacetimeDB\")"); - writeln!(output, " USubscriptionHandle* SubscribeToAllTables();"); + writeln!( + output, + " U{module_prefix}SubscriptionHandle* SubscribeToAllTables();" + ); writeln!(output); writeln!(output); - writeln!(output, " friend class UDbConnection;"); + writeln!(output, " friend class U{module_prefix}DbConnection;"); writeln!(output, " friend class UDbConnectionBase;"); writeln!(output); writeln!(output, "protected:"); writeln!(output, " UPROPERTY()"); - writeln!(output, " class UDbConnection* Conn;"); + writeln!(output, " class U{module_prefix}DbConnection* Conn;"); writeln!(output); writeln!( output, " // Delegates stored so Subscribe() can bind forwarding callbacks" ); - writeln!(output, " FOnSubscriptionApplied OnAppliedDelegateInternal;"); - writeln!(output, " FOnSubscriptionError OnErrorDelegateInternal;"); + writeln!( + output, + " F{module_prefix}OnSubscriptionApplied OnAppliedDelegateInternal;" + ); + writeln!( + output, + " F{module_prefix}OnSubscriptionError OnErrorDelegateInternal;" + ); writeln!(output, "}};"); writeln!(output); } -fn generate_subscription_handle_class(output: &mut UnrealCppAutogen, api_macro: &str) { +fn generate_subscription_handle_class(output: &mut UnrealCppAutogen, module_prefix: &str, api_macro: &str) { writeln!(output, "// SubscriptionHandle class"); writeln!(output, "UCLASS(BlueprintType)"); writeln!( output, - "class {api_macro} USubscriptionHandle : public USubscriptionHandleBase" + "class {api_macro} U{module_prefix}SubscriptionHandle : public USubscriptionHandleBase" ); writeln!(output, "{{"); writeln!(output, " GENERATED_BODY()"); writeln!(output); writeln!(output, "public:"); writeln!(output); - writeln!(output, " USubscriptionHandle() {{}};"); + writeln!(output, " U{module_prefix}SubscriptionHandle() {{}};"); writeln!(output); - writeln!(output, " explicit USubscriptionHandle(UDbConnection* InConn);"); + writeln!( + output, + " explicit U{module_prefix}SubscriptionHandle(U{module_prefix}DbConnection* InConn);" + ); writeln!(output); - writeln!(output, " friend class USubscriptionBuilder;"); + writeln!(output, " friend class U{module_prefix}SubscriptionBuilder;"); writeln!(output); writeln!(output, "private:"); writeln!(output, " UPROPERTY()"); - writeln!(output, " class UDbConnection* Conn;"); + writeln!(output, " class U{module_prefix}DbConnection* Conn;"); writeln!(output); writeln!( output, " // Delegates that expose subscription events with connection aware contexts" ); - writeln!(output, " FOnSubscriptionApplied OnAppliedDelegate;"); - writeln!(output, " FOnSubscriptionError OnErrorDelegate;"); + writeln!(output, " F{module_prefix}OnSubscriptionApplied OnAppliedDelegate;"); + writeln!(output, " F{module_prefix}OnSubscriptionError OnErrorDelegate;"); writeln!(output); writeln!(output, " UFUNCTION()"); writeln!( @@ -2773,50 +2976,56 @@ fn generate_subscription_handle_class(output: &mut UnrealCppAutogen, api_macro: writeln!(output); } -fn generate_db_connection_builder_class(output: &mut UnrealCppAutogen, api_macro: &str) { +fn generate_db_connection_builder_class(output: &mut UnrealCppAutogen, module_prefix: &str, api_macro: &str) { writeln!(output, "/*"); writeln!(output, " @Note: Child class of UDbConnectionBuilderBase."); writeln!(output, "*/"); writeln!(output, "UCLASS(BlueprintType)"); writeln!( output, - "class {api_macro} UDbConnectionBuilder : public UDbConnectionBuilderBase" + "class {api_macro} U{module_prefix}DbConnectionBuilder : public UDbConnectionBuilderBase" ); writeln!(output, "{{"); writeln!(output, " GENERATED_BODY()"); writeln!(output, "public:"); writeln!(output); writeln!(output, " UFUNCTION(BlueprintCallable, Category = \"SpacetimeDB\")"); - writeln!(output, " UDbConnectionBuilder* WithUri(const FString& InUri);"); + writeln!( + output, + " U{module_prefix}DbConnectionBuilder* WithUri(const FString& InUri);" + ); writeln!(output, " UFUNCTION(BlueprintCallable, Category = \"SpacetimeDB\")"); writeln!( output, - " UDbConnectionBuilder* WithModuleName(const FString& InName);" + " U{module_prefix}DbConnectionBuilder* WithModuleName(const FString& InName);" ); writeln!(output, " UFUNCTION(BlueprintCallable, Category = \"SpacetimeDB\")"); - writeln!(output, " UDbConnectionBuilder* WithToken(const FString& InToken);"); + writeln!( + output, + " U{module_prefix}DbConnectionBuilder* WithToken(const FString& InToken);" + ); writeln!(output, " UFUNCTION(BlueprintCallable, Category = \"SpacetimeDB\")"); writeln!( output, - " UDbConnectionBuilder* WithCompression(const ESpacetimeDBCompression& InCompression);" + " U{module_prefix}DbConnectionBuilder* WithCompression(const ESpacetimeDBCompression& InCompression);" ); writeln!(output, " UFUNCTION(BlueprintCallable, Category = \"SpacetimeDB\")"); writeln!( output, - " UDbConnectionBuilder* OnConnect(FOnConnectDelegate Callback);" + " U{module_prefix}DbConnectionBuilder* OnConnect(F{module_prefix}OnConnectDelegate Callback);" ); writeln!(output, " UFUNCTION(BlueprintCallable, Category = \"SpacetimeDB\")"); writeln!( output, - " UDbConnectionBuilder* OnConnectError(FOnConnectErrorDelegate Callback);" + " U{module_prefix}DbConnectionBuilder* OnConnectError(FOnConnectErrorDelegate Callback);" ); writeln!(output, " UFUNCTION(BlueprintCallable, Category = \"SpacetimeDB\")"); writeln!( output, - " UDbConnectionBuilder* OnDisconnect(FOnDisconnectDelegate Callback);" + " U{module_prefix}DbConnectionBuilder* OnDisconnect(F{module_prefix}OnDisconnectDelegate Callback);" ); writeln!(output, " UFUNCTION(BlueprintCallable, Category = \"SpacetimeDB\")"); - writeln!(output, " UDbConnection* Build();"); + writeln!(output, " U{module_prefix}DbConnection* Build();"); writeln!(output); writeln!(output, "private:"); writeln!(output); @@ -2824,66 +3033,92 @@ fn generate_db_connection_builder_class(output: &mut UnrealCppAutogen, api_macro output, " // Stored delegates which will be forwarded when the connection events occur." ); - writeln!(output, " FOnConnectDelegate OnConnectDelegateInternal;"); - writeln!(output, " FOnDisconnectDelegate OnDisconnectDelegateInternal;"); + writeln!( + output, + " F{module_prefix}OnConnectDelegate OnConnectDelegateInternal;" + ); + writeln!( + output, + " F{module_prefix}OnDisconnectDelegate OnDisconnectDelegateInternal;" + ); writeln!(output, "}};"); writeln!(output); } -fn generate_db_connection_class(output: &mut UnrealCppAutogen, _module: &ModuleDef, api_macro: &str) { +fn generate_db_connection_class( + output: &mut UnrealCppAutogen, + module_prefix: &str, + _module: &ModuleDef, + api_macro: &str, + module_name: &str, +) { writeln!(output, "// Main DbConnection class"); writeln!(output, "UCLASS(BlueprintType)"); - writeln!(output, "class {api_macro} UDbConnection : public UDbConnectionBase"); + writeln!( + output, + "class {api_macro} U{module_prefix}DbConnection : public UDbConnectionBase" + ); writeln!(output, "{{"); writeln!(output, " GENERATED_BODY()"); writeln!(output); writeln!(output, "public:"); writeln!( output, - " explicit UDbConnection(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get());" + " explicit U{module_prefix}DbConnection(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get());" ); writeln!(output); writeln!(output); writeln!(output, " UPROPERTY(BlueprintReadOnly, Category=\"SpacetimeDB\")"); - writeln!(output, " URemoteTables* Db;"); + writeln!(output, " U{module_prefix}RemoteTables* Db;"); writeln!(output); writeln!(output, " UPROPERTY(BlueprintReadOnly, Category=\"SpacetimeDB\")"); - writeln!(output, " URemoteReducers* Reducers;"); + writeln!(output, " U{module_prefix}RemoteReducers* Reducers;"); writeln!(output); writeln!(output, " UPROPERTY(BlueprintReadOnly, Category=\"SpacetimeDB\")"); - writeln!(output, " USetReducerFlags* SetReducerFlags;"); + writeln!(output, " U{module_prefix}SetReducerFlags* SetReducerFlags;"); writeln!(output); writeln!(output, " UPROPERTY(BlueprintReadOnly, Category=\"SpacetimeDB\")"); - writeln!(output, " URemoteProcedures* Procedures;"); + writeln!(output, " U{module_prefix}RemoteProcedures* Procedures;"); writeln!(output); writeln!( output, " // Delegates that allow users to bind with the concrete connection type." ); - writeln!(output, " FOnConnectDelegate OnConnectDelegate;"); - writeln!(output, " FOnDisconnectDelegate OnDisconnectDelegate;"); + writeln!(output, " F{module_prefix}OnConnectDelegate OnConnectDelegate;"); + writeln!(output, " F{module_prefix}OnDisconnectDelegate OnDisconnectDelegate;"); writeln!(output); writeln!(output, " UFUNCTION(BlueprintCallable, Category=\"SpacetimeDB\")"); - writeln!(output, " USubscriptionBuilder* SubscriptionBuilder();"); + writeln!( + output, + " U{module_prefix}SubscriptionBuilder* SubscriptionBuilder();" + ); writeln!(output); writeln!(output, " /** Static entry point for constructing a connection. */"); writeln!( output, - " UFUNCTION(BlueprintCallable, Category = \"SpacetimeDB\", DisplayName = \"SpacetimeDB Builder\")" + " UFUNCTION(BlueprintCallable, Category = \"SpacetimeDB\", DisplayName = \"SpacetimeDB {module_name} Builder\")" ); - writeln!(output, " static UDbConnectionBuilder* Builder();"); + writeln!(output, " static U{module_prefix}DbConnectionBuilder* Builder();"); writeln!(output); writeln!(output, " // Error handling"); - writeln!(output, " DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnUnhandledReducerError, const FReducerEventContext&, Context, const FString&, Error);"); + writeln!(output, " DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(F{module_prefix}OnUnhandledReducerError, const F{module_prefix}ReducerEventContext&, Context, const FString&, Error);"); writeln!(output, " UPROPERTY(BlueprintAssignable, Category=\"SpacetimeDB\")"); - writeln!(output, " FOnUnhandledReducerError OnUnhandledReducerError;"); + writeln!( + output, + " F{module_prefix}OnUnhandledReducerError OnUnhandledReducerError;" + ); writeln!(output); writeln!(output, " // Error handling"); - writeln!(output, " DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnUnhandledProcedureError, const FProcedureEventContext&, Context, const FString&, Error);"); + writeln!(output, " DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(F{module_prefix}OnUnhandledProcedureError, const F{module_prefix}ProcedureEventContext&, Context, const FString&, Error);"); writeln!(output, " UPROPERTY(BlueprintAssignable, Category=\"SpacetimeDB\")"); - writeln!(output, " FOnUnhandledProcedureError OnUnhandledProcedureError;"); + writeln!( + output, + " F{module_prefix}OnUnhandledProcedureError OnUnhandledProcedureError;" + ); writeln!(output); writeln!(output); + writeln!(output, " friend U{module_prefix}SubscriptionBuilder;"); + writeln!(output, " friend U{module_prefix}DbConnectionBuilder;"); writeln!(output, "protected:"); writeln!(output); writeln!(output, " // Hook up error handling to reducers and procedures"); @@ -2900,13 +3135,13 @@ fn generate_db_connection_class(output: &mut UnrealCppAutogen, _module: &ModuleD writeln!(output, " UFUNCTION()"); writeln!( output, - " void OnUnhandledReducerErrorHandler(const FReducerEventContext& Context, const FString& Error);" + " void OnUnhandledReducerErrorHandler(const F{module_prefix}ReducerEventContext& Context, const FString& Error);" ); writeln!(output); writeln!(output, " UFUNCTION()"); writeln!( output, - " void OnUnhandledProcedureErrorHandler(const FProcedureEventContext& Context, const FString& Error);" + " void OnUnhandledProcedureErrorHandler(const F{module_prefix}ProcedureEventContext& Context, const FString& Error);" ); writeln!(output); writeln!( @@ -2941,9 +3176,17 @@ fn generate_db_connection_class(output: &mut UnrealCppAutogen, _module: &ModuleD writeln!(output); } -fn generate_client_implementation(output: &mut UnrealCppAutogen, module: &ModuleDef, module_name: &str) { +fn generate_client_implementation( + output: &mut UnrealCppAutogen, + module_prefix: &str, + module: &ModuleDef, + module_name: &str, +) { // Helper: Decode reducer args into FReducer from either event types - writeln!(output, "static FReducer DecodeReducer(const FReducerEvent& Event)"); + writeln!( + output, + "static F{module_prefix}Reducer DecodeReducer(const FReducerEvent& Event)" + ); writeln!(output, "{{"); writeln!( output, @@ -2952,60 +3195,62 @@ fn generate_client_implementation(output: &mut UnrealCppAutogen, module: &Module writeln!(output); for reducer in iter_reducers(module) { - let reducer_name = reducer.name.deref(); - let reducer_pascal = reducer_name.to_case(Case::Pascal); + let reducer_original = reducer.name.deref(); + let reducer_name = reducer_original.to_case(Case::Pascal); + let reducer_pascal = format!("{module_prefix}{}", reducer_name); - writeln!(output, " if (ReducerName == TEXT(\"{reducer_name}\"))"); + writeln!(output, " if (ReducerName == TEXT(\"{reducer_original}\"))"); writeln!(output, " {{"); writeln!( output, " F{reducer_pascal}Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args);" ); - writeln!(output, " return FReducer::{reducer_pascal}(Args);"); + writeln!(output, " return F{module_prefix}Reducer::{reducer_name}(Args);"); writeln!(output, " }}"); writeln!(output); } - writeln!(output, " return FReducer();"); + writeln!(output, " return F{module_prefix}Reducer();"); writeln!(output, "}}"); writeln!(output); // UDbConnection constructor writeln!( output, - "UDbConnection::UDbConnection(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer)" + "U{module_prefix}DbConnection::U{module_prefix}DbConnection(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer)" ); writeln!(output, "{{"); - writeln!(output, "\tSetReducerFlags = ObjectInitializer.CreateDefaultSubobject(this, TEXT(\"SetReducerFlags\"));"); + writeln!(output, "\tSetReducerFlags = ObjectInitializer.CreateDefaultSubobject(this, TEXT(\"SetReducerFlags\"));"); writeln!(output); writeln!( output, - "\tDb = ObjectInitializer.CreateDefaultSubobject(this, TEXT(\"RemoteTables\"));" + "\tDb = ObjectInitializer.CreateDefaultSubobject(this, TEXT(\"RemoteTables\"));" ); writeln!(output, "\tDb->Initialize();"); writeln!(output, "\t"); writeln!( output, - "\tReducers = ObjectInitializer.CreateDefaultSubobject(this, TEXT(\"RemoteReducers\"));" + "\tReducers = ObjectInitializer.CreateDefaultSubobject(this, TEXT(\"RemoteReducers\"));" ); writeln!(output, "\tReducers->SetCallReducerFlags = SetReducerFlags;"); writeln!(output, "\tReducers->Conn = this;"); writeln!(output); writeln!( output, - "\tProcedures = ObjectInitializer.CreateDefaultSubobject(this, TEXT(\"RemoteProcedures\"));" + "\tProcedures = ObjectInitializer.CreateDefaultSubobject(this, TEXT(\"RemoteProcedures\"));" ); writeln!(output, "\tProcedures->Conn = this;"); writeln!(output); for (table_name, product_type_ref) in iter_table_names_and_types(module) { - let struct_name = type_ref_name(module, product_type_ref); + let struct_name = type_ref_name(module_prefix, module, product_type_ref); let table_name = table_name.deref(); + let table_pascal = format!("{module_prefix}{}", table_name.to_case(Case::Pascal)); writeln!( output, - "\tRegisterTable(TEXT(\"{}\"), Db->{});", + "\tRegisterTable(TEXT(\"{}\"), Db->{});", struct_name, - table_name.to_case(Case::Pascal), + table_pascal, table_name, table_name.to_case(Case::Pascal) ); @@ -3014,7 +3259,10 @@ fn generate_client_implementation(output: &mut UnrealCppAutogen, module: &Module writeln!(output); // FContextBase constructor - writeln!(output, "FContextBase::FContextBase(UDbConnection* InConn)"); + writeln!( + output, + "F{module_prefix}ContextBase::F{module_prefix}ContextBase(U{module_prefix}DbConnection* InConn)" + ); writeln!(output, "{{"); writeln!(output, "\tDb = InConn->Db;"); writeln!(output, "\tReducers = InConn->Reducers;"); @@ -3024,40 +3272,46 @@ fn generate_client_implementation(output: &mut UnrealCppAutogen, module: &Module writeln!(output, "}}"); // FContextBase methods - writeln!(output, "bool FContextBase::IsActive() const"); + writeln!(output, "bool F{module_prefix}ContextBase::IsActive() const"); writeln!(output, "{{"); writeln!(output, "\treturn Conn->IsActive();"); writeln!(output, "}}"); - writeln!(output, "void FContextBase::Disconnect()"); + writeln!(output, "void F{module_prefix}ContextBase::Disconnect()"); writeln!(output, "{{"); writeln!(output, "\tConn->Disconnect();"); writeln!(output, "}}"); - writeln!(output, "USubscriptionBuilder* FContextBase::SubscriptionBuilder()"); + writeln!( + output, + "U{module_prefix}SubscriptionBuilder* F{module_prefix}ContextBase::SubscriptionBuilder()" + ); writeln!(output, "{{"); writeln!(output, "\treturn Conn->SubscriptionBuilder();"); writeln!(output, "}}"); writeln!( output, - "bool FContextBase::TryGetIdentity(FSpacetimeDBIdentity& OutIdentity) const" + "bool F{module_prefix}ContextBase::TryGetIdentity(FSpacetimeDBIdentity& OutIdentity) const" ); writeln!(output, "{{"); writeln!(output, "\treturn Conn->TryGetIdentity(OutIdentity);"); writeln!(output, "}}"); - writeln!(output, "FSpacetimeDBConnectionId FContextBase::GetConnectionId() const"); + writeln!( + output, + "FSpacetimeDBConnectionId F{module_prefix}ContextBase::GetConnectionId() const" + ); writeln!(output, "{{"); writeln!(output, "\treturn Conn->GetConnectionId();"); writeln!(output, "}}"); writeln!(output); // URemoteTables Initialize method - writeln!(output, "void URemoteTables::Initialize()"); + writeln!(output, "void U{module_prefix}RemoteTables::Initialize()"); writeln!(output, "{{"); writeln!(output); writeln!(output, "\t/** Creating tables */"); for (table_name, _) in iter_table_names_and_types(module) { writeln!( output, - "\t{} = NewObject(this);", + "\t{} = NewObject(this);", table_name.deref().to_case(Case::Pascal), table_name.deref().to_case(Case::Pascal) ); @@ -3078,22 +3332,23 @@ fn generate_client_implementation(output: &mut UnrealCppAutogen, module: &Module // USetReducerFlags methods for reducer in iter_reducers(module) { - let reducer_pascal = reducer.name.deref().to_case(Case::Pascal); + let reducer_name = reducer.name.deref().to_case(Case::Pascal); + writeln!( output, - "void USetReducerFlags::{reducer_pascal}(ECallReducerFlags Flag)" + "void U{module_prefix}SetReducerFlags::{reducer_name}(ECallReducerFlags Flag)" ); writeln!(output, "{{"); - writeln!(output, "\tFlagMap.Add(\"{reducer_pascal}\", Flag);"); + writeln!(output, "\tFlagMap.Add(\"{reducer_name}\", Flag);"); writeln!(output, "}}"); } writeln!(output); - generate_remote_reducer_calls(output, module, module_name); - generate_remote_procedure_calls(output, module, module_name); + generate_remote_reducer_calls(output, module, module_name, module_prefix); + generate_remote_procedure_calls(output, module, module_name, module_prefix); // Hook up error handling - writeln!(output, "void UDbConnection::PostInitProperties()"); + writeln!(output, "void U{module_prefix}DbConnection::PostInitProperties()"); writeln!(output, "{{"); writeln!(output, " Super::PostInitProperties();"); writeln!(output, " "); @@ -3103,7 +3358,7 @@ fn generate_client_implementation(output: &mut UnrealCppAutogen, module: &Module ); writeln!(output, " if (Reducers)"); writeln!(output, " {{"); - writeln!(output, " Reducers->InternalOnUnhandledReducerError.AddDynamic(this, &UDbConnection::OnUnhandledReducerErrorHandler);"); + writeln!(output, " Reducers->InternalOnUnhandledReducerError.AddDynamic(this, &U{module_prefix}DbConnection::OnUnhandledReducerErrorHandler);"); writeln!(output, " }}"); writeln!(output); writeln!( @@ -3112,7 +3367,7 @@ fn generate_client_implementation(output: &mut UnrealCppAutogen, module: &Module ); writeln!(output, " if (Procedures)"); writeln!(output, " {{"); - writeln!(output, " Procedures->InternalOnUnhandledProcedureError.AddDynamic(this, &UDbConnection::OnUnhandledProcedureErrorHandler);"); + writeln!(output, " Procedures->InternalOnUnhandledProcedureError.AddDynamic(this, &U{module_prefix}DbConnection::OnUnhandledProcedureErrorHandler);"); writeln!(output, " }}"); writeln!(output, "}}"); writeln!(output); @@ -3121,7 +3376,7 @@ fn generate_client_implementation(output: &mut UnrealCppAutogen, module: &Module writeln!(output, "UFUNCTION()"); writeln!( output, - "void UDbConnection::OnUnhandledReducerErrorHandler(const FReducerEventContext& Context, const FString& Error)" + "void U{module_prefix}DbConnection::OnUnhandledReducerErrorHandler(const F{module_prefix}ReducerEventContext& Context, const FString& Error)" ); writeln!(output, "{{"); writeln!(output, " if (OnUnhandledReducerError.IsBound())"); @@ -3135,7 +3390,7 @@ fn generate_client_implementation(output: &mut UnrealCppAutogen, module: &Module writeln!(output, "UFUNCTION()"); writeln!( output, - "void UDbConnection::OnUnhandledProcedureErrorHandler(const FProcedureEventContext& Context, const FString& Error)" + "void U{module_prefix}DbConnection::OnUnhandledProcedureErrorHandler(const F{module_prefix}ProcedureEventContext& Context, const FString& Error)" ); writeln!(output, "{{"); writeln!(output, " if (OnUnhandledProcedureError.IsBound())"); @@ -3146,13 +3401,19 @@ fn generate_client_implementation(output: &mut UnrealCppAutogen, module: &Module writeln!(output); // ReducerEvent method implementation - writeln!(output, "void UDbConnection::ReducerEvent(const FReducerEvent& Event)"); + writeln!( + output, + "void U{module_prefix}DbConnection::ReducerEvent(const FReducerEvent& Event)" + ); writeln!(output, "{{"); writeln!(output, " if (!Reducers) {{ return; }}"); writeln!(output); // Decode reducer call args - writeln!(output, " FReducer DecodedReducer = DecodeReducer(Event);"); + writeln!( + output, + " F{module_prefix}Reducer DecodedReducer = DecodeReducer(Event);" + ); writeln!(output); let module_name_pascal = module_name.to_case(Case::Pascal); @@ -3169,7 +3430,10 @@ fn generate_client_implementation(output: &mut UnrealCppAutogen, module: &Module writeln!(output, " ReducerEvent.Reducer = DecodedReducer;"); writeln!(output); - writeln!(output, " FReducerEventContext Context(this, ReducerEvent);"); + writeln!( + output, + " F{module_prefix}ReducerEventContext Context(this, ReducerEvent);" + ); writeln!(output); writeln!(output, " // Use hardcoded string matching for reducer dispatching"); writeln!( @@ -3179,13 +3443,14 @@ fn generate_client_implementation(output: &mut UnrealCppAutogen, module: &Module writeln!(output); for reducer in iter_reducers(module) { - let reducer_name = reducer.name.deref(); - let reducer_pascal = reducer.name.deref().to_case(Case::Pascal); - writeln!(output, " if (ReducerName == TEXT(\"{reducer_name}\"))"); + let reducer_original = reducer.name.deref(); + let reducer_name = reducer.name.deref().to_case(Case::Pascal); + let reducer_pascal = format!("{module_prefix}{}", reducer.name.deref().to_case(Case::Pascal)); + writeln!(output, " if (ReducerName == TEXT(\"{reducer_original}\"))"); writeln!(output, " {{"); writeln!( output, - " F{reducer_pascal}Args Args = ReducerEvent.Reducer.GetAs{reducer_pascal}();" + " F{reducer_pascal}Args Args = ReducerEvent.Reducer.GetAs{reducer_name}();" ); writeln!( output, @@ -3198,7 +3463,7 @@ fn generate_client_implementation(output: &mut UnrealCppAutogen, module: &Module writeln!(output, " Reducer->{param_pascal} = Args.{param_pascal};"); } - writeln!(output, " Reducers->Invoke{reducer_pascal}(Context, Reducer);"); + writeln!(output, " Reducers->Invoke{reducer_name}(Context, Reducer);"); writeln!(output, " return;"); writeln!(output, " }}"); } @@ -3213,7 +3478,7 @@ fn generate_client_implementation(output: &mut UnrealCppAutogen, module: &Module // ReducerEventFailed method implementation writeln!( output, - "void UDbConnection::ReducerEventFailed(const FReducerEvent& Event, const FString ErrorMessage)" + "void U{module_prefix}DbConnection::ReducerEventFailed(const FReducerEvent& Event, const FString ErrorMessage)" ); writeln!(output, "{{"); writeln!(output, " if (!Reducers) {{ return; }}"); @@ -3231,7 +3496,10 @@ fn generate_client_implementation(output: &mut UnrealCppAutogen, module: &Module writeln!(output, " ReducerEvent.Timestamp = Event.Timestamp;"); writeln!(output); - writeln!(output, " FReducerEventContext Context(this, ReducerEvent);"); + writeln!( + output, + " F{module_prefix}ReducerEventContext Context(this, ReducerEvent);" + ); writeln!(output); writeln!(output, " if (Reducers->InternalOnUnhandledReducerError.IsBound())"); writeln!(output, " {{"); @@ -3246,7 +3514,7 @@ fn generate_client_implementation(output: &mut UnrealCppAutogen, module: &Module // ProcedureEventFailed method implementation writeln!( output, - "void UDbConnection::ProcedureEventFailed(const FProcedureEvent& Event, const FString ErrorMessage)" + "void U{module_prefix}DbConnection::ProcedureEventFailed(const FProcedureEvent& Event, const FString ErrorMessage)" ); writeln!(output, "{{"); writeln!(output, " if (!Procedures) {{ return; }}"); @@ -3261,7 +3529,10 @@ fn generate_client_implementation(output: &mut UnrealCppAutogen, module: &Module writeln!(output, " ProcedureEvent.Timestamp = Event.Timestamp;"); writeln!(output); - writeln!(output, " FProcedureEventContext Context(this, ProcedureEvent);"); + writeln!( + output, + " F{module_prefix}ProcedureEventContext Context(this, ProcedureEvent);" + ); writeln!(output); writeln!( output, @@ -3277,23 +3548,29 @@ fn generate_client_implementation(output: &mut UnrealCppAutogen, module: &Module writeln!(output); // Additional methods from manual reference - writeln!(output, "UDbConnectionBuilder* UDbConnection::Builder()"); + writeln!( + output, + "U{module_prefix}DbConnectionBuilder* U{module_prefix}DbConnection::Builder()" + ); writeln!(output, "{{"); - writeln!(output, "\treturn NewObject();"); + writeln!(output, "\treturn NewObject();"); writeln!(output, "}}"); writeln!(output, "// Added for creating subscriptions"); - writeln!(output, "USubscriptionBuilder* UDbConnection::SubscriptionBuilder()"); + writeln!( + output, + "U{module_prefix}SubscriptionBuilder* U{module_prefix}DbConnection::SubscriptionBuilder()" + ); writeln!(output, "{{"); writeln!( output, - "\tUSubscriptionBuilder* Builder = NewObject(this);" + "\tU{module_prefix}SubscriptionBuilder* Builder = NewObject(this);" ); writeln!(output, "\tBuilder->Conn = this;"); writeln!(output, "\treturn Builder;"); writeln!(output, "}}"); writeln!( output, - "USubscriptionBuilder* USubscriptionBuilder::OnApplied(FOnSubscriptionApplied Callback)" + "U{module_prefix}SubscriptionBuilder* U{module_prefix}SubscriptionBuilder::OnApplied(F{module_prefix}OnSubscriptionApplied Callback)" ); writeln!(output, "{{"); writeln!(output, "\tOnAppliedDelegateInternal = Callback;"); @@ -3301,7 +3578,7 @@ fn generate_client_implementation(output: &mut UnrealCppAutogen, module: &Module writeln!(output, "}}"); writeln!( output, - "USubscriptionBuilder* USubscriptionBuilder::OnError(FOnSubscriptionError Callback)" + "U{module_prefix}SubscriptionBuilder* U{module_prefix}SubscriptionBuilder::OnError(F{module_prefix}OnSubscriptionError Callback)" ); writeln!(output, "{{"); writeln!(output, "\tOnErrorDelegateInternal = Callback;"); @@ -3309,12 +3586,12 @@ fn generate_client_implementation(output: &mut UnrealCppAutogen, module: &Module writeln!(output, "}}"); writeln!( output, - "USubscriptionHandle* USubscriptionBuilder::Subscribe(const TArray& SQL)" + "U{module_prefix}SubscriptionHandle* U{module_prefix}SubscriptionBuilder::Subscribe(const TArray& SQL)" ); writeln!(output, "{{"); writeln!( output, - "\tUSubscriptionHandle* Handle = NewObject();" + "\tU{module_prefix}SubscriptionHandle* Handle = NewObject();" ); writeln!(output); writeln!(output, "\t// Store user callbacks on the handle"); @@ -3343,7 +3620,7 @@ fn generate_client_implementation(output: &mut UnrealCppAutogen, module: &Module writeln!(output, "}}"); writeln!( output, - "USubscriptionHandle* USubscriptionBuilder::SubscribeToAllTables()" + "U{module_prefix}SubscriptionHandle* U{module_prefix}SubscriptionBuilder::SubscribeToAllTables()" ); writeln!(output, "{{"); writeln!(output, "\treturn Subscribe({{ \"SELECT * FROM * \" }});"); @@ -3351,7 +3628,7 @@ fn generate_client_implementation(output: &mut UnrealCppAutogen, module: &Module writeln!(output); writeln!( output, - "USubscriptionHandle::USubscriptionHandle(UDbConnection* InConn)" + "U{module_prefix}SubscriptionHandle::U{module_prefix}SubscriptionHandle(U{module_prefix}DbConnection* InConn)" ); writeln!(output, "{{"); writeln!(output, "\tConn = InConn;"); @@ -3359,24 +3636,24 @@ fn generate_client_implementation(output: &mut UnrealCppAutogen, module: &Module writeln!(output); writeln!( output, - "void USubscriptionHandle::ForwardOnApplied(const FSubscriptionEventContextBase& BaseCtx)" + "void U{module_prefix}SubscriptionHandle::ForwardOnApplied(const FSubscriptionEventContextBase& BaseCtx)" ); writeln!(output, "{{"); writeln!(output, "\tif (OnAppliedDelegate.IsBound())"); writeln!(output, "\t{{"); - writeln!(output, "\t\tFSubscriptionEventContext Ctx(Conn);"); + writeln!(output, "\t\tF{module_prefix}SubscriptionEventContext Ctx(Conn);"); writeln!(output, "\t\tOnAppliedDelegate.Execute(Ctx);"); writeln!(output, "\t}}"); writeln!(output, "}}"); writeln!(output); writeln!( output, - "void USubscriptionHandle::ForwardOnError(const FErrorContextBase& BaseCtx)" + "void U{module_prefix}SubscriptionHandle::ForwardOnError(const FErrorContextBase& BaseCtx)" ); writeln!(output, "{{"); writeln!(output, "\tif (OnErrorDelegate.IsBound())"); writeln!(output, "\t{{"); - writeln!(output, "\t\tFErrorContext Ctx(Conn, BaseCtx.Error);"); + writeln!(output, "\t\tF{module_prefix}ErrorContext Ctx(Conn, BaseCtx.Error);"); writeln!(output, "\t\tOnErrorDelegate.Execute(Ctx);"); writeln!(output, "\t}}"); writeln!(output, "}}"); @@ -3385,41 +3662,47 @@ fn generate_client_implementation(output: &mut UnrealCppAutogen, module: &Module writeln!(output, "// Cast from parent to child class"); writeln!( output, - "UDbConnectionBuilder* UDbConnectionBuilder::WithUri(const FString& InUri)" + "U{module_prefix}DbConnectionBuilder* U{module_prefix}DbConnectionBuilder::WithUri(const FString& InUri)" ); writeln!(output, "{{"); - writeln!(output, "\treturn Cast(WithUriBase(InUri));"); + writeln!( + output, + "\treturn Cast(WithUriBase(InUri));" + ); writeln!(output, "}}"); writeln!( output, - "UDbConnectionBuilder* UDbConnectionBuilder::WithModuleName(const FString& InName)" + "U{module_prefix}DbConnectionBuilder* U{module_prefix}DbConnectionBuilder::WithModuleName(const FString& InName)" ); writeln!(output, "{{"); writeln!( output, - "\treturn Cast(WithModuleNameBase(InName));" + "\treturn Cast(WithModuleNameBase(InName));" ); writeln!(output, "}}"); writeln!( output, - "UDbConnectionBuilder* UDbConnectionBuilder::WithToken(const FString& InToken)" + "U{module_prefix}DbConnectionBuilder* U{module_prefix}DbConnectionBuilder::WithToken(const FString& InToken)" ); writeln!(output, "{{"); - writeln!(output, "\treturn Cast(WithTokenBase(InToken));"); + writeln!( + output, + "\treturn Cast(WithTokenBase(InToken));" + ); writeln!(output, "}}"); writeln!( output, - "UDbConnectionBuilder* UDbConnectionBuilder::WithCompression(const ESpacetimeDBCompression& InCompression)" + "U{module_prefix}DbConnectionBuilder* U{module_prefix}DbConnectionBuilder::WithCompression(const ESpacetimeDBCompression& InCompression)" ); writeln!(output, "{{"); writeln!( output, - "\treturn Cast(WithCompressionBase(InCompression));" + "\treturn Cast(WithCompressionBase(InCompression));" ); writeln!(output, "}}"); writeln!( output, - "UDbConnectionBuilder* UDbConnectionBuilder::OnConnect(FOnConnectDelegate Callback)" + "U{module_prefix}DbConnectionBuilder* U{module_prefix}DbConnectionBuilder::OnConnect(F{module_prefix}OnConnectDelegate Callback)" ); writeln!(output, "{{"); writeln!(output, "\tOnConnectDelegateInternal = Callback;"); @@ -3427,25 +3710,31 @@ fn generate_client_implementation(output: &mut UnrealCppAutogen, module: &Module writeln!(output, "}}"); writeln!( output, - "UDbConnectionBuilder* UDbConnectionBuilder::OnConnectError(FOnConnectErrorDelegate Callback)" + "U{module_prefix}DbConnectionBuilder* U{module_prefix}DbConnectionBuilder::OnConnectError(FOnConnectErrorDelegate Callback)" ); writeln!(output, "{{"); writeln!( output, - "\treturn Cast(OnConnectErrorBase(Callback));" + "\treturn Cast(OnConnectErrorBase(Callback));" ); writeln!(output, "}}"); writeln!( output, - "UDbConnectionBuilder* UDbConnectionBuilder::OnDisconnect(FOnDisconnectDelegate Callback)" + "U{module_prefix}DbConnectionBuilder* U{module_prefix}DbConnectionBuilder::OnDisconnect(F{module_prefix}OnDisconnectDelegate Callback)" ); writeln!(output, "{{"); writeln!(output, "\tOnDisconnectDelegateInternal = Callback;"); writeln!(output, "\treturn this;"); writeln!(output, "}}"); - writeln!(output, "UDbConnection* UDbConnectionBuilder::Build()"); + writeln!( + output, + "U{module_prefix}DbConnection* U{module_prefix}DbConnectionBuilder::Build()" + ); writeln!(output, "{{"); - writeln!(output, "\tUDbConnection* Connection = NewObject();"); + writeln!( + output, + "\tU{module_prefix}DbConnection* Connection = NewObject();" + ); writeln!(output); writeln!(output, "\t// Store delegates on the connection for later use"); writeln!(output, "\tConnection->OnConnectDelegate = OnConnectDelegateInternal;"); @@ -3471,9 +3760,12 @@ fn generate_client_implementation(output: &mut UnrealCppAutogen, module: &Module writeln!(output, "\tConnection->SetOnDisconnectDelegate(BaseDisconnect);"); writeln!(output, "\tOnDisconnectBase(BaseDisconnect);"); writeln!(output); - writeln!(output, "\treturn Cast(BuildConnection(Connection));"); + writeln!( + output, + "\treturn Cast(BuildConnection(Connection));" + ); writeln!(output, "}}"); - writeln!(output, "void UDbConnection::ForwardOnConnect(UDbConnectionBase* BaseConnection, FSpacetimeDBIdentity InIdentity, const FString& InToken)"); + writeln!(output, "void U{module_prefix}DbConnection::ForwardOnConnect(UDbConnectionBase* BaseConnection, FSpacetimeDBIdentity InIdentity, const FString& InToken)"); writeln!(output, "{{"); writeln!(output, "\tif (OnConnectDelegate.IsBound())"); writeln!(output, "\t{{"); @@ -3482,7 +3774,7 @@ fn generate_client_implementation(output: &mut UnrealCppAutogen, module: &Module writeln!(output, "}}"); writeln!( output, - "void UDbConnection::ForwardOnDisconnect(UDbConnectionBase* BaseConnection, const FString& Error)" + "void U{module_prefix}DbConnection::ForwardOnDisconnect(UDbConnectionBase* BaseConnection, const FString& Error)" ); writeln!(output, "{{"); writeln!(output, "\tif (OnDisconnectDelegate.IsBound())"); @@ -3495,7 +3787,7 @@ fn generate_client_implementation(output: &mut UnrealCppAutogen, module: &Module writeln!( output, - "void UDbConnection::DbUpdate(const FDatabaseUpdateType& Update, const FSpacetimeDBEvent& Event)" + "void U{module_prefix}DbConnection::DbUpdate(const FDatabaseUpdateType& Update, const FSpacetimeDBEvent& Event)" ); writeln!(output, "{{"); @@ -3512,7 +3804,10 @@ fn generate_client_implementation(output: &mut UnrealCppAutogen, module: &Module writeln!(output, " case ESpacetimeDBEventTag::Reducer:"); writeln!(output, " {{"); writeln!(output, " FReducerEvent ReducerEvent = Event.GetAsReducer();"); - writeln!(output, " FReducer Reducer = DecodeReducer(ReducerEvent);"); + writeln!( + output, + " F{module_prefix}Reducer Reducer = DecodeReducer(ReducerEvent);" + ); writeln!( output, " BaseEvent = F{module_name_pascal}Event::Reducer(Reducer);" @@ -3568,7 +3863,7 @@ fn generate_client_implementation(output: &mut UnrealCppAutogen, module: &Module writeln!(output); // Wrap in EventContext - writeln!(output, " FEventContext Context(this, BaseEvent);"); + writeln!(output, " F{module_prefix}EventContext Context(this, BaseEvent);"); writeln!( output, " // Populate typed reducer args for convenience in table handlers" @@ -3581,14 +3876,20 @@ fn generate_client_implementation(output: &mut UnrealCppAutogen, module: &Module writeln!(output); } -fn generate_remote_reducer_calls(output: &mut UnrealCppAutogen, module: &ModuleDef, module_name: &str) { +fn generate_remote_reducer_calls( + output: &mut UnrealCppAutogen, + module: &ModuleDef, + module_name: &str, + module_prefix: &str, +) { // Reducer implementations for reducer in iter_reducers(module) { - let reducer_pascal = reducer.name.deref().to_case(Case::Pascal); + let reducer_name = reducer.name.deref().to_case(Case::Pascal); + let reducer_pascal = format!("{module_prefix}{reducer_name}"); let reducer_snake = reducer.name.deref(); // Call method implementation - write!(output, "void URemoteReducers::{reducer_pascal}("); + write!(output, "void U{module_prefix}RemoteReducers::{reducer_name}("); let mut first = true; for (param_name, param_type) in &reducer.params_for_generate.elements { if !first { @@ -3596,7 +3897,7 @@ fn generate_remote_reducer_calls(output: &mut UnrealCppAutogen, module: &ModuleD } first = false; // Use Blueprint-compatible types (same as UFUNCTION and delegates) - let type_str = cpp_ty_fmt_blueprint_compatible(module, param_type, module_name).to_string(); + let type_str = cpp_ty_fmt_blueprint_compatible(module_prefix, module, param_type, module_name).to_string(); if should_pass_by_value_in_delegate(module, param_type) { // Primitives use const by-value in URemoteReducers methods (same as UFUNCTION) write!( @@ -3654,11 +3955,11 @@ fn generate_remote_reducer_calls(output: &mut UnrealCppAutogen, module: &ModuleD // Invoke method implementation write!( output, - "bool URemoteReducers::Invoke{reducer_pascal}(const FReducerEventContext& Context, const U{reducer_pascal}Reducer* Args)" + "bool U{module_prefix}RemoteReducers::Invoke{reducer_name}(const F{module_prefix}ReducerEventContext& Context, const U{reducer_pascal}Reducer* Args)" ); writeln!(output); writeln!(output, "{{"); - writeln!(output, " if (!On{reducer_pascal}.IsBound())"); + writeln!(output, " if (!On{reducer_name}.IsBound())"); writeln!(output, " {{"); writeln!(output, " // Handle unhandled reducer error"); writeln!(output, " if (InternalOnUnhandledReducerError.IsBound())"); @@ -3670,7 +3971,7 @@ fn generate_remote_reducer_calls(output: &mut UnrealCppAutogen, module: &ModuleD writeln!(output, " // For now, just broadcast any error"); writeln!( output, - " InternalOnUnhandledReducerError.Broadcast(Context, TEXT(\"No handler registered for {reducer_pascal}\"));" + " InternalOnUnhandledReducerError.Broadcast(Context, TEXT(\"No handler registered for {reducer_name}\"));" ); writeln!(output, " }}"); writeln!(output, " return false;"); @@ -3688,10 +3989,10 @@ fn generate_remote_reducer_calls(output: &mut UnrealCppAutogen, module: &ModuleD let param_pascal = param_name.deref().to_case(Case::Pascal); writeln!(output, " ArgsStruct.{param_pascal} = Args->{param_pascal};"); } - writeln!(output, " On{reducer_pascal}.Broadcast(Context, ArgsStruct);"); + writeln!(output, " On{reducer_name}.Broadcast(Context, ArgsStruct);"); } else { // Use individual parameters - write!(output, " On{reducer_pascal}.Broadcast(Context"); + write!(output, " On{reducer_name}.Broadcast(Context"); for (param_name, _) in &reducer.params_for_generate.elements { let param_pascal = param_name.deref().to_case(Case::Pascal); write!(output, ", Args->{param_pascal}"); @@ -3705,14 +4006,20 @@ fn generate_remote_reducer_calls(output: &mut UnrealCppAutogen, module: &ModuleD } } -fn generate_remote_procedure_calls(output: &mut UnrealCppAutogen, module: &ModuleDef, module_name: &str) { +fn generate_remote_procedure_calls( + output: &mut UnrealCppAutogen, + module: &ModuleDef, + module_name: &str, + module_prefix: &str, +) { // Procedure implementations for procedure in iter_procedures(module) { - let procedure_pascal = procedure.name.deref().to_case(Case::Pascal); + let procedure_name = procedure.name.deref().to_case(Case::Pascal); + let procedure_pascal = format!("{module_prefix}{procedure_name}"); let procedure_snake = procedure.name.deref(); // Call method implementation - write!(output, "void URemoteProcedures::{procedure_pascal}("); + write!(output, "void U{module_prefix}RemoteProcedures::{procedure_name}("); let mut first = true; for (param_name, param_type) in &procedure.params_for_generate.elements { if !first { @@ -3720,7 +4027,7 @@ fn generate_remote_procedure_calls(output: &mut UnrealCppAutogen, module: &Modul } first = false; // Use Blueprint-compatible types (same as UFUNCTION and delegates) - let type_str = cpp_ty_fmt_blueprint_compatible(module, param_type, module_name).to_string(); + let type_str = cpp_ty_fmt_blueprint_compatible(module_prefix, module, param_type, module_name).to_string(); if should_pass_by_value_in_delegate(module, param_type) { // Primitives use const by-value in URemoteProcedures methods (same as UFUNCTION) write!( @@ -3742,7 +4049,7 @@ fn generate_remote_procedure_calls(output: &mut UnrealCppAutogen, module: &Modul if !first { write!(output, ", "); } - writeln!(output, "FOn{}Complete Callback)", procedure_pascal); + writeln!(output, "F{module_prefix}On{}Complete Callback)", procedure_name); writeln!(output, "{{"); writeln!(output, " if (!Conn)"); writeln!(output, " {{"); @@ -3756,7 +4063,7 @@ fn generate_remote_procedure_calls(output: &mut UnrealCppAutogen, module: &Modul // Get the actual return type for this procedure let return_type_str = - cpp_ty_fmt_with_module(module, &procedure.return_type_for_generate, module_name).to_string(); + cpp_ty_fmt_with_module(module_prefix, module, &procedure.return_type_for_generate, module_name).to_string(); writeln!(output, " FOnProcedureCompleteDelegate Wrapper;"); writeln!(output, " Wrapper.BindLambda("); @@ -3778,7 +4085,7 @@ fn generate_remote_procedure_calls(output: &mut UnrealCppAutogen, module: &Modul writeln!(output, " F{module_name}ProcedureEvent ProcedureEvent = F{module_name}ProcedureEvent(Event.GetAsProcedure());"); writeln!( output, - " FProcedureEventContext Context = FProcedureEventContext(Conn, ProcedureEvent);" + " F{module_prefix}ProcedureEventContext Context = F{module_prefix}ProcedureEventContext(Conn, ProcedureEvent);" ); writeln!(output, " // Fire the user's typed delegate"); writeln!( @@ -3869,33 +4176,33 @@ impl UnrealCppAutogen { // Helpers // --------------------------------------------------------------------------- -fn collect_optional_types(module: &ModuleDef) -> HashSet { +fn collect_optional_types(module_prefix: &str, module: &ModuleDef) -> HashSet { let mut optional_types = HashSet::new(); // Helper function to collect from a type - fn collect_from_type(module: &ModuleDef, ty: &AlgebraicTypeUse, out: &mut HashSet) { + fn collect_from_type(module_prefix: &str, module: &ModuleDef, ty: &AlgebraicTypeUse, out: &mut HashSet) { match ty { AlgebraicTypeUse::Option(inner) => { // Generate the optional type name - let optional_name = get_optional_type_name(module, inner); + let optional_name = get_optional_type_name(module_prefix, module, inner); out.insert(optional_name); // Recursively collect from inner type - collect_from_type(module, inner, out); + collect_from_type(module_prefix, module, inner, out); } AlgebraicTypeUse::Array(elem) => { - collect_from_type(module, elem, out); + collect_from_type(module_prefix, module, elem, out); } AlgebraicTypeUse::Ref(r) => { // Check if the referenced type contains optionals match &module.typespace_for_generate()[*r] { AlgebraicTypeDef::Product(product) => { for (_, field_ty) in &product.elements { - collect_from_type(module, field_ty, out); + collect_from_type(module_prefix, module, field_ty, out); } } AlgebraicTypeDef::Sum(sum) => { for (_, variant_ty) in &sum.variants { - collect_from_type(module, variant_ty, out); + collect_from_type(module_prefix, module, variant_ty, out); } } _ => {} @@ -3909,7 +4216,7 @@ fn collect_optional_types(module: &ModuleDef) -> HashSet { for (_, product_type_ref) in iter_table_names_and_types(module) { let product_type = module.typespace_for_generate()[product_type_ref].as_product().unwrap(); for (_, field_ty) in &product_type.elements { - collect_from_type(module, field_ty, &mut optional_types); + collect_from_type(module_prefix, module, field_ty, &mut optional_types); } } @@ -3918,12 +4225,12 @@ fn collect_optional_types(module: &ModuleDef) -> HashSet { match &module.typespace_for_generate()[typ.ty] { AlgebraicTypeDef::Product(product) => { for (_, field_ty) in &product.elements { - collect_from_type(module, field_ty, &mut optional_types); + collect_from_type(module_prefix, module, field_ty, &mut optional_types); } } AlgebraicTypeDef::Sum(sum) => { for (_, variant_ty) in &sum.variants { - collect_from_type(module, variant_ty, &mut optional_types); + collect_from_type(module_prefix, module, variant_ty, &mut optional_types); } } _ => {} @@ -3933,22 +4240,33 @@ fn collect_optional_types(module: &ModuleDef) -> HashSet { // Collect from reducer parameters for reducer in iter_reducers(module) { for (_, param_ty) in &reducer.params_for_generate.elements { - collect_from_type(module, param_ty, &mut optional_types); + collect_from_type(module_prefix, module, param_ty, &mut optional_types); } } // Collect from procedure parameters for procedure in iter_procedures(module) { for (_, param_ty) in &procedure.params_for_generate.elements { - collect_from_type(module, param_ty, &mut optional_types); + collect_from_type(module_prefix, module, param_ty, &mut optional_types); } - collect_from_type(module, &procedure.return_type_for_generate, &mut optional_types); + collect_from_type( + module_prefix, + module, + &procedure.return_type_for_generate, + &mut optional_types, + ); } optional_types } // Helper function to get C++ type for array elements in optional arrays -fn get_cpp_type_for_array_element(elem_type_str: &str, _: &ModuleDef, module_name: &str) -> String { +fn get_cpp_type_for_array_element( + module_prefix: &str, + module: &ModuleDef, + elem_type_str: &str, + _: &ModuleDef, + module_name: &str, +) -> String { match elem_type_str { "Bool" => "bool".to_string(), "I8" | "Int8" => "int8".to_string(), @@ -3977,13 +4295,32 @@ fn get_cpp_type_for_array_element(elem_type_str: &str, _: &ModuleDef, module_nam format!("F{module_name_pascal}OptionalInt32") } _ => { - format!("E{elem_type_str}Type") + let is_enum = module.types().any(|type_def| { + let type_name = type_def + .name + .name_segments() + .last() + .map(|id| id.deref().to_string()) + .unwrap_or_else(|| "Unnamed".to_string()); + let prefixed_type_name = format!("{module_prefix}{type_name}"); + prefixed_type_name == elem_type_str + && matches!( + module.typespace_for_generate()[type_def.ty], + AlgebraicTypeDef::PlainEnum(_) + ) + }); + + if is_enum { + format!("E{elem_type_str}Type") + } else { + format!("F{elem_type_str}Type") + } } } } // Helper function to get array element type name for optional array types -fn get_array_element_type_name(module: &ModuleDef, elem: &AlgebraicTypeUse) -> String { +fn get_array_element_type_name(module_prefix: &str, module: &ModuleDef, elem: &AlgebraicTypeUse) -> String { match elem { AlgebraicTypeUse::Primitive(p) => match p { PrimitiveType::Bool => "Bool".to_string(), @@ -4008,17 +4345,17 @@ fn get_array_element_type_name(module: &ModuleDef, elem: &AlgebraicTypeUse) -> S AlgebraicTypeUse::Timestamp => "Timestamp".to_string(), AlgebraicTypeUse::TimeDuration => "TimeDuration".to_string(), AlgebraicTypeUse::ScheduleAt => "ScheduleAt".to_string(), - AlgebraicTypeUse::Ref(r) => type_ref_name(module, *r), + AlgebraicTypeUse::Ref(r) => type_ref_name(module_prefix, module, *r), AlgebraicTypeUse::Option(nested_inner) => { // Handle optional elements in arrays like Vec> - get_optional_type_name(module, nested_inner) + get_optional_type_name(module_prefix, module, nested_inner) } _ => "Unknown".to_string(), } } // Get the name for an optional type (e.g., "OptionalString", "OptionalInt32") -fn get_optional_type_name(module: &ModuleDef, inner: &AlgebraicTypeUse) -> String { +fn get_optional_type_name(module_prefix: &str, module: &ModuleDef, inner: &AlgebraicTypeUse) -> String { match inner { AlgebraicTypeUse::Primitive(p) => match p { PrimitiveType::Bool => "OptionalBool".to_string(), @@ -4045,24 +4382,68 @@ fn get_optional_type_name(module: &ModuleDef, inner: &AlgebraicTypeUse) -> Strin AlgebraicTypeUse::ScheduleAt => "OptionalScheduleAt".to_string(), AlgebraicTypeUse::Array(elem) => { // Generate specific optional array types based on element type - let elem_name = get_array_element_type_name(module, elem); + let elem_name = get_array_element_type_name(module_prefix, module, elem); format!("OptionalVec{elem_name}") } AlgebraicTypeUse::Ref(r) => { - let type_name = type_ref_name(module, *r); + let type_name = type_ref_name(module_prefix, module, *r); format!("Optional{type_name}") } AlgebraicTypeUse::Option(nested_inner) => { // Handle nested optionals like Option> - let inner_optional_name = get_optional_type_name(module, nested_inner); + let inner_optional_name = get_optional_type_name(module_prefix, module, nested_inner); format!("Optional{inner_optional_name}") } _ => "OptionalUnknown".to_string(), } } +fn get_extra_includes_for_type(extra_includes: &mut HashSet, inner_type_str: &str) { + match inner_type_str { + "Identity" | "ConnectionId" | "Timestamp" | "TimeDuration" | "ScheduleAt" => { + extra_includes.insert("Types/Builtins.h".to_string()); + } + "Int128" | "UInt128" | "Int256" | "UInt256" => { + extra_includes.insert("Types/LargeIntegers.h".to_string()); + } + "String" | "Bool" | "Int8" | "UInt8" | "Int16" | "UInt16" | "Int32" | "UInt32" | "Int64" | "UInt64" + | "Float" | "Double" | "Array" => { + // Basic types, no extra includes needed + } + _ if !inner_type_str.starts_with("Int") && !inner_type_str.starts_with("UInt") => { + // Custom type, need its header + extra_includes.insert(format!("ModuleBindings/Types/{inner_type_str}Type.g.h")); + } + _ => { + extra_includes.insert(format!("ModuleBindings/Types/{inner_type_str}.g.h")); + } + } +} + +fn optional_ty_init_fmt_impl(cpp_inner_type: &str) -> String { + match cpp_inner_type { + "bool" => " = false".to_string(), + "int8" | "uint8" | "int16" | "uint16" | "int32" | "uint32" | "int64" | "uint64" | "float" | "double" => { + " = 0".to_string() + } + _ => { + if cpp_inner_type.starts_with("E") { + format!(" = static_cast<{}>(0)", cpp_inner_type) + } else { + "".to_string() + } + } + } +} + // Generate the content for an optional type file -fn generate_optional_type(optional_name: &str, module: &ModuleDef, api_macro: &str, module_name: &str) -> String { +fn generate_optional_type( + optional_name: &str, + module_prefix: &str, + module: &ModuleDef, + api_macro: &str, + module_name: &str, +) -> String { // Extract the inner type from the optional name let inner_type_str = optional_name.strip_prefix("Optional").unwrap_or(optional_name); @@ -4104,7 +4485,8 @@ fn generate_optional_type(optional_name: &str, module: &ModuleDef, api_macro: &s _ if inner_type_str.starts_with("Vec") => { // Handle OptionalVecXxx -> should use TArray let elem_type_str = &inner_type_str[3..]; // Remove "Vec" prefix - let cpp_elem_type = get_cpp_type_for_array_element(elem_type_str, module, module_name); + let cpp_elem_type = + get_cpp_type_for_array_element(module_prefix, module, elem_type_str, module, module_name); format!("TArray<{cpp_elem_type}>") } _ => { @@ -4116,7 +4498,8 @@ fn generate_optional_type(optional_name: &str, module: &ModuleDef, api_macro: &s .last() .map(|id| id.deref().to_string()) .unwrap_or_else(|| "Unnamed".to_string()); - type_name == inner_type_str + let prefixed_type_name = format!("{module_prefix}{type_name}"); + prefixed_type_name == inner_type_str && matches!( module.typespace_for_generate()[type_def.ty], AlgebraicTypeDef::PlainEnum(_) @@ -4132,34 +4515,49 @@ fn generate_optional_type(optional_name: &str, module: &ModuleDef, api_macro: &s }; // Determine if we need extra includes - let mut extra_includes = vec![]; + let mut extra_includes = HashSet::new(); match inner_type_str { "Identity" | "ConnectionId" | "Timestamp" | "TimeDuration" | "ScheduleAt" => { - extra_includes.push("Types/Builtins.h".to_string()); + extra_includes.insert("Types/Builtins.h".to_string()); } "Int128" | "UInt128" | "Int256" | "UInt256" => { - extra_includes.push("Types/LargeIntegers.h".to_string()); + extra_includes.insert("Types/LargeIntegers.h".to_string()); } "String" | "Bool" | "Int8" | "UInt8" | "Int16" | "UInt16" | "Int32" | "UInt32" | "Int64" | "UInt64" | "Float" | "Double" | "Array" => { // Basic types, no extra includes needed } + _ if inner_type_str.starts_with("VecOptional") => { + let elem_type_str = &inner_type_str[11..]; // Remove "VecOptional" prefix + let module_name_pascal = module_name.to_case(Case::Pascal); + extra_includes.insert(format!( + "ModuleBindings/Optionals/{module_name_pascal}Optional{elem_type_str}.g.h" + )); + } _ if inner_type_str.starts_with("Vec") => { - // Not required + let elem_type_str = &inner_type_str[3..]; // Remove "Vec" prefix + get_extra_includes_for_type(&mut extra_includes, elem_type_str); + } + _ if inner_type_str.starts_with("OptionalVecOptional") => { + let module_name_pascal = module_name.to_case(Case::Pascal); + extra_includes.insert(format!( + "ModuleBindings/Optionals/{module_name_pascal}{inner_type_str}.g.h" + )); } _ if inner_type_str.starts_with("OptionalVec") => { - // Not required + let elem_type_str = &inner_type_str[11..]; // Remove "OptionalVec" prefix + get_extra_includes_for_type(&mut extra_includes, elem_type_str); } _ if inner_type_str.starts_with("Optional") => { // Nested optional, need its header let module_name_pascal = module_name.to_case(Case::Pascal); - extra_includes.push(format!( + extra_includes.insert(format!( "ModuleBindings/Optionals/{module_name_pascal}{inner_type_str}.g.h" )); } _ if !inner_type_str.starts_with("Int") && !inner_type_str.starts_with("UInt") => { // Custom type, need its header - extra_includes.push(format!("ModuleBindings/Types/{inner_type_str}Type.g.h")); + extra_includes.insert(format!("ModuleBindings/Types/{inner_type_str}Type.g.h")); } _ => {} } @@ -4216,7 +4614,8 @@ fn generate_optional_type(optional_name: &str, module: &ModuleDef, api_macro: &s "// NOTE: {cpp_inner_type} field not exposed to Blueprint due to non-blueprintable elements" ); } - writeln!(output, "{cpp_inner_type} Value;"); + let init_str = optional_ty_init_fmt_impl(cpp_inner_type.as_str()); + writeln!(output, "{cpp_inner_type} Value{init_str};"); writeln!(output); // Constructors @@ -4289,6 +4688,7 @@ fn generate_optional_type(optional_name: &str, module: &ModuleDef, api_macro: &s } fn autogen_cpp_struct( + module_prefix: &str, module: &ModuleDef, name: &str, // Changed to &str product_type: &ProductTypeDef, @@ -4298,7 +4698,7 @@ fn autogen_cpp_struct( let mut headers = HashSet::::new(); for (_, field_ty) in product_type { - collect_includes_for_type(module, field_ty, &mut headers, module_name); + collect_includes_for_type(module_prefix, module, field_ty, &mut headers, module_name); } // Convert to `Vec<&str>` so UnrealCppAutogen::new works @@ -4318,10 +4718,9 @@ fn autogen_cpp_struct( for (orig_name, ty) in product_type.into_iter() { let field_name = orig_name.deref().to_case(Case::Pascal); - let ty_str = cpp_ty_fmt_with_module(module, ty, module_name).to_string(); - let init_str = cpp_ty_init_fmt_impl(ty); + let ty_str = cpp_ty_fmt_with_module(module_prefix, module, ty, module_name).to_string(); + let init_str = cpp_ty_init_fmt_impl(ty, ty_str.as_str()); let field_decl = format!("{ty_str} {field_name}{init_str}"); - // Check if the type is blueprintable if is_blueprintable(module, ty) { writeln!( @@ -4588,6 +4987,7 @@ fn autogen_cpp_enum(name: &str, enum_type: &PlainEnumTypeDef) -> String { } fn autogen_cpp_sum( + module_prefix: &str, module: &ModuleDef, name: &str, sum_type: &SumTypeDef, @@ -4601,7 +5001,7 @@ fn autogen_cpp_sum( /* ------------------------------------------------------------------ */ let mut includes = HashSet::::new(); for (_, alg_ty) in &sum_type.variants { - collect_includes_for_type(module, alg_ty, &mut includes, module_name); + collect_includes_for_type(module_prefix, module, alg_ty, &mut includes, module_name); } includes.insert("Kismet/BlueprintFunctionLibrary.h".to_string()); @@ -4625,7 +5025,7 @@ fn autogen_cpp_sum( let comma = if ix + 1 == sum_type.variants.len() { "" } else { "," }; writeln!(output, " {}{}", variant.to_case(Case::Pascal), comma); - let variant_cpp_type = cpp_ty_fmt_with_module(module, _variant_type, module_name).to_string(); + let variant_cpp_type = cpp_ty_fmt_with_module(module_prefix, module, _variant_type, module_name).to_string(); variant_type.insert(variant_cpp_type); } writeln!(output, "}};\n"); @@ -4661,7 +5061,7 @@ fn autogen_cpp_sum( /* 4a. Static factories per variant -------------------------------- */ for (variant_name, variant_type) in &sum_type.variants { let pas = variant_name.to_case(Case::Pascal); - let variant_cpp_type = cpp_ty_fmt_with_module(module, variant_type, module_name).to_string(); + let variant_cpp_type = cpp_ty_fmt_with_module(module_prefix, module, variant_type, module_name).to_string(); let param_type = format!("const {variant_cpp_type}& "); writeln!(output, " static F{name}Type {pas}({param_type}Value)\n {{"); @@ -4678,7 +5078,7 @@ fn autogen_cpp_sum( /* 4b. Get/Is helpers ---------------------------------------------- */ for (variant_name, variant_type) in &sum_type.variants { let pas = variant_name.to_case(Case::Pascal); - let variant_cpp_type = cpp_ty_fmt_with_module(module, variant_type, module_name).to_string(); + let variant_cpp_type = cpp_ty_fmt_with_module(module_prefix, module, variant_type, module_name).to_string(); // Is* writeln!( @@ -4798,7 +5198,7 @@ fn autogen_cpp_sum( let variant_count = sum_type.variants.len(); for (idx, (variant_name, variant_type)) in sum_type.variants.iter().enumerate() { let variant_pascal = variant_name.to_case(Case::Pascal); - let variant_cpp_type = cpp_ty_fmt_with_module(module, variant_type, module_name).to_string(); + let variant_cpp_type = cpp_ty_fmt_with_module(module_prefix, module, variant_type, module_name).to_string(); if idx < variant_count - 1 { writeln!(output, " {variant_pascal}, {variant_cpp_type},"); @@ -4822,7 +5222,7 @@ fn autogen_cpp_sum( for (variant_name, variant_type) in &sum_type.variants { let pas = variant_name.to_case(Case::Pascal); - let variant_cpp_type = cpp_ty_fmt_with_module(module, variant_type, module_name).to_string(); + let variant_cpp_type = cpp_ty_fmt_with_module(module_prefix, module, variant_type, module_name).to_string(); // ctor functions if is_blueprintable(module, variant_type) { @@ -4895,40 +5295,44 @@ impl IdentifierCasing for Identifier { } fn cpp_ty_fmt_with_module<'a>( + module_prefix: &'a str, module: &'a ModuleDef, ty: &'a AlgebraicTypeUse, module_name: &'a str, ) -> impl fmt::Display + 'a { - cpp_ty_fmt_impl(module, ty, module_name) + cpp_ty_fmt_impl(module_prefix, module, ty, module_name) } fn cpp_ty_fmt_blueprint_compatible<'a>( + module_prefix: &'a str, module: &'a ModuleDef, ty: &'a AlgebraicTypeUse, module_name: &'a str, ) -> impl fmt::Display + 'a { - cpp_ty_fmt_blueprint_impl(module, ty, module_name) + cpp_ty_fmt_blueprint_impl(module_prefix, module, ty, module_name) } fn cpp_ty_fmt_blueprint_impl<'a>( + module_prefix: &'a str, module: &'a ModuleDef, ty: &'a AlgebraicTypeUse, module_name: &'a str, ) -> impl fmt::Display + 'a { fmt_fn(move |f| match ty { AlgebraicTypeUse::Array(elem) => { - let elem_type = cpp_ty_fmt_with_module(module, elem, module_name).to_string(); + let elem_type = cpp_ty_fmt_with_module(module_prefix, module, elem, module_name).to_string(); write!(f, "TArray<{elem_type}>") } // For all other types, use the regular implementation _ => { - let display_obj = cpp_ty_fmt_with_module(module, ty, module_name); + let display_obj = cpp_ty_fmt_with_module(module_prefix, module, ty, module_name); write!(f, "{display_obj}") } }) } fn cpp_ty_fmt_impl<'a>( + module_prefix: &'a str, module: &'a ModuleDef, ty: &'a AlgebraicTypeUse, module_name: &'a str, @@ -4958,7 +5362,7 @@ fn cpp_ty_fmt_impl<'a>( } AlgebraicTypeUse::Array(elem) => { - let elem_type = cpp_ty_fmt_impl(module, elem, module_name).to_string(); + let elem_type = cpp_ty_fmt_impl(module_prefix, module, elem, module_name).to_string(); write!(f, "TArray<{elem_type}>") } @@ -4972,7 +5376,7 @@ fn cpp_ty_fmt_impl<'a>( // --------- references to user-defined types --------- AlgebraicTypeUse::Ref(r) => { - let scoped = type_ref_name(module, *r); // PascalCase + let scoped = type_ref_name(module_prefix, module, *r); // PascalCase match &module.typespace_for_generate()[*r] { AlgebraicTypeDef::PlainEnum(_) => write!(f, "E{scoped}Type"), // enum → EFooType AlgebraicTypeDef::Product(_) => write!(f, "F{scoped}Type"), // struct/record → FFooType @@ -4982,7 +5386,7 @@ fn cpp_ty_fmt_impl<'a>( // Options use the generated optional types AlgebraicTypeUse::Option(inner) => { - let optional_name = get_optional_type_name(module, inner); + let optional_name = get_optional_type_name(module_prefix, module, inner); if module_name.is_empty() { write!(f, "F{optional_name}") } else { @@ -4997,7 +5401,7 @@ fn cpp_ty_fmt_impl<'a>( // For UPROPERTY() Unreal expects initialization values for certain types // (e.g. bools default to true if not explicitly initialized to false). -fn cpp_ty_init_fmt_impl<'a>(ty: &'a AlgebraicTypeUse) -> impl fmt::Display + 'a { +fn cpp_ty_init_fmt_impl<'a>(ty: &'a AlgebraicTypeUse, type_name: &'a str) -> impl fmt::Display + 'a { fmt_fn(move |f| match ty { AlgebraicTypeUse::Primitive(p) => f.write_str(match p { PrimitiveType::Bool => " = false", @@ -5025,7 +5429,15 @@ fn cpp_ty_init_fmt_impl<'a>(ty: &'a AlgebraicTypeUse) -> impl fmt::Display + 'a AlgebraicTypeUse::ScheduleAt => f.write_str(""), AlgebraicTypeUse::Unit => f.write_str(""), // --------- references to user-defined types --------- - AlgebraicTypeUse::Ref(_r) => f.write_str(""), + AlgebraicTypeUse::Ref(_r) => { + if type_name.starts_with("E") { + f.write_str(" = static_cast<") + .and_then(|_| f.write_str(type_name)) + .and_then(|_| f.write_str(">(0)")) + } else { + f.write_str("") + } + } // Options use the generated optional types AlgebraicTypeUse::Option(_inner) => f.write_str(""), AlgebraicTypeUse::Never => unreachable!("never type"), @@ -5035,6 +5447,7 @@ fn cpp_ty_init_fmt_impl<'a>(ty: &'a AlgebraicTypeUse) -> impl fmt::Display + 'a // Given an `AlgebraicTypeUse`, add every referenced type’s generated // header name (`".g.h"`) into `out` (a `HashSet` avoids dups). fn collect_includes_for_type( + module_prefix: &str, module: &ModuleDef, ty: &AlgebraicTypeUse, out: &mut std::collections::HashSet, @@ -5043,20 +5456,23 @@ fn collect_includes_for_type( use AlgebraicTypeUse::*; match ty { Ref(r) => { - let header = format!("ModuleBindings/Types/{}Type.g.h", type_ref_name(module, *r)); + let header = format!( + "ModuleBindings/Types/{}Type.g.h", + type_ref_name(module_prefix, module, *r) + ); out.insert(header); } Option(inner) => { // Add the optional type header - let optional_name = get_optional_type_name(module, inner); + let optional_name = get_optional_type_name(module_prefix, module, inner); let module_name_pascal = module_name.to_case(Case::Pascal); let header = format!("ModuleBindings/Optionals/{module_name_pascal}{optional_name}.g.h"); out.insert(header); // Also collect includes for the inner type - collect_includes_for_type(module, inner, out, module_name); + collect_includes_for_type(module_prefix, module, inner, out, module_name); } Array(inner) => { - collect_includes_for_type(module, inner, out, module_name); + collect_includes_for_type(module_prefix, module, inner, out, module_name); } // Builtin types that require Builtins.h (also includes LargeIntegers.h) Identity | ConnectionId | Timestamp | TimeDuration | ScheduleAt => { @@ -5087,11 +5503,127 @@ fn collect_includes_for_type( } // UnrealCPP-specific type reference name function that preserves original case -fn type_ref_name(module: &ModuleDef, typeref: spacetimedb_lib::sats::AlgebraicTypeRef) -> String { +fn type_ref_name(module_prefix: &str, module: &ModuleDef, typeref: spacetimedb_lib::sats::AlgebraicTypeRef) -> String { let (name, _def) = module.type_def_from_ref(typeref).unwrap(); // Preserve original case instead of applying Pascal case conversion - name.name_segments() + let base_name = name + .name_segments() .last() .map(|id| id.deref().to_string()) - .unwrap_or_else(|| "Unnamed".to_string()) + .unwrap_or_else(|| "Unnamed".to_string()); + + format!("{module_prefix}{base_name}") +} + +fn ensure_module_in_uproject(uproject_dir: &Path, module_name: &str) -> Result<(), String> { + // Find .uproject file + let uproject_file = std::fs::read_dir(uproject_dir) + .map_err(|e| format!("Cannot read uproject directory: {}", e))? + .filter_map(|entry| entry.ok()) + .find(|entry| { + entry + .path() + .extension() + .and_then(|ext| ext.to_str()) + .map(|ext| ext == "uproject") + .unwrap_or(false) + }) + .ok_or("No .uproject file found")?; + + let uproject_path = uproject_file.path(); + + // Read and parse JSON + let content = std::fs::read_to_string(&uproject_path).map_err(|e| format!("Cannot read .uproject file: {}", e))?; + + let mut json: serde_json::Value = + serde_json::from_str(&content).map_err(|e| format!("Invalid JSON in .uproject file: {}", e))?; + + // Ensure Modules array exists + if !json.is_object() { + json = serde_json::json!({}); + } + + let json_obj = json.as_object_mut().unwrap(); + + if !json_obj.contains_key("Modules") { + json_obj.insert("Modules".to_string(), serde_json::Value::Array(vec![])); + } + + let modules = json_obj + .get_mut("Modules") + .and_then(|m| m.as_array_mut()) + .ok_or("Modules is not an array in .uproject file")?; + + // Check if module already exists + let module_exists = modules.iter().any(|module| { + module + .get("Name") + .and_then(|name| name.as_str()) + .map(|name| name == module_name) + .unwrap_or(false) + }); + + // Add module if it doesn't exist + if !module_exists { + let new_module = serde_json::json!({ + "Name": module_name, + "Type": "Runtime", + "LoadingPhase": "Default" + }); + modules.push(new_module); + + // Write back to file with proper formatting + let formatted_json = + serde_json::to_string_pretty(&json).map_err(|e| format!("Failed to serialize JSON: {}", e))?; + + std::fs::write(&uproject_path, formatted_json).map_err(|e| format!("Failed to write .uproject file: {}", e))?; + } + + Ok(()) +} + +fn generate_build_cs_content(module_name: &str) -> String { + format!( + r#"using UnrealBuildTool; + +public class {module_name} : ModuleRules +{{ + public {module_name}(ReadOnlyTargetRules Target) : base(Target) + {{ + PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; + + PublicDependencyModuleNames.AddRange(new string[] {{ + "Core", + "CoreUObject", + "Engine", + "SpacetimeDbSdk" + }}); + + PrivateDependencyModuleNames.AddRange(new string[] {{ + // Add private dependencies here + }}); + }} +}} +"#, + module_name = module_name + ) +} + +fn generate_module_cpp_content(module_name: &str) -> String { + format!( + r#"#include "{module_name}.h" +#include "Modules/ModuleManager.h" + +IMPLEMENT_PRIMARY_GAME_MODULE(FDefaultGameModuleImpl, {module_name}, "{module_name}"); +"#, + module_name = module_name + ) +} + +fn generate_module_h_content(_module_name: &str) -> String { + r#"#pragma once + +#include "CoreMinimal.h" +"# + .to_string() } diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Optionals/TestClientOptionalInt32.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Optionals/TestClientOptionalInt32.g.h index 3fcc5bfdda0..42ef3455607 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Optionals/TestClientOptionalInt32.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Optionals/TestClientOptionalInt32.g.h @@ -15,7 +15,7 @@ struct TESTCLIENT_API FTestClientOptionalInt32 bool bHasValue = false; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB", meta = (EditCondition = "bHasValue")) - int32 Value; + int32 Value = 0; FTestClientOptionalInt32() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Optionals/TestClientOptionalSimpleEnum.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Optionals/TestClientOptionalSimpleEnum.g.h index 4889acee798..237f4fc0e1c 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Optionals/TestClientOptionalSimpleEnum.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Optionals/TestClientOptionalSimpleEnum.g.h @@ -16,7 +16,7 @@ struct TESTCLIENT_API FTestClientOptionalSimpleEnum bool bHasValue = false; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB", meta = (EditCondition = "bHasValue")) - ESimpleEnumType Value; + ESimpleEnumType Value = static_cast(0); FTestClientOptionalSimpleEnum() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Optionals/TestClientOptionalVecOptionalInt32.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Optionals/TestClientOptionalVecOptionalInt32.g.h index 5b896723bc1..e024d59c1c2 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Optionals/TestClientOptionalVecOptionalInt32.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Optionals/TestClientOptionalVecOptionalInt32.g.h @@ -4,6 +4,7 @@ #pragma once #include "CoreMinimal.h" #include "BSATN/UESpacetimeDB.h" +#include "ModuleBindings/Optionals/TestClientOptionalInt32.g.h" #include "TestClientOptionalVecOptionalInt32.g.generated.h" USTRUCT(BlueprintType) diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeleteLargeTable.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeleteLargeTable.g.h index 59824331cbf..f30bbc84bad 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeleteLargeTable.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeleteLargeTable.g.h @@ -21,16 +21,16 @@ struct TESTCLIENT_API FDeleteLargeTableArgs GENERATED_BODY() UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - uint8 A; + uint8 A = 0; // NOTE: uint16 field not exposed to Blueprint due to non-blueprintable elements - uint16 B; + uint16 B = 0; // NOTE: uint32 field not exposed to Blueprint due to non-blueprintable elements - uint32 C; + uint32 C = 0; // NOTE: uint64 field not exposed to Blueprint due to non-blueprintable elements - uint64 D; + uint64 D = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") FSpacetimeDBUInt128 E; @@ -39,16 +39,16 @@ struct TESTCLIENT_API FDeleteLargeTableArgs FSpacetimeDBUInt256 F; // NOTE: int8 field not exposed to Blueprint due to non-blueprintable elements - int8 G; + int8 G = 0; // NOTE: int16 field not exposed to Blueprint due to non-blueprintable elements - int16 H; + int16 H = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 I; + int32 I = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int64 J; + int64 J = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") FSpacetimeDBInt128 K; @@ -57,19 +57,19 @@ struct TESTCLIENT_API FDeleteLargeTableArgs FSpacetimeDBInt256 L; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - bool M; + bool M = false; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - float N; + float N = 0.0f; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - double O; + double O = 0.0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") FString P; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - ESimpleEnumType Q; + ESimpleEnumType Q = static_cast(0); UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") FEnumWithPayloadType R; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkBool.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkBool.g.h index 25e1c0e2aff..95afcbbc2b0 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkBool.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkBool.g.h @@ -14,7 +14,7 @@ struct TESTCLIENT_API FDeletePkBoolArgs GENERATED_BODY() UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - bool B; + bool B = false; FDeletePkBoolArgs() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkI16.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkI16.g.h index 033f1a67a71..4570ab022b6 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkI16.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkI16.g.h @@ -14,7 +14,7 @@ struct TESTCLIENT_API FDeletePkI16Args GENERATED_BODY() // NOTE: int16 field not exposed to Blueprint due to non-blueprintable elements - int16 N; + int16 N = 0; FDeletePkI16Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkI32.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkI32.g.h index d2f8c00c553..264b2f61dd5 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkI32.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkI32.g.h @@ -14,7 +14,7 @@ struct TESTCLIENT_API FDeletePkI32Args GENERATED_BODY() UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 N; + int32 N = 0; FDeletePkI32Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkI64.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkI64.g.h index 58d1d5fe26c..e521a85c3ed 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkI64.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkI64.g.h @@ -14,7 +14,7 @@ struct TESTCLIENT_API FDeletePkI64Args GENERATED_BODY() UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int64 N; + int64 N = 0; FDeletePkI64Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkI8.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkI8.g.h index 90837a2ccdf..0f072ebb732 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkI8.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkI8.g.h @@ -14,7 +14,7 @@ struct TESTCLIENT_API FDeletePkI8Args GENERATED_BODY() // NOTE: int8 field not exposed to Blueprint due to non-blueprintable elements - int8 N; + int8 N = 0; FDeletePkI8Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkU16.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkU16.g.h index ad38cb0d968..d50c70cccc1 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkU16.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkU16.g.h @@ -14,7 +14,7 @@ struct TESTCLIENT_API FDeletePkU16Args GENERATED_BODY() // NOTE: uint16 field not exposed to Blueprint due to non-blueprintable elements - uint16 N; + uint16 N = 0; FDeletePkU16Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkU32.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkU32.g.h index 9c57cfeb826..35c4975edc7 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkU32.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkU32.g.h @@ -14,7 +14,7 @@ struct TESTCLIENT_API FDeletePkU32Args GENERATED_BODY() // NOTE: uint32 field not exposed to Blueprint due to non-blueprintable elements - uint32 N; + uint32 N = 0; FDeletePkU32Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkU32InsertPkU32Two.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkU32InsertPkU32Two.g.h index fb7bc6b401c..6af2e583883 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkU32InsertPkU32Two.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkU32InsertPkU32Two.g.h @@ -14,10 +14,10 @@ struct TESTCLIENT_API FDeletePkU32InsertPkU32TwoArgs GENERATED_BODY() // NOTE: uint32 field not exposed to Blueprint due to non-blueprintable elements - uint32 N; + uint32 N = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FDeletePkU32InsertPkU32TwoArgs() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkU32Two.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkU32Two.g.h index ba2958a8318..edc8b62e19c 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkU32Two.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkU32Two.g.h @@ -14,7 +14,7 @@ struct TESTCLIENT_API FDeletePkU32TwoArgs GENERATED_BODY() // NOTE: uint32 field not exposed to Blueprint due to non-blueprintable elements - uint32 N; + uint32 N = 0; FDeletePkU32TwoArgs() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkU64.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkU64.g.h index 9896bd42c37..fc94b242f13 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkU64.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkU64.g.h @@ -14,7 +14,7 @@ struct TESTCLIENT_API FDeletePkU64Args GENERATED_BODY() // NOTE: uint64 field not exposed to Blueprint due to non-blueprintable elements - uint64 N; + uint64 N = 0; FDeletePkU64Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkU8.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkU8.g.h index bdeb42e70b3..3254b8c0157 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkU8.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeletePkU8.g.h @@ -14,7 +14,7 @@ struct TESTCLIENT_API FDeletePkU8Args GENERATED_BODY() UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - uint8 N; + uint8 N = 0; FDeletePkU8Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeleteUniqueBool.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeleteUniqueBool.g.h index c9a8a1573fa..e52fa7a4f6f 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeleteUniqueBool.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeleteUniqueBool.g.h @@ -14,7 +14,7 @@ struct TESTCLIENT_API FDeleteUniqueBoolArgs GENERATED_BODY() UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - bool B; + bool B = false; FDeleteUniqueBoolArgs() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeleteUniqueI16.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeleteUniqueI16.g.h index 5f4e34d8770..07a429a1eab 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeleteUniqueI16.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeleteUniqueI16.g.h @@ -14,7 +14,7 @@ struct TESTCLIENT_API FDeleteUniqueI16Args GENERATED_BODY() // NOTE: int16 field not exposed to Blueprint due to non-blueprintable elements - int16 N; + int16 N = 0; FDeleteUniqueI16Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeleteUniqueI32.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeleteUniqueI32.g.h index 6167f785140..a0d971e9cea 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeleteUniqueI32.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeleteUniqueI32.g.h @@ -14,7 +14,7 @@ struct TESTCLIENT_API FDeleteUniqueI32Args GENERATED_BODY() UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 N; + int32 N = 0; FDeleteUniqueI32Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeleteUniqueI64.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeleteUniqueI64.g.h index 33d73a6e70e..fdb5b17ac8d 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeleteUniqueI64.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeleteUniqueI64.g.h @@ -14,7 +14,7 @@ struct TESTCLIENT_API FDeleteUniqueI64Args GENERATED_BODY() UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int64 N; + int64 N = 0; FDeleteUniqueI64Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeleteUniqueI8.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeleteUniqueI8.g.h index d5e613e53fa..7b805458427 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeleteUniqueI8.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeleteUniqueI8.g.h @@ -14,7 +14,7 @@ struct TESTCLIENT_API FDeleteUniqueI8Args GENERATED_BODY() // NOTE: int8 field not exposed to Blueprint due to non-blueprintable elements - int8 N; + int8 N = 0; FDeleteUniqueI8Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeleteUniqueU16.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeleteUniqueU16.g.h index e067c011bd5..c22a78dd4e7 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeleteUniqueU16.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeleteUniqueU16.g.h @@ -14,7 +14,7 @@ struct TESTCLIENT_API FDeleteUniqueU16Args GENERATED_BODY() // NOTE: uint16 field not exposed to Blueprint due to non-blueprintable elements - uint16 N; + uint16 N = 0; FDeleteUniqueU16Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeleteUniqueU32.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeleteUniqueU32.g.h index 783621f9434..8e62f5f88f8 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeleteUniqueU32.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeleteUniqueU32.g.h @@ -14,7 +14,7 @@ struct TESTCLIENT_API FDeleteUniqueU32Args GENERATED_BODY() // NOTE: uint32 field not exposed to Blueprint due to non-blueprintable elements - uint32 N; + uint32 N = 0; FDeleteUniqueU32Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeleteUniqueU64.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeleteUniqueU64.g.h index 6e9aa4a89b3..6a63cfdce19 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeleteUniqueU64.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeleteUniqueU64.g.h @@ -14,7 +14,7 @@ struct TESTCLIENT_API FDeleteUniqueU64Args GENERATED_BODY() // NOTE: uint64 field not exposed to Blueprint due to non-blueprintable elements - uint64 N; + uint64 N = 0; FDeleteUniqueU64Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeleteUniqueU8.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeleteUniqueU8.g.h index d83f8fce7a0..5ab830321c6 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeleteUniqueU8.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/DeleteUniqueU8.g.h @@ -14,7 +14,7 @@ struct TESTCLIENT_API FDeleteUniqueU8Args GENERATED_BODY() UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - uint8 N; + uint8 N = 0; FDeleteUniqueU8Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertCallerPkConnectionId.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertCallerPkConnectionId.g.h index 9da7fa1ef88..121d697f6df 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertCallerPkConnectionId.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertCallerPkConnectionId.g.h @@ -14,7 +14,7 @@ struct TESTCLIENT_API FInsertCallerPkConnectionIdArgs GENERATED_BODY() UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FInsertCallerPkConnectionIdArgs() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertCallerPkIdentity.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertCallerPkIdentity.g.h index 888606a0763..b695579b6e4 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertCallerPkIdentity.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertCallerPkIdentity.g.h @@ -14,7 +14,7 @@ struct TESTCLIENT_API FInsertCallerPkIdentityArgs GENERATED_BODY() UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FInsertCallerPkIdentityArgs() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertCallerUniqueConnectionId.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertCallerUniqueConnectionId.g.h index 50342be7d15..6f003235da8 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertCallerUniqueConnectionId.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertCallerUniqueConnectionId.g.h @@ -14,7 +14,7 @@ struct TESTCLIENT_API FInsertCallerUniqueConnectionIdArgs GENERATED_BODY() UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FInsertCallerUniqueConnectionIdArgs() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertCallerUniqueIdentity.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertCallerUniqueIdentity.g.h index 1fb2d4ae1a3..0fd48c1cbb8 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertCallerUniqueIdentity.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertCallerUniqueIdentity.g.h @@ -14,7 +14,7 @@ struct TESTCLIENT_API FInsertCallerUniqueIdentityArgs GENERATED_BODY() UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FInsertCallerUniqueIdentityArgs() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertIntoIndexedSimpleEnum.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertIntoIndexedSimpleEnum.g.h index feb218fcc7d..676bad6cae0 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertIntoIndexedSimpleEnum.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertIntoIndexedSimpleEnum.g.h @@ -15,7 +15,7 @@ struct TESTCLIENT_API FInsertIntoIndexedSimpleEnumArgs GENERATED_BODY() UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - ESimpleEnumType N; + ESimpleEnumType N = static_cast(0); FInsertIntoIndexedSimpleEnumArgs() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertLargeTable.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertLargeTable.g.h index cc7414a19fb..7fa2b9f49be 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertLargeTable.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertLargeTable.g.h @@ -21,16 +21,16 @@ struct TESTCLIENT_API FInsertLargeTableArgs GENERATED_BODY() UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - uint8 A; + uint8 A = 0; // NOTE: uint16 field not exposed to Blueprint due to non-blueprintable elements - uint16 B; + uint16 B = 0; // NOTE: uint32 field not exposed to Blueprint due to non-blueprintable elements - uint32 C; + uint32 C = 0; // NOTE: uint64 field not exposed to Blueprint due to non-blueprintable elements - uint64 D; + uint64 D = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") FSpacetimeDBUInt128 E; @@ -39,16 +39,16 @@ struct TESTCLIENT_API FInsertLargeTableArgs FSpacetimeDBUInt256 F; // NOTE: int8 field not exposed to Blueprint due to non-blueprintable elements - int8 G; + int8 G = 0; // NOTE: int16 field not exposed to Blueprint due to non-blueprintable elements - int16 H; + int16 H = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 I; + int32 I = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int64 J; + int64 J = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") FSpacetimeDBInt128 K; @@ -57,19 +57,19 @@ struct TESTCLIENT_API FInsertLargeTableArgs FSpacetimeDBInt256 L; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - bool M; + bool M = false; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - float N; + float N = 0.0f; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - double O; + double O = 0.0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") FString P; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - ESimpleEnumType Q; + ESimpleEnumType Q = static_cast(0); UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") FEnumWithPayloadType R; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneBool.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneBool.g.h index aec69d4e6aa..d66b4b6d1b5 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneBool.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneBool.g.h @@ -14,7 +14,7 @@ struct TESTCLIENT_API FInsertOneBoolArgs GENERATED_BODY() UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - bool B; + bool B = false; FInsertOneBoolArgs() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneF32.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneF32.g.h index 4777f461882..d64799a1245 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneF32.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneF32.g.h @@ -14,7 +14,7 @@ struct TESTCLIENT_API FInsertOneF32Args GENERATED_BODY() UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - float F; + float F = 0.0f; FInsertOneF32Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneF64.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneF64.g.h index ba465b082c1..8a919cc1c46 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneF64.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneF64.g.h @@ -14,7 +14,7 @@ struct TESTCLIENT_API FInsertOneF64Args GENERATED_BODY() UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - double F; + double F = 0.0; FInsertOneF64Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneI16.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneI16.g.h index 3d03f093a0f..f5b76621537 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneI16.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneI16.g.h @@ -14,7 +14,7 @@ struct TESTCLIENT_API FInsertOneI16Args GENERATED_BODY() // NOTE: int16 field not exposed to Blueprint due to non-blueprintable elements - int16 N; + int16 N = 0; FInsertOneI16Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneI32.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneI32.g.h index 45b3cc4d105..6139a001b13 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneI32.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneI32.g.h @@ -14,7 +14,7 @@ struct TESTCLIENT_API FInsertOneI32Args GENERATED_BODY() UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 N; + int32 N = 0; FInsertOneI32Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneI64.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneI64.g.h index 9ed638daeed..3a7623ed903 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneI64.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneI64.g.h @@ -14,7 +14,7 @@ struct TESTCLIENT_API FInsertOneI64Args GENERATED_BODY() UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int64 N; + int64 N = 0; FInsertOneI64Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneI8.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneI8.g.h index 088c8d180bd..f3794258a86 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneI8.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneI8.g.h @@ -14,7 +14,7 @@ struct TESTCLIENT_API FInsertOneI8Args GENERATED_BODY() // NOTE: int8 field not exposed to Blueprint due to non-blueprintable elements - int8 N; + int8 N = 0; FInsertOneI8Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneSimpleEnum.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneSimpleEnum.g.h index 8cac0a1405d..73a502fac2c 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneSimpleEnum.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneSimpleEnum.g.h @@ -15,7 +15,7 @@ struct TESTCLIENT_API FInsertOneSimpleEnumArgs GENERATED_BODY() UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - ESimpleEnumType E; + ESimpleEnumType E = static_cast(0); FInsertOneSimpleEnumArgs() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneU16.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneU16.g.h index c3bda020b77..83ecf8d5142 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneU16.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneU16.g.h @@ -14,7 +14,7 @@ struct TESTCLIENT_API FInsertOneU16Args GENERATED_BODY() // NOTE: uint16 field not exposed to Blueprint due to non-blueprintable elements - uint16 N; + uint16 N = 0; FInsertOneU16Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneU32.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneU32.g.h index 076bf6f8d0e..64453ce346b 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneU32.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneU32.g.h @@ -14,7 +14,7 @@ struct TESTCLIENT_API FInsertOneU32Args GENERATED_BODY() // NOTE: uint32 field not exposed to Blueprint due to non-blueprintable elements - uint32 N; + uint32 N = 0; FInsertOneU32Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneU64.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneU64.g.h index 485ceca3b79..e654b865fc0 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneU64.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneU64.g.h @@ -14,7 +14,7 @@ struct TESTCLIENT_API FInsertOneU64Args GENERATED_BODY() // NOTE: uint64 field not exposed to Blueprint due to non-blueprintable elements - uint64 N; + uint64 N = 0; FInsertOneU64Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneU8.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneU8.g.h index bcdae01d7fa..d2c0da26b11 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneU8.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertOneU8.g.h @@ -14,7 +14,7 @@ struct TESTCLIENT_API FInsertOneU8Args GENERATED_BODY() UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - uint8 N; + uint8 N = 0; FInsertOneU8Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkBool.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkBool.g.h index 2e82ac31691..1561b6e5fbb 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkBool.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkBool.g.h @@ -14,10 +14,10 @@ struct TESTCLIENT_API FInsertPkBoolArgs GENERATED_BODY() UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - bool B; + bool B = false; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FInsertPkBoolArgs() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkConnectionId.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkConnectionId.g.h index 6cdf10ae644..4cff6da2bda 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkConnectionId.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkConnectionId.g.h @@ -18,7 +18,7 @@ struct TESTCLIENT_API FInsertPkConnectionIdArgs FSpacetimeDBConnectionId A; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FInsertPkConnectionIdArgs() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkI128.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkI128.g.h index 2247cbcc275..785ec11c128 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkI128.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkI128.g.h @@ -18,7 +18,7 @@ struct TESTCLIENT_API FInsertPkI128Args FSpacetimeDBInt128 N; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FInsertPkI128Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkI16.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkI16.g.h index e2d71c39f41..25195366ab5 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkI16.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkI16.g.h @@ -14,10 +14,10 @@ struct TESTCLIENT_API FInsertPkI16Args GENERATED_BODY() // NOTE: int16 field not exposed to Blueprint due to non-blueprintable elements - int16 N; + int16 N = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FInsertPkI16Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkI256.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkI256.g.h index 12dc1af35bd..47aaa45c33e 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkI256.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkI256.g.h @@ -18,7 +18,7 @@ struct TESTCLIENT_API FInsertPkI256Args FSpacetimeDBInt256 N; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FInsertPkI256Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkI32.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkI32.g.h index 1879cca6fb8..8a5b9e98a63 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkI32.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkI32.g.h @@ -14,10 +14,10 @@ struct TESTCLIENT_API FInsertPkI32Args GENERATED_BODY() UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 N; + int32 N = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FInsertPkI32Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkI64.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkI64.g.h index f09e8ab50c7..412ecc32995 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkI64.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkI64.g.h @@ -14,10 +14,10 @@ struct TESTCLIENT_API FInsertPkI64Args GENERATED_BODY() UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int64 N; + int64 N = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FInsertPkI64Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkI8.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkI8.g.h index f5c975a0be3..2a505eaf36e 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkI8.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkI8.g.h @@ -14,10 +14,10 @@ struct TESTCLIENT_API FInsertPkI8Args GENERATED_BODY() // NOTE: int8 field not exposed to Blueprint due to non-blueprintable elements - int8 N; + int8 N = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FInsertPkI8Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkIdentity.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkIdentity.g.h index 27c6ef102f4..e95659ed78b 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkIdentity.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkIdentity.g.h @@ -18,7 +18,7 @@ struct TESTCLIENT_API FInsertPkIdentityArgs FSpacetimeDBIdentity I; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FInsertPkIdentityArgs() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkSimpleEnum.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkSimpleEnum.g.h index a906da03cc3..ca463efcdcc 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkSimpleEnum.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkSimpleEnum.g.h @@ -15,10 +15,10 @@ struct TESTCLIENT_API FInsertPkSimpleEnumArgs GENERATED_BODY() UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - ESimpleEnumType A; + ESimpleEnumType A = static_cast(0); UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FInsertPkSimpleEnumArgs() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkString.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkString.g.h index e980118776c..ce6bc896992 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkString.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkString.g.h @@ -17,7 +17,7 @@ struct TESTCLIENT_API FInsertPkStringArgs FString S; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FInsertPkStringArgs() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkU128.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkU128.g.h index c5bf0e0657c..50b3e3d13eb 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkU128.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkU128.g.h @@ -18,7 +18,7 @@ struct TESTCLIENT_API FInsertPkU128Args FSpacetimeDBUInt128 N; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FInsertPkU128Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkU16.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkU16.g.h index 4975162171c..d3630afc0ee 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkU16.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkU16.g.h @@ -14,10 +14,10 @@ struct TESTCLIENT_API FInsertPkU16Args GENERATED_BODY() // NOTE: uint16 field not exposed to Blueprint due to non-blueprintable elements - uint16 N; + uint16 N = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FInsertPkU16Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkU256.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkU256.g.h index 3c7a5409db2..231def9a055 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkU256.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkU256.g.h @@ -18,7 +18,7 @@ struct TESTCLIENT_API FInsertPkU256Args FSpacetimeDBUInt256 N; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FInsertPkU256Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkU32.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkU32.g.h index 0c441669838..32b69d0a7b1 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkU32.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkU32.g.h @@ -14,10 +14,10 @@ struct TESTCLIENT_API FInsertPkU32Args GENERATED_BODY() // NOTE: uint32 field not exposed to Blueprint due to non-blueprintable elements - uint32 N; + uint32 N = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FInsertPkU32Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkU32Two.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkU32Two.g.h index 40f3a34f828..af06aeb83e1 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkU32Two.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkU32Two.g.h @@ -14,10 +14,10 @@ struct TESTCLIENT_API FInsertPkU32TwoArgs GENERATED_BODY() // NOTE: uint32 field not exposed to Blueprint due to non-blueprintable elements - uint32 N; + uint32 N = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FInsertPkU32TwoArgs() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkU64.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkU64.g.h index 2e6246d7c2e..11e91f8d47d 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkU64.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkU64.g.h @@ -14,10 +14,10 @@ struct TESTCLIENT_API FInsertPkU64Args GENERATED_BODY() // NOTE: uint64 field not exposed to Blueprint due to non-blueprintable elements - uint64 N; + uint64 N = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FInsertPkU64Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkU8.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkU8.g.h index 53b7dcdaf0e..de09721a0c1 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkU8.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertPkU8.g.h @@ -14,10 +14,10 @@ struct TESTCLIENT_API FInsertPkU8Args GENERATED_BODY() UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - uint8 N; + uint8 N = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FInsertPkU8Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueBool.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueBool.g.h index d67afcbd9b6..0035b487d23 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueBool.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueBool.g.h @@ -14,10 +14,10 @@ struct TESTCLIENT_API FInsertUniqueBoolArgs GENERATED_BODY() UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - bool B; + bool B = false; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FInsertUniqueBoolArgs() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueConnectionId.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueConnectionId.g.h index 78e7012edba..30a5ce933b1 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueConnectionId.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueConnectionId.g.h @@ -18,7 +18,7 @@ struct TESTCLIENT_API FInsertUniqueConnectionIdArgs FSpacetimeDBConnectionId A; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FInsertUniqueConnectionIdArgs() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueI128.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueI128.g.h index 5f295565bf7..1edb455f223 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueI128.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueI128.g.h @@ -18,7 +18,7 @@ struct TESTCLIENT_API FInsertUniqueI128Args FSpacetimeDBInt128 N; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FInsertUniqueI128Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueI16.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueI16.g.h index ae9aec9046d..a708ff3664f 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueI16.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueI16.g.h @@ -14,10 +14,10 @@ struct TESTCLIENT_API FInsertUniqueI16Args GENERATED_BODY() // NOTE: int16 field not exposed to Blueprint due to non-blueprintable elements - int16 N; + int16 N = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FInsertUniqueI16Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueI256.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueI256.g.h index b1c4d4fb25c..a93ad910155 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueI256.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueI256.g.h @@ -18,7 +18,7 @@ struct TESTCLIENT_API FInsertUniqueI256Args FSpacetimeDBInt256 N; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FInsertUniqueI256Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueI32.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueI32.g.h index c812bb58f6e..767a031f106 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueI32.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueI32.g.h @@ -14,10 +14,10 @@ struct TESTCLIENT_API FInsertUniqueI32Args GENERATED_BODY() UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 N; + int32 N = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FInsertUniqueI32Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueI64.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueI64.g.h index b427f4885e6..55e0b2ed5a9 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueI64.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueI64.g.h @@ -14,10 +14,10 @@ struct TESTCLIENT_API FInsertUniqueI64Args GENERATED_BODY() UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int64 N; + int64 N = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FInsertUniqueI64Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueI8.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueI8.g.h index fc585f2484b..4c7c0e2d528 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueI8.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueI8.g.h @@ -14,10 +14,10 @@ struct TESTCLIENT_API FInsertUniqueI8Args GENERATED_BODY() // NOTE: int8 field not exposed to Blueprint due to non-blueprintable elements - int8 N; + int8 N = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FInsertUniqueI8Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueIdentity.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueIdentity.g.h index 139fb2fec21..26308331d7d 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueIdentity.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueIdentity.g.h @@ -18,7 +18,7 @@ struct TESTCLIENT_API FInsertUniqueIdentityArgs FSpacetimeDBIdentity I; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FInsertUniqueIdentityArgs() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueString.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueString.g.h index fd4beb2d9b6..42987dda511 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueString.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueString.g.h @@ -17,7 +17,7 @@ struct TESTCLIENT_API FInsertUniqueStringArgs FString S; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FInsertUniqueStringArgs() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueU128.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueU128.g.h index 3620b201f3f..e310039f481 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueU128.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueU128.g.h @@ -18,7 +18,7 @@ struct TESTCLIENT_API FInsertUniqueU128Args FSpacetimeDBUInt128 N; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FInsertUniqueU128Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueU16.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueU16.g.h index 45e6a25129d..7969d3d6cb4 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueU16.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueU16.g.h @@ -14,10 +14,10 @@ struct TESTCLIENT_API FInsertUniqueU16Args GENERATED_BODY() // NOTE: uint16 field not exposed to Blueprint due to non-blueprintable elements - uint16 N; + uint16 N = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FInsertUniqueU16Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueU256.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueU256.g.h index da682ff5fba..4553e69f3ac 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueU256.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueU256.g.h @@ -18,7 +18,7 @@ struct TESTCLIENT_API FInsertUniqueU256Args FSpacetimeDBUInt256 N; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FInsertUniqueU256Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueU32.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueU32.g.h index edceb8e1b20..348a3f45ece 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueU32.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueU32.g.h @@ -14,10 +14,10 @@ struct TESTCLIENT_API FInsertUniqueU32Args GENERATED_BODY() // NOTE: uint32 field not exposed to Blueprint due to non-blueprintable elements - uint32 N; + uint32 N = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FInsertUniqueU32Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueU32UpdatePkU32.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueU32UpdatePkU32.g.h index 4043ae8f749..9bdeb219827 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueU32UpdatePkU32.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueU32UpdatePkU32.g.h @@ -14,13 +14,13 @@ struct TESTCLIENT_API FInsertUniqueU32UpdatePkU32Args GENERATED_BODY() // NOTE: uint32 field not exposed to Blueprint due to non-blueprintable elements - uint32 N; + uint32 N = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 DUnique; + int32 DUnique = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 DPk; + int32 DPk = 0; FInsertUniqueU32UpdatePkU32Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueU64.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueU64.g.h index 5bd306f7465..e8c78dcce9f 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueU64.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueU64.g.h @@ -14,10 +14,10 @@ struct TESTCLIENT_API FInsertUniqueU64Args GENERATED_BODY() // NOTE: uint64 field not exposed to Blueprint due to non-blueprintable elements - uint64 N; + uint64 N = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FInsertUniqueU64Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueU8.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueU8.g.h index 0661985e02f..0bc2cc757cb 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueU8.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/InsertUniqueU8.g.h @@ -14,10 +14,10 @@ struct TESTCLIENT_API FInsertUniqueU8Args GENERATED_BODY() UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - uint8 N; + uint8 N = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FInsertUniqueU8Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateIndexedSimpleEnum.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateIndexedSimpleEnum.g.h index a5cd1606efa..9e5b8db5151 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateIndexedSimpleEnum.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateIndexedSimpleEnum.g.h @@ -15,10 +15,10 @@ struct TESTCLIENT_API FUpdateIndexedSimpleEnumArgs GENERATED_BODY() UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - ESimpleEnumType A; + ESimpleEnumType A = static_cast(0); UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - ESimpleEnumType B; + ESimpleEnumType B = static_cast(0); FUpdateIndexedSimpleEnumArgs() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkBool.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkBool.g.h index 8c68f39bd67..c97388b3295 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkBool.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkBool.g.h @@ -14,10 +14,10 @@ struct TESTCLIENT_API FUpdatePkBoolArgs GENERATED_BODY() UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - bool B; + bool B = false; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FUpdatePkBoolArgs() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkConnectionId.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkConnectionId.g.h index 312230cdb12..10a1ffa8e56 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkConnectionId.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkConnectionId.g.h @@ -18,7 +18,7 @@ struct TESTCLIENT_API FUpdatePkConnectionIdArgs FSpacetimeDBConnectionId A; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FUpdatePkConnectionIdArgs() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkI128.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkI128.g.h index ed75d512bf9..e3a4348102f 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkI128.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkI128.g.h @@ -18,7 +18,7 @@ struct TESTCLIENT_API FUpdatePkI128Args FSpacetimeDBInt128 N; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FUpdatePkI128Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkI16.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkI16.g.h index f3d66144a28..71ee222eee0 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkI16.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkI16.g.h @@ -14,10 +14,10 @@ struct TESTCLIENT_API FUpdatePkI16Args GENERATED_BODY() // NOTE: int16 field not exposed to Blueprint due to non-blueprintable elements - int16 N; + int16 N = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FUpdatePkI16Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkI256.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkI256.g.h index 2e6ae69366a..067e2da86cf 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkI256.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkI256.g.h @@ -18,7 +18,7 @@ struct TESTCLIENT_API FUpdatePkI256Args FSpacetimeDBInt256 N; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FUpdatePkI256Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkI32.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkI32.g.h index f2f1c06b646..e89c78900d1 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkI32.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkI32.g.h @@ -14,10 +14,10 @@ struct TESTCLIENT_API FUpdatePkI32Args GENERATED_BODY() UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 N; + int32 N = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FUpdatePkI32Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkI64.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkI64.g.h index b06c48638a1..601d1860706 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkI64.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkI64.g.h @@ -14,10 +14,10 @@ struct TESTCLIENT_API FUpdatePkI64Args GENERATED_BODY() UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int64 N; + int64 N = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FUpdatePkI64Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkI8.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkI8.g.h index 9f80bbd2758..beac0ffaeae 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkI8.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkI8.g.h @@ -14,10 +14,10 @@ struct TESTCLIENT_API FUpdatePkI8Args GENERATED_BODY() // NOTE: int8 field not exposed to Blueprint due to non-blueprintable elements - int8 N; + int8 N = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FUpdatePkI8Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkIdentity.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkIdentity.g.h index 1922d275bb9..e90af0a55b4 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkIdentity.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkIdentity.g.h @@ -18,7 +18,7 @@ struct TESTCLIENT_API FUpdatePkIdentityArgs FSpacetimeDBIdentity I; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FUpdatePkIdentityArgs() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkSimpleEnum.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkSimpleEnum.g.h index 18db2b63fd6..e63e59c17d5 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkSimpleEnum.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkSimpleEnum.g.h @@ -15,10 +15,10 @@ struct TESTCLIENT_API FUpdatePkSimpleEnumArgs GENERATED_BODY() UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - ESimpleEnumType A; + ESimpleEnumType A = static_cast(0); UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FUpdatePkSimpleEnumArgs() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkString.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkString.g.h index 4e06bb78fad..19ef79ec38d 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkString.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkString.g.h @@ -17,7 +17,7 @@ struct TESTCLIENT_API FUpdatePkStringArgs FString S; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FUpdatePkStringArgs() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkU128.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkU128.g.h index 2f7743a0755..fbc15e79ca1 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkU128.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkU128.g.h @@ -18,7 +18,7 @@ struct TESTCLIENT_API FUpdatePkU128Args FSpacetimeDBUInt128 N; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FUpdatePkU128Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkU16.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkU16.g.h index 722555f3ebc..6dfa007c664 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkU16.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkU16.g.h @@ -14,10 +14,10 @@ struct TESTCLIENT_API FUpdatePkU16Args GENERATED_BODY() // NOTE: uint16 field not exposed to Blueprint due to non-blueprintable elements - uint16 N; + uint16 N = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FUpdatePkU16Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkU256.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkU256.g.h index 222316c5d12..9ab08a8ddcc 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkU256.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkU256.g.h @@ -18,7 +18,7 @@ struct TESTCLIENT_API FUpdatePkU256Args FSpacetimeDBUInt256 N; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FUpdatePkU256Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkU32.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkU32.g.h index 8554674322f..b887e4c1186 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkU32.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkU32.g.h @@ -14,10 +14,10 @@ struct TESTCLIENT_API FUpdatePkU32Args GENERATED_BODY() // NOTE: uint32 field not exposed to Blueprint due to non-blueprintable elements - uint32 N; + uint32 N = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FUpdatePkU32Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkU32Two.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkU32Two.g.h index 7e7b9c127ac..775e7386c11 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkU32Two.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkU32Two.g.h @@ -14,10 +14,10 @@ struct TESTCLIENT_API FUpdatePkU32TwoArgs GENERATED_BODY() // NOTE: uint32 field not exposed to Blueprint due to non-blueprintable elements - uint32 N; + uint32 N = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FUpdatePkU32TwoArgs() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkU64.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkU64.g.h index aab1941e3eb..7e09e84be36 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkU64.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkU64.g.h @@ -14,10 +14,10 @@ struct TESTCLIENT_API FUpdatePkU64Args GENERATED_BODY() // NOTE: uint64 field not exposed to Blueprint due to non-blueprintable elements - uint64 N; + uint64 N = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FUpdatePkU64Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkU8.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkU8.g.h index 89b1ca7687f..e63cc661d27 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkU8.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdatePkU8.g.h @@ -14,10 +14,10 @@ struct TESTCLIENT_API FUpdatePkU8Args GENERATED_BODY() UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - uint8 N; + uint8 N = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FUpdatePkU8Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueBool.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueBool.g.h index 50519d529b7..4d528f3ac86 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueBool.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueBool.g.h @@ -14,10 +14,10 @@ struct TESTCLIENT_API FUpdateUniqueBoolArgs GENERATED_BODY() UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - bool B; + bool B = false; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FUpdateUniqueBoolArgs() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueConnectionId.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueConnectionId.g.h index 4cb4d980de6..4c61fb2bce4 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueConnectionId.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueConnectionId.g.h @@ -18,7 +18,7 @@ struct TESTCLIENT_API FUpdateUniqueConnectionIdArgs FSpacetimeDBConnectionId A; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FUpdateUniqueConnectionIdArgs() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueI128.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueI128.g.h index 840c31f2224..e513bb61352 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueI128.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueI128.g.h @@ -18,7 +18,7 @@ struct TESTCLIENT_API FUpdateUniqueI128Args FSpacetimeDBInt128 N; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FUpdateUniqueI128Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueI16.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueI16.g.h index 00bedeb3c46..a64cfe15892 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueI16.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueI16.g.h @@ -14,10 +14,10 @@ struct TESTCLIENT_API FUpdateUniqueI16Args GENERATED_BODY() // NOTE: int16 field not exposed to Blueprint due to non-blueprintable elements - int16 N; + int16 N = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FUpdateUniqueI16Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueI256.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueI256.g.h index 6bda00d747c..41cb36e705f 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueI256.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueI256.g.h @@ -18,7 +18,7 @@ struct TESTCLIENT_API FUpdateUniqueI256Args FSpacetimeDBInt256 N; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FUpdateUniqueI256Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueI32.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueI32.g.h index 526b7d276ab..04de33de363 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueI32.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueI32.g.h @@ -14,10 +14,10 @@ struct TESTCLIENT_API FUpdateUniqueI32Args GENERATED_BODY() UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 N; + int32 N = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FUpdateUniqueI32Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueI64.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueI64.g.h index 63ae2597aff..25c46a08ae5 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueI64.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueI64.g.h @@ -14,10 +14,10 @@ struct TESTCLIENT_API FUpdateUniqueI64Args GENERATED_BODY() UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int64 N; + int64 N = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FUpdateUniqueI64Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueI8.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueI8.g.h index 647bde6e06b..ffbf2852c66 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueI8.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueI8.g.h @@ -14,10 +14,10 @@ struct TESTCLIENT_API FUpdateUniqueI8Args GENERATED_BODY() // NOTE: int8 field not exposed to Blueprint due to non-blueprintable elements - int8 N; + int8 N = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FUpdateUniqueI8Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueIdentity.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueIdentity.g.h index 1ddf459dfc6..8a0175c5889 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueIdentity.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueIdentity.g.h @@ -18,7 +18,7 @@ struct TESTCLIENT_API FUpdateUniqueIdentityArgs FSpacetimeDBIdentity I; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FUpdateUniqueIdentityArgs() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueString.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueString.g.h index 7dc1ad2da86..88bbe270ed2 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueString.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueString.g.h @@ -17,7 +17,7 @@ struct TESTCLIENT_API FUpdateUniqueStringArgs FString S; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FUpdateUniqueStringArgs() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueU128.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueU128.g.h index 7d1f015faa1..7431b571efe 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueU128.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueU128.g.h @@ -18,7 +18,7 @@ struct TESTCLIENT_API FUpdateUniqueU128Args FSpacetimeDBUInt128 N; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FUpdateUniqueU128Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueU16.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueU16.g.h index 3d73b91b099..86ef81bc467 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueU16.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueU16.g.h @@ -14,10 +14,10 @@ struct TESTCLIENT_API FUpdateUniqueU16Args GENERATED_BODY() // NOTE: uint16 field not exposed to Blueprint due to non-blueprintable elements - uint16 N; + uint16 N = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FUpdateUniqueU16Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueU256.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueU256.g.h index dadb65e86f0..5452c9c2965 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueU256.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueU256.g.h @@ -18,7 +18,7 @@ struct TESTCLIENT_API FUpdateUniqueU256Args FSpacetimeDBUInt256 N; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FUpdateUniqueU256Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueU32.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueU32.g.h index 44996e2649e..68a7e365b6d 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueU32.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueU32.g.h @@ -14,10 +14,10 @@ struct TESTCLIENT_API FUpdateUniqueU32Args GENERATED_BODY() // NOTE: uint32 field not exposed to Blueprint due to non-blueprintable elements - uint32 N; + uint32 N = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FUpdateUniqueU32Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueU64.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueU64.g.h index bec5bfe8f18..ba16a78a067 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueU64.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueU64.g.h @@ -14,10 +14,10 @@ struct TESTCLIENT_API FUpdateUniqueU64Args GENERATED_BODY() // NOTE: uint64 field not exposed to Blueprint due to non-blueprintable elements - uint64 N; + uint64 N = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FUpdateUniqueU64Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueU8.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueU8.g.h index 3087615ced7..2f6ecdd803b 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueU8.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Reducers/UpdateUniqueU8.g.h @@ -14,10 +14,10 @@ struct TESTCLIENT_API FUpdateUniqueU8Args GENERATED_BODY() UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - uint8 N; + uint8 N = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") - int32 Data; + int32 Data = 0; FUpdateUniqueU8Args() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/SpacetimeDBClient.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/SpacetimeDBClient.g.h index 1c8ea7c5302..98bd2656bf4 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/SpacetimeDBClient.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/SpacetimeDBClient.g.h @@ -1,7 +1,7 @@ // THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE // WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. -// This was generated using spacetimedb cli version 1.8.0 (commit 4d8a5e04dbbe4e58453022d7f69daea291cef863). +// This was generated using spacetimedb cli version 1.11.0 (commit 42a91437090bda54f2f6ec3424f45740f6dd43cd). #pragma once #include "CoreMinimal.h" @@ -217,7 +217,7 @@ class UDbConnection; class URemoteTables; class URemoteReducers; -class URemoteProcedures; +class UURemoteProcedures; class USubscriptionBuilder; class USubscriptionHandle; @@ -9817,7 +9817,7 @@ class TESTCLIENT_API UDbConnection : public UDbConnectionBase USubscriptionBuilder* SubscriptionBuilder(); /** Static entry point for constructing a connection. */ - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB", DisplayName = "SpacetimeDB Builder") + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB", DisplayName = "SpacetimeDB TestClient Builder") static UDbConnectionBuilder* Builder(); // Error handling @@ -9831,6 +9831,8 @@ class TESTCLIENT_API UDbConnection : public UDbConnectionBase FOnUnhandledProcedureError OnUnhandledProcedureError; + friend USubscriptionBuilder; + friend UDbConnectionBuilder; protected: // Hook up error handling to reducers and procedures diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Types/EnumWithPayloadType.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Types/EnumWithPayloadType.g.h index 560693ddb4c..44310822910 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Types/EnumWithPayloadType.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Types/EnumWithPayloadType.g.h @@ -45,7 +45,7 @@ struct TESTCLIENT_API FEnumWithPayloadType public: FEnumWithPayloadType() = default; - TVariant, uint32, FString, FSpacetimeDBInt128, TArray, uint64, FSpacetimeDBConnectionId, TArray, int64, FSpacetimeDBUInt128, int32, float, int8, uint16, FSpacetimeDBIdentity, FSpacetimeDBUInt256, TArray, bool, FSpacetimeDBTimestamp, uint8, FSpacetimeDBInt256> MessageData; + TVariant, int8, uint64, int32, FSpacetimeDBInt128, float, FString, FSpacetimeDBUInt128, FSpacetimeDBConnectionId, TArray, TArray, TArray, FSpacetimeDBIdentity, bool, int16, FSpacetimeDBInt256, uint32> MessageData; UPROPERTY(BlueprintReadOnly) EEnumWithPayloadTag Tag = static_cast(0); diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Types/IndexedSimpleEnumType.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Types/IndexedSimpleEnumType.g.h index d37a8371a2c..da6b82dbd05 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Types/IndexedSimpleEnumType.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Types/IndexedSimpleEnumType.g.h @@ -13,7 +13,7 @@ struct TESTCLIENT_API FIndexedSimpleEnumType GENERATED_BODY() UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - ESimpleEnumType N; + ESimpleEnumType N = static_cast(0); FORCEINLINE bool operator==(const FIndexedSimpleEnumType& Other) const { diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Types/LargeTableType.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Types/LargeTableType.g.h index 35083fecceb..41e216e21e6 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Types/LargeTableType.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Types/LargeTableType.g.h @@ -67,7 +67,7 @@ struct TESTCLIENT_API FLargeTableType FString P; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - ESimpleEnumType Q; + ESimpleEnumType Q = static_cast(0); UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") FEnumWithPayloadType R; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Types/OneSimpleEnumType.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Types/OneSimpleEnumType.g.h index 420cb2ef7b1..757e2c3b8f1 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Types/OneSimpleEnumType.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Types/OneSimpleEnumType.g.h @@ -13,7 +13,7 @@ struct TESTCLIENT_API FOneSimpleEnumType GENERATED_BODY() UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - ESimpleEnumType E; + ESimpleEnumType E = static_cast(0); FORCEINLINE bool operator==(const FOneSimpleEnumType& Other) const { diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Types/PkSimpleEnumType.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Types/PkSimpleEnumType.g.h index a04e272c23f..adac377cb4a 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Types/PkSimpleEnumType.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Types/PkSimpleEnumType.g.h @@ -13,7 +13,7 @@ struct TESTCLIENT_API FPkSimpleEnumType GENERATED_BODY() UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - ESimpleEnumType A; + ESimpleEnumType A = static_cast(0); UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") int32 Data = 0; diff --git a/sdks/unreal/tests/TestProcClient/Source/TestProcClient/Public/ModuleBindings/Procedures/ReturnEnumA.g.h b/sdks/unreal/tests/TestProcClient/Source/TestProcClient/Public/ModuleBindings/Procedures/ReturnEnumA.g.h index 5f943c62f48..b9871af2d7b 100644 --- a/sdks/unreal/tests/TestProcClient/Source/TestProcClient/Public/ModuleBindings/Procedures/ReturnEnumA.g.h +++ b/sdks/unreal/tests/TestProcClient/Source/TestProcClient/Public/ModuleBindings/Procedures/ReturnEnumA.g.h @@ -14,7 +14,7 @@ struct TESTPROCCLIENT_API FReturnEnumAArgs GENERATED_BODY() // NOTE: uint32 field not exposed to Blueprint due to non-blueprintable elements - uint32 A; + uint32 A = 0; FReturnEnumAArgs() = default; diff --git a/sdks/unreal/tests/TestProcClient/Source/TestProcClient/Public/ModuleBindings/Procedures/ReturnPrimitive.g.h b/sdks/unreal/tests/TestProcClient/Source/TestProcClient/Public/ModuleBindings/Procedures/ReturnPrimitive.g.h index c9692a4ad98..a5e11aa42f1 100644 --- a/sdks/unreal/tests/TestProcClient/Source/TestProcClient/Public/ModuleBindings/Procedures/ReturnPrimitive.g.h +++ b/sdks/unreal/tests/TestProcClient/Source/TestProcClient/Public/ModuleBindings/Procedures/ReturnPrimitive.g.h @@ -13,10 +13,10 @@ struct TESTPROCCLIENT_API FReturnPrimitiveArgs GENERATED_BODY() // NOTE: uint32 field not exposed to Blueprint due to non-blueprintable elements - uint32 Lhs; + uint32 Lhs = 0; // NOTE: uint32 field not exposed to Blueprint due to non-blueprintable elements - uint32 Rhs; + uint32 Rhs = 0; FReturnPrimitiveArgs() = default; diff --git a/sdks/unreal/tests/TestProcClient/Source/TestProcClient/Public/ModuleBindings/Procedures/ReturnStruct.g.h b/sdks/unreal/tests/TestProcClient/Source/TestProcClient/Public/ModuleBindings/Procedures/ReturnStruct.g.h index d83dba213af..a2a1c3c285b 100644 --- a/sdks/unreal/tests/TestProcClient/Source/TestProcClient/Public/ModuleBindings/Procedures/ReturnStruct.g.h +++ b/sdks/unreal/tests/TestProcClient/Source/TestProcClient/Public/ModuleBindings/Procedures/ReturnStruct.g.h @@ -14,7 +14,7 @@ struct TESTPROCCLIENT_API FReturnStructArgs GENERATED_BODY() // NOTE: uint32 field not exposed to Blueprint due to non-blueprintable elements - uint32 A; + uint32 A = 0; UPROPERTY(BlueprintReadWrite, Category="SpacetimeDB") FString B; diff --git a/sdks/unreal/tests/TestProcClient/Source/TestProcClient/Public/ModuleBindings/SpacetimeDBClient.g.h b/sdks/unreal/tests/TestProcClient/Source/TestProcClient/Public/ModuleBindings/SpacetimeDBClient.g.h index 5a6d1f4e62b..01382cbcea5 100644 --- a/sdks/unreal/tests/TestProcClient/Source/TestProcClient/Public/ModuleBindings/SpacetimeDBClient.g.h +++ b/sdks/unreal/tests/TestProcClient/Source/TestProcClient/Public/ModuleBindings/SpacetimeDBClient.g.h @@ -1,7 +1,7 @@ // THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE // WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. -// This was generated using spacetimedb cli version 1.8.0 (commit ce4a0dc173e8e177348af6854f20525a359c59a2). +// This was generated using spacetimedb cli version 1.11.0 (commit 42a91437090bda54f2f6ec3424f45740f6dd43cd). #pragma once #include "CoreMinimal.h" @@ -32,7 +32,7 @@ class UDbConnection; class URemoteTables; class URemoteReducers; -class URemoteProcedures; +class UURemoteProcedures; class USubscriptionBuilder; class USubscriptionHandle; @@ -1130,7 +1130,7 @@ class TESTPROCCLIENT_API UDbConnection : public UDbConnectionBase USubscriptionBuilder* SubscriptionBuilder(); /** Static entry point for constructing a connection. */ - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB", DisplayName = "SpacetimeDB Builder") + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB", DisplayName = "SpacetimeDB TestProcClient Builder") static UDbConnectionBuilder* Builder(); // Error handling @@ -1144,6 +1144,8 @@ class TESTPROCCLIENT_API UDbConnection : public UDbConnectionBase FOnUnhandledProcedureError OnUnhandledProcedureError; + friend USubscriptionBuilder; + friend UDbConnectionBuilder; protected: // Hook up error handling to reducers and procedures