app-state 0.1.0

Thread-safe, mutable application states for rust
Documentation
use crate::tests::util::StateTrait;
use crate::{create_creatable_state, create_state, AppState, AppStateTrait};

struct NonExistentState {}

#[test]
fn test_get_state() {
    create_state!(AppState);

    let state = AppState::<State>::get();
    assert_eq!(state.name, "Hello".to_string());
}

#[test]
fn test_try_get_state() {
    create_state!(AppState);

    let state = AppState::<State>::try_get();
    assert!(state.is_ok());
    assert_eq!(state.unwrap().name, "Hello".to_string());
}

#[test]
#[should_panic]
fn test_get_non_existent_state() {
    create_state!(AppState);
    AppState::<NonExistentState>::get();
}

#[test]
fn test_try_get_non_existent_state() {
    create_state!(AppState);
    let state = AppState::<NonExistentState>::try_get();
    assert!(state.is_err());
}

#[test]
fn test_get_or_insert() {
    create_creatable_state!();

    let state = AppState::<State>::get_or_insert(State::default());
    assert_eq!(state.name, "Hello".to_string());
}

#[test]
fn test_get_or_insert_with() {
    create_creatable_state!();

    let state = AppState::<State>::get_or_insert_with(|| State::default());
    assert_eq!(state.name, "Hello".to_string());
}

#[test]
fn test_get_or_insert_default() {
    create_creatable_state!();

    let state = AppState::<State>::get_or_insert_default();
    assert_eq!(state.name, "Hello".to_string());
}