use std::ops::Deref; use mlua::{AnyUserData, MetaMethod, UserData, UserDataFields, UserDataMethods}; use super::{Lives, PtrCell}; pub(super) struct Mode { inner: PtrCell, } impl Deref for Mode { type Target = yazi_core::tab::Mode; fn deref(&self) -> &Self::Target { &self.inner } } impl Mode { #[inline] pub(super) fn make(inner: &yazi_core::tab::Mode) -> mlua::Result { Lives::scoped_userdata(Self { inner: inner.into() }) } } impl UserData for Mode { fn add_fields>(fields: &mut F) { fields.add_field_method_get("is_select", |_, me| Ok(me.is_select())); fields.add_field_method_get("is_unset", |_, me| Ok(me.is_unset())); fields.add_field_method_get("is_visual", |_, me| Ok(me.is_visual())); } fn add_methods>(methods: &mut M) { methods.add_meta_method(MetaMethod::ToString, |_, me, ()| Ok(me.to_string())); } }