Skip to content

Commit 4e9622c

Browse files
authored
feat(sozo): unreal bindings handle int64 and ControllerConnect (#3178)
* feat: handle long values (int64) * fix: array escape error * feat: add ControllerConnect
1 parent 0a7895f commit 4e9622c

File tree

1 file changed

+31
-11
lines changed
  • crates/dojo/bindgen/src/plugins/unrealengine

1 file changed

+31
-11
lines changed

crates/dojo/bindgen/src/plugins/unrealengine/mod.rs

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,15 @@ impl UnrealEnginePlugin {
2323
"i8" => "int".to_string(),
2424
"i16" => "int".to_string(),
2525
"i32" => "int".to_string(),
26-
"i64" => "long".to_string(),
26+
"i64" => "int64".to_string(),
2727
"i128" => "FString".to_string(),
2828
"u8" => "int".to_string(),
2929
"u16" => "int".to_string(),
3030
"u32" => "int".to_string(),
31-
"u64" => "long".to_string(),
31+
"u64" => "int64".to_string(),
3232
"u128" => "FString".to_string(),
3333
"u256" => "FString".to_string(),
34-
"usize" => "long".to_string(),
34+
"usize" => "int64".to_string(),
3535
"bool" => "bool".to_string(),
3636
"felt252" => "FString".to_string(),
3737
"bytes31" => "FString".to_string(),
@@ -455,6 +455,9 @@ public:
455455
UFUNCTION(BlueprintCallable)
456456
void ControllerGetAccountOrConnect(const FString& rpc_url, const FString& chain_id);
457457
458+
UFUNCTION(BlueprintCallable)
459+
void ControllerConnect(const FString& rpc_url);
460+
458461
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnDojoControllerAccount,
459462
struct FControllerAccount,
460463
Account);
@@ -840,8 +843,7 @@ void ADojoHelpers::CallController{namespace}{system}{selector}(const FController
840843
.iter()
841844
.map(|field| {
842845
format!(
843-
r#"strings.Append(ConvertToFeltHexa<{cpp_type}>(value.{name}, \
844-
"{type_name}"));"#,
846+
r#"strings.Append(ConvertToFeltHexa<{cpp_type}>(value.{name}, "{type_name}"));"#,
845847
cpp_type = Self::map_type(&field.token),
846848
name = Self::to_pascal_case(&field.name),
847849
type_name = &field.token.type_name(),
@@ -941,7 +943,7 @@ public:
941943
}}
942944
}}
943945
944-
static long ConvertToLong(const Member* member) {{
946+
static int64 ConvertToLong(const Member* member) {{
945947
switch(member->ty->primitive.tag) {{
946948
case Primitive_Tag::I64: return member->ty->primitive.i64;
947949
case Primitive_Tag::U64: return member->ty->primitive.u64;
@@ -1014,6 +1016,16 @@ static TArray<FString> ConvertToFeltHexa(const T& value, const char* valueType)
10141016
return TArray<FString>{{TEXT("0x") + hexValue}};
10151017
}}
10161018
}}
1019+
else if constexpr (std::is_same_v<T, int64>) {{
1020+
if (strcmp(valueType, "u64") == 0 ||
1021+
strcmp(valueType, "i64") == 0) {{
1022+
FString hexValue = FString::Printf(TEXT("%X"), static_cast<int64>(value));
1023+
while (hexValue.Len() < 64) {{
1024+
hexValue = TEXT("0") + hexValue;
1025+
}}
1026+
return TArray<FString>{{TEXT("0x") + hexValue}};
1027+
}}
1028+
}}
10171029
else if constexpr (std::is_same_v<T, bool>) {{
10181030
if (strcmp(valueType, "bool") == 0) {{
10191031
FString hexValue = FString::Printf(TEXT("%X"), value ? 1 : 0);
@@ -1050,8 +1062,7 @@ static TArray<FString> ConvertToFeltHexa(const T& value, const char* valueType)
10501062
}}
10511063
10521064
template<typename T>
1053-
static void ConvertTyToUnrealEngineType(const Member* member, const char* expectedName, const \
1054-
char* expectedType, T& output) {{
1065+
static void ConvertTyToUnrealEngineType(const Member* member, const char* expectedName, const char* expectedType, T& output) {{
10551066
if (strcmp(member->name, expectedName) != 0) {{
10561067
return;
10571068
}}
@@ -1078,7 +1089,7 @@ static void ConvertTyToUnrealEngineType(const Member* member, const char* expect
10781089
output = TypeConverter::ConvertToInt(member);
10791090
}}
10801091
}}
1081-
else if constexpr (std::is_same_v<T, long>) {{
1092+
else if constexpr (std::is_same_v<T, int64>) {{
10821093
if (strcmp(expectedType, "i64") == 0 ||
10831094
strcmp(expectedType, "u64") == 0 ||
10841095
strcmp(expectedType, "usize") == 0) {{
@@ -1144,8 +1155,7 @@ void ADojoHelpers::SetContractsAddresses(const TMap<FString,FString>& addresses)
11441155
ContractsAddresses = addresses;
11451156
}}
11461157
1147-
FAccount ADojoHelpers::CreateAccountDeprecated(const FString& rpc_url, const FString& \
1148-
address, const FString& private_key)
1158+
FAccount ADojoHelpers::CreateAccountDeprecated(const FString& rpc_url, const FString& address, const FString& private_key)
11491159
{{
11501160
FAccount account;
11511161
@@ -1193,6 +1203,16 @@ void ADojoHelpers::ControllerGetAccountOrConnect(const FString& rpc_url, const F
11931203
policies, nbPolicies, ControllerCallbackProxy);
11941204
}}
11951205
1206+
1207+
void ADojoHelpers::ControllerConnect(const FString& rpc_url)
1208+
{{
1209+
std::string rpc_url_string = std::string(TCHAR_TO_UTF8(*rpc_url));
1210+
1211+
{policies}
1212+
1213+
FDojoModule::ControllerConnect(rpc_url_string.c_str(), policies, nbPolicies, ControllerCallbackProxy);
1214+
}}
1215+
11961216
void ADojoHelpers::ControllerCallbackProxy(ControllerAccount *account)
11971217
{{
11981218
if (!Instance) return;

0 commit comments

Comments
 (0)