0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

TIPSAdvent Calendar 2023

Day 14

【Rust】mlua 使ってみた

Posted at

Rust で Lua を動かすときに使うクレートのひとつ、mlua を使ってみました。

インストール

cargo add mlua

👆をやるだけです。

Lua は apt でインストールしたらシンボリックリンクが足りなかったとかで Rust のコンパイルに失敗したので 👆 の方法でインストールしました。

試しに動かす

Rust 内で Lua プログラムを呼ぶ

use mlua::prelude::*;

fn main() {
    let lua = Lua::new();

    lua.load("var = 123").exec().unwrap();
    println!("var: {:?}", lua.globals().get::<_, Option<i32>>("var").unwrap());
}
var: Some(123)

Lua 内で定義させたグローバル変数を Rust で呼び出すことができました。

Rust で定義した関数を Lua で呼ぶ

use mlua::prelude::*;

fn main() {
    let lua = Lua::new();

    let f = lua.create_function(|_, ()| -> LuaResult<()> {
        println!("hello from rust");
        Ok(())
    }).unwrap();
    lua.globals().set("rusty_hello", f).unwrap();

    lua.load("pcall(rusty_hello)").exec().unwrap();
}
hello from rust

Rust 側からグローバル変数として rusty_hello 関数を定義してあげると、Lua 内では pcall などを使って関数呼び出しができます。Rust で書かれた関数を Lua 内部から起動できた形になります!

ちなみに、async function の定義もできます。

おわり

同じように Rust から Lua を使わせるクレート rlua も世の中にはありますが、使い心地は mlua の方がいいなという感じです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?