Skip to content

Commit c910660

Browse files
committed
Make thread module public
1 parent a45fe9b commit c910660

File tree

3 files changed

+51
-9
lines changed

3 files changed

+51
-9
lines changed

src/lib.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
//! [`Future`]: std::future::Future
6262
//! [`serde::Serialize`]: https://docs.serde.rs/serde/ser/trait.Serialize.html
6363
//! [`serde::Deserialize`]: https://docs.serde.rs/serde/de/trait.Deserialize.html
64+
//! [`AsyncThread`]: crate::thread::AsyncThread
6465
6566
// Deny warnings inside doc tests / examples. When this isn't present, rustdoc doesn't show *any*
6667
// warnings at all.
@@ -82,7 +83,6 @@ mod multi;
8283
mod scope;
8384
mod state;
8485
mod stdlib;
85-
mod thread;
8686
mod traits;
8787
mod types;
8888
mod util;
@@ -94,6 +94,7 @@ pub mod function;
9494
pub mod prelude;
9595
pub mod string;
9696
pub mod table;
97+
pub mod thread;
9798
pub mod userdata;
9899

99100
pub use bstr::BString;
@@ -111,7 +112,8 @@ pub use crate::stdlib::StdLib;
111112
pub use crate::string::{BorrowedBytes, BorrowedStr, LuaString};
112113
#[doc(inline)]
113114
pub use crate::table::Table;
114-
pub use crate::thread::{Thread, ThreadStatus};
115+
#[doc(inline)]
116+
pub use crate::thread::Thread;
115117
pub use crate::traits::{
116118
FromLua, FromLuaMulti, IntoLua, IntoLuaMulti, LuaNativeFn, LuaNativeFnMut, ObjectLike,
117119
};
@@ -133,6 +135,8 @@ pub use crate::userdata::{
133135
MetaMethod, UserData, UserDataFields, UserDataMetatable, UserDataMethods, UserDataRef, UserDataRefMut,
134136
UserDataRegistry,
135137
};
138+
#[doc(hidden)]
139+
pub use thread::ThreadStatus;
136140

137141
#[cfg(not(feature = "luau"))]
138142
#[doc(inline)]
@@ -149,7 +153,7 @@ pub use crate::{
149153

150154
#[cfg(feature = "async")]
151155
#[cfg_attr(docsrs, doc(cfg(feature = "async")))]
152-
pub use crate::{thread::AsyncThread, traits::LuaNativeAsyncFn};
156+
pub use crate::traits::LuaNativeAsyncFn;
153157

154158
#[cfg(feature = "serde")]
155159
#[doc(inline)]

src/prelude.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,13 @@ pub use crate::{
99
LightUserData as LuaLightUserData, Lua, LuaNativeFn, LuaNativeFnMut, LuaOptions, LuaString,
1010
MetaMethod as LuaMetaMethod, MultiValue as LuaMultiValue, Nil as LuaNil, Number as LuaNumber,
1111
ObjectLike as LuaObjectLike, RegistryKey as LuaRegistryKey, Result as LuaResult, StdLib as LuaStdLib,
12-
Table as LuaTable, Thread as LuaThread, ThreadStatus as LuaThreadStatus, UserData as LuaUserData,
13-
UserDataFields as LuaUserDataFields, UserDataMetatable as LuaUserDataMetatable,
14-
UserDataMethods as LuaUserDataMethods, UserDataRef as LuaUserDataRef,
15-
UserDataRefMut as LuaUserDataRefMut, UserDataRegistry as LuaUserDataRegistry, Value as LuaValue,
16-
Variadic as LuaVariadic, VmState as LuaVmState, WeakLua, function::FunctionInfo as LuaFunctionInfo,
12+
Table as LuaTable, Thread as LuaThread, UserData as LuaUserData, UserDataFields as LuaUserDataFields,
13+
UserDataMetatable as LuaUserDataMetatable, UserDataMethods as LuaUserDataMethods,
14+
UserDataRef as LuaUserDataRef, UserDataRefMut as LuaUserDataRefMut,
15+
UserDataRegistry as LuaUserDataRegistry, Value as LuaValue, Variadic as LuaVariadic,
16+
VmState as LuaVmState, WeakLua, function::FunctionInfo as LuaFunctionInfo,
1717
table::TablePairs as LuaTablePairs, table::TableSequence as LuaTableSequence,
18+
thread::ThreadStatus as LuaThreadStatus,
1819
};
1920

2021
#[cfg(not(feature = "luau"))]
@@ -30,7 +31,7 @@ pub use crate::{
3031

3132
#[cfg(feature = "async")]
3233
#[doc(no_inline)]
33-
pub use crate::{AsyncThread as LuaAsyncThread, LuaNativeAsyncFn};
34+
pub use crate::{LuaNativeAsyncFn, thread::AsyncThread as LuaAsyncThread};
3435

3536
#[cfg(feature = "serde")]
3637
#[doc(no_inline)]

src/thread.rs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,40 @@
1+
//! Lua thread (coroutine) handling.
2+
//!
3+
//! This module provides types for creating and working with Lua coroutines from Rust.
4+
//! Coroutines allow cooperative multitasking within a single Lua state by suspending and
5+
//! resuming execution at well-defined yield points.
6+
//!
7+
//! # Basic Usage
8+
//!
9+
//! Threads are created via [`Lua::create_thread`] and driven by calling [`Thread::resume`]:
10+
//!
11+
//! ```rust
12+
//! # use mlua::{Lua, Result, Thread};
13+
//! # fn main() -> Result<()> {
14+
//! let lua = Lua::new();
15+
//! let thread: Thread = lua.load(r#"
16+
//! coroutine.create(function(a, b)
17+
//! coroutine.yield(a + b)
18+
//! return a * b
19+
//! end)
20+
//! "#).eval()?;
21+
//!
22+
//! assert_eq!(thread.resume::<i32>((3, 4))?, 7);
23+
//! assert_eq!(thread.resume::<i32>(())?, 12);
24+
//! # Ok(())
25+
//! # }
26+
//! ```
27+
//!
28+
//! # Async Support
29+
//!
30+
//! When the `async` feature is enabled, a [`Thread`] can be converted into an [`AsyncThread`]
31+
//! via [`Thread::into_async`], which implements both [`Future`] and [`Stream`].
32+
//! This integrates Lua coroutines naturally with Rust async runtimes such as Tokio.
33+
//!
34+
//! [`Lua::create_thread`]: crate::Lua::create_thread
35+
//! [`Future`]: std::future::Future
36+
//! [`Stream`]: futures_util::stream::Stream
37+
138
use std::fmt;
239
use std::os::raw::{c_int, c_void};
340

0 commit comments

Comments
 (0)