diff options
| author | Matthew Collins <[email protected]> | 2018-05-07 16:01:29 +0100 |
|---|---|---|
| committer | Matthew Collins <[email protected]> | 2018-05-07 16:01:29 +0100 |
| commit | ae180e02633116494712b27bcc441fd0ec290532 (patch) | |
| tree | a704fea11b15d9eeb270cc57a3798162cf1eb367 /steamworks-sys | |
| parent | Steam networking support + other improvements (diff) | |
| download | steamworks-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.toml | 2 | ||||
| -rwxr-xr-x[-rw-r--r--] | steamworks-sys/build.rs | 40 |
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" {{ |