Struct Scope
pub struct Scope<'scope, 'env>where
'env: 'scope,{
lua: LuaGuard,
destructors: Destructors<'env>,
user_destructors: UserDestructors<'env>,
_scope_invariant: PhantomData<&'scope mut &'scope ()>,
_env_invariant: PhantomData<&'env mut &'env ()>,
}Expand description
Constructed by the Lua::scope method, allows temporarily creating Lua userdata and
callbacks that are not required to be Send or 'static.
See Lua::scope for more details.
Fields§
§lua: LuaGuard§destructors: Destructors<'env>§user_destructors: UserDestructors<'env>§_scope_invariant: PhantomData<&'scope mut &'scope ()>§_env_invariant: PhantomData<&'env mut &'env ()>Implementations§
§impl<'scope, 'env> Scope<'scope, 'env>where
'env: 'scope,
impl<'scope, 'env> Scope<'scope, 'env>where
'env: 'scope,
pub fn create_function<F, A, R>(
&'scope self,
func: F,
) -> Result<Function, Error>
pub fn create_function<F, A, R>( &'scope self, func: F, ) -> Result<Function, Error>
Wraps a Rust function or closure, creating a callable Lua function handle to it.
This is a version of Lua::create_function that creates a callback which expires on
scope drop. See Lua::scope for more details.
pub fn create_function_mut<F, A, R>(
&'scope self,
func: F,
) -> Result<Function, Error>
pub fn create_function_mut<F, A, R>( &'scope self, func: F, ) -> Result<Function, Error>
Wraps a Rust mutable closure, creating a callable Lua function handle to it.
This is a version of Lua::create_function_mut that creates a callback which expires
on scope drop. See Lua::scope and Scope::create_function for more details.
pub fn create_userdata_ref<T>(
&'scope self,
data: &'env T,
) -> Result<AnyUserData, Error>where
T: UserData + 'static,
pub fn create_userdata_ref<T>(
&'scope self,
data: &'env T,
) -> Result<AnyUserData, Error>where
T: UserData + 'static,
Creates a Lua userdata object from a reference to custom userdata type.
This is a version of Lua::create_userdata that creates a userdata which expires on
scope drop, and does not require that the userdata type be Send. This method takes
non-’static reference to the data. See Lua::scope for more details.
Userdata created with this method will not be able to be mutated from Lua.
pub fn create_userdata_ref_mut<T>(
&'scope self,
data: &'env mut T,
) -> Result<AnyUserData, Error>where
T: UserData + 'static,
pub fn create_userdata_ref_mut<T>(
&'scope self,
data: &'env mut T,
) -> Result<AnyUserData, Error>where
T: UserData + 'static,
Creates a Lua userdata object from a mutable reference to custom userdata type.
This is a version of Lua::create_userdata that creates a userdata which expires on
scope drop, and does not require that the userdata type be Send. This method takes
non-’static mutable reference to the data. See Lua::scope for more details.
pub fn create_any_userdata_ref<T>(
&'scope self,
data: &'env T,
) -> Result<AnyUserData, Error>where
T: 'static,
pub fn create_any_userdata_ref<T>(
&'scope self,
data: &'env T,
) -> Result<AnyUserData, Error>where
T: 'static,
Creates a Lua userdata object from a reference to custom Rust type.
This is a version of Lua::create_any_userdata that creates a userdata which expires on
scope drop, and does not require that the Rust type be Send. This method takes non-’static
reference to the data. See Lua::scope for more details.
Userdata created with this method will not be able to be mutated from Lua.
pub fn create_any_userdata_ref_mut<T>(
&'scope self,
data: &'env mut T,
) -> Result<AnyUserData, Error>where
T: 'static,
pub fn create_any_userdata_ref_mut<T>(
&'scope self,
data: &'env mut T,
) -> Result<AnyUserData, Error>where
T: 'static,
Creates a Lua userdata object from a mutable reference to custom Rust type.
This is a version of Lua::create_any_userdata that creates a userdata which expires on
scope drop, and does not require that the Rust type be Send. This method takes non-’static
mutable reference to the data. See Lua::scope for more details.
pub fn create_userdata<T>(&'scope self, data: T) -> Result<AnyUserData, Error>where
T: UserData + 'env,
pub fn create_userdata<T>(&'scope self, data: T) -> Result<AnyUserData, Error>where
T: UserData + 'env,
Creates a Lua userdata object from a custom userdata type.
This is a version of Lua::create_userdata that creates a userdata which expires on
scope drop, and does not require that the userdata type be Send or 'static. See
Lua::scope for more details.
The main limitation that comes from using non-’static userdata is that the produced userdata
will no longer have a TypeId associated with it, because TypeId can only work for
'static types. This means that it is impossible, once the userdata is created, to get a
reference to it back out of an AnyUserData handle. This also implies that the
“function” type methods that can be added via UserDataMethods (the ones that accept
AnyUserData as a first parameter) are vastly less useful. Also, there is no way to
re-use a single metatable for multiple non-’static types, so there is a higher cost
associated with creating the userdata metatable each time a new userdata is created.
pub fn create_any_userdata<T>(
&'scope self,
data: T,
register: impl FnOnce(&mut UserDataRegistry<T>),
) -> Result<AnyUserData, Error>where
T: 'env,
pub fn create_any_userdata<T>(
&'scope self,
data: T,
register: impl FnOnce(&mut UserDataRegistry<T>),
) -> Result<AnyUserData, Error>where
T: 'env,
Creates a Lua userdata object from a custom Rust type.
Since the Rust type is not required to be static and implement UserData trait,
you need to provide a function to register fields or methods for the object.
See also Scope::create_userdata for more details about non-static limitations.
pub fn add_destructor(&'scope self, destructor: impl FnOnce() + 'env)
pub fn add_destructor(&'scope self, destructor: impl FnOnce() + 'env)
Adds a destructor function to be run when the scope ends.
This functionality is useful for cleaning up any resources after the scope ends.
§Example
let lua = Lua::new();
let ud = lua.create_any_userdata(String::from("hello"))?;
lua.scope(|scope| {
scope.add_destructor(|| {
_ = ud.take::<String>();
});
// Run the code that uses `ud` here
Ok(())
})?;
assert!(matches!(ud.borrow::<String>(), Err(Error::UserDataDestructed)));Auto Trait Implementations§
impl<'scope, 'env> !Freeze for Scope<'scope, 'env>
impl<'scope, 'env> !RefUnwindSafe for Scope<'scope, 'env>
impl<'scope, 'env> !Send for Scope<'scope, 'env>
impl<'scope, 'env> !Sync for Scope<'scope, 'env>
impl<'scope, 'env> Unpin for Scope<'scope, 'env>
impl<'scope, 'env> !UnwindSafe for Scope<'scope, 'env>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> IntoResult<T> for T
impl<T> IntoResult<T> for T
§type Error = Infallible
type Error = Infallible
Result.§fn into_result(self) -> Result<T, <T as IntoResult<T>>::Error>
fn into_result(self) -> Result<T, <T as IntoResult<T>>::Error>
Result.§impl<D> OwoColorize for D
impl<D> OwoColorize for D
§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg] or
a color-specific method, such as [OwoColorize::green], Read more§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg] or
a color-specific method, such as [OwoColorize::on_yellow], Read more