hooks-core 3.0.0-alpha.6

Compile-time, async hooks
Documentation
use hooks_core::{hook_fn, HookExt, IntoHook, UpdateHookUninitialized};

hook_fn!(
    fn use_my_hook() {}
);

fn assert_uninitialized_is_unpin<H>(_: &H)
where
    H: UpdateHookUninitialized,
    H::Uninitialized: Unpin,
{
}

fn assert_into_hook_is_unpin<H>(_: &H)
where
    H: IntoHook,
    H::Hook: Unpin,
{
}

fn assert_is_unpin<T: ?Sized + Unpin>(_: &T) {}

#[test]
fn uninitialized_is_unpin() {
    let my_hook = use_my_hook();
    assert_uninitialized_is_unpin(&my_hook);

    let mut uninitialized = Default::default();

    assert_is_unpin(&uninitialized);

    my_hook.h(std::pin::Pin::new(&mut uninitialized))
}

#[test]
fn into_hook_is_unpin() {
    let my_hook = use_my_hook();
    assert_into_hook_is_unpin(&my_hook);

    let mut hook = my_hook.into_hook();
    assert_is_unpin(&hook);
    hook.use_hook()
}