Enum ModuleState

Source
pub enum ModuleState {
    Active(Module),
    Cleared,
    FailedInit(ModuleInitError),
}
Expand description

Represents the state of the module.

This enum implements an API to manage a single global variable of internally managed module (e.g. SkyrimSE.exe) information.

Variants§

§

Active(Module)

The module is successfully initialized and active.

§

Cleared

The module instance has been explicitly cleared and memory has been freed.

§

FailedInit(ModuleInitError)

The module failed to initialize.

Implementations§

Source§

impl ModuleState

Source

pub fn map_active<F, T>(f: F) -> Result<T, ModuleStateError>
where F: FnOnce(&Module) -> T,

Attempts to apply a function to the active module state.

This function tries to acquire a read lock on the module state and applies the provided function f if the module state is ModuleState::Active.

If you do not know when you did the Self::reset, or if you want it to be reinitialized automatically if necessary, Self::map_or_init is useful.

§Example
use commonlibsse_ng::rel::module::ModuleState;

let result = ModuleState::map_active(|module| module.version.clone());
match result {
    Ok(version) => println!("Module version: {}", version),
    Err(err) => eprintln!("Error: {:?}", err),
}
§Errors

Returns an error if:

Source

pub fn map_or_init<F, T>(f: F) -> Result<T, ModuleStateError>
where F: FnOnce(&Module) -> T,

Attempts to apply a function to the active module state, initializing it if necessary.

If the module state is Cleared/FailedInit, it will be initialized before applying the function f. This function also attempts a read lock first and falls back to initialization only if needed.

§Example
use commonlibsse_ng::rel::module::ModuleState;

let result = ModuleState::map_or_init(|module| module.version.clone());
match result {
    Ok(version) => println!("Module version: {}", version),
    Err(err) => eprintln!("Error: {:?}", err),
}
§Errors

Returns an error if:

  • The module state is ModuleState::FailedInit, in which case the initialization error is propagated.
  • The internal lock is poisoned.
Source

pub fn reset() -> Result<(), ModuleStateError>

Clears the module, transitioning it to the Cleared state.

§Example
use commonlibsse_ng::rel::module::ModuleState;

assert!(ModuleState::reset().is_ok());
§Errors

If the thread that had previously acquired a lock on the singleton instance panics, an error is returned.

Trait Implementations§

Source§

impl Clone for ModuleState

Source§

fn clone(&self) -> ModuleState

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ModuleState

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for ModuleState

Source§

fn eq(&self, other: &ModuleState) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Eq for ModuleState

Source§

impl StructuralPartialEq for ModuleState

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more