aboutsummaryrefslogtreecommitdiff
path: root/steamworks-sys
diff options
context:
space:
mode:
authorMatthew Collins <[email protected]>2018-05-07 16:01:29 +0100
committerMatthew Collins <[email protected]>2018-05-07 16:01:29 +0100
commitae180e02633116494712b27bcc441fd0ec290532 (patch)
treea704fea11b15d9eeb270cc57a3798162cf1eb367 /steamworks-sys
parentSteam networking support + other improvements (diff)
downloadsteamworks-rs-ae180e02633116494712b27bcc441fd0ec290532.tar.xz
steamworks-rs-ae180e02633116494712b27bcc441fd0ec290532.zip
Improve the generated wrappers
Should fix crashes on Windows
Diffstat (limited to 'steamworks-sys')
-rw-r--r--steamworks-sys/Cargo.toml2
-rwxr-xr-x[-rw-r--r--]steamworks-sys/build.rs40
2 files changed, 31 insertions, 11 deletions
diff --git a/steamworks-sys/Cargo.toml b/steamworks-sys/Cargo.toml
index 9b4960e..168d2fb 100644
--- a/steamworks-sys/Cargo.toml
+++ b/steamworks-sys/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "steamworks-sys"
-version = "0.3.0"
+version = "0.3.1"
authors = ["Thinkofname"]
build = "build.rs"
description = "Provides raw bindings to the steamworks sdk"
diff --git a/steamworks-sys/build.rs b/steamworks-sys/build.rs
index f5e6b6c..38ee072 100644..100755
--- a/steamworks-sys/build.rs
+++ b/steamworks-sys/build.rs
@@ -136,7 +136,8 @@ extern "C" {
{
continue;
}
- builder = builder.whitelist_type(ty);
+ builder = builder.whitelist_type(ty)
+ .opaque_type(ty);
// Make a raw constructor
writeln!(cpp_wrapper, r#"{ty} __rust_helper_raw__{ty}() {{
@@ -194,15 +195,34 @@ extern "C" {
let (fty, fty_rust) = field_type_fix(fty);
builder = builder.whitelist_type(fty);
// Generate getters/setters for fields
-
- writeln!(cpp_wrapper, r#"
- {fty} __rust_helper_getter__{ty}_{fname}(const {ty}* from) {{
- return from->{fname};
- }}
- void __rust_helper_setter__{ty}_{fname}({ty}* to, {fty} val) {{
- to->{fname} = val;
- }}
- "#, ty = ty, fty = fty, fname = fname).unwrap();
+ if fty == "class CSteamID" {
+ writeln!(cpp_wrapper, r#"
+ uint64_t __rust_helper_getter__{ty}_{fname}(const {ty}* from) {{
+ return from->{fname}.ConvertToUint64();
+ }}
+ void __rust_helper_setter__{ty}_{fname}({ty}* to, uint64_t val) {{
+ to->{fname}.SetFromUint64(val);
+ }}
+ "#, ty = ty, fname = fname).unwrap();
+ } else if fty == "class CGameID" {
+ writeln!(cpp_wrapper, r#"
+ uint64_t __rust_helper_getter__{ty}_{fname}(const {ty}* from) {{
+ return from->{fname}.ToUint64();
+ }}
+ void __rust_helper_setter__{ty}_{fname}({ty}* to, uint64_t val) {{
+ to->{fname}.Set(val);
+ }}
+ "#, ty = ty, fname = fname).unwrap();
+ } else {
+ writeln!(cpp_wrapper, r#"
+ {fty} __rust_helper_getter__{ty}_{fname}(const {ty}* from) {{
+ return from->{fname};
+ }}
+ void __rust_helper_setter__{ty}_{fname}({ty}* to, {fty} val) {{
+ to->{fname} = val;
+ }}
+ "#, ty = ty, fty = fty, fname = fname).unwrap();
+ };
builder = builder.raw_line(format!(r#"
extern "C" {{