This is a crate that allows interop with the (g)luajit c api as well as the source sdk through libloading and vtable bindings. You can then use these for binary modules or manually injected code, like with Autorun-rs
More information on binary modules can be found on the garrysmod wiki: Creating Binary Modules and examples can be found here.
If you are targeting 32 bit make sure to install the toolchain and build to it:
rustup target add i686-pc-windows-msvc
cargo build --target=i686-pc-windows-msvc
There are actually a decent amount of libraries out there for gmod development. Here's a comparison and why you could use this one.
Library | rglua | rust-glua-sys | gmod-rs | gmrs |
---|---|---|---|---|
Full Lua C Api Bindings | ✔️ | ❌ | ❌ | ❌ |
On Crates.io | ✔️ | ❌ | ✔️ | ❌ |
Proc Macros | ✔️ | ❌ | ✔️ | ✔️ |
Interfacing w/ Source SDK | ✔️ | ❌ | ❌ | ❌ |
Returning Result<> from functions | ✔️ | ❌ | ❌ | ✔️ |
Can be used on stable | ✔️ | ✔️ | ❌ | ✔️ |
Real world examples | ✔️ | ❌ | 〰️ | ✔️ |
Linux / OSX Support | ✔️ | ❌ | ✔️ | ✔️ |
Github Stars | 😢 | 👍 | 👑 | 🤷♂️ |
You can help with that last one 😉
This is heavily based off of garrysmod_common, in how we export the lua_shared functions and trying to replicate everything from the Lua C Api.