hexga_core 0.0.11-beta.56

Basic set of functionalities common to all hexga crate
Documentation
#[allow(unused_imports)]
use core::{any::Any, pin::Pin};

pub trait Async: WasmSend + WasmSync + 'static {}
impl<T> Async for T where T: WasmSend + WasmSync + 'static {}

pub trait AnyAsync: Any + WasmSendSync + 'static
{
    fn as_any(&self) -> &dyn Any;
    fn as_any_mut(&mut self) -> &mut dyn Any;
}
impl<T> AnyAsync for T
where
    T: Any + WasmSendSync + 'static,
{
    fn as_any(&self) -> &dyn Any { self }
    fn as_any_mut(&mut self) -> &mut dyn Any { self }
}

pub type DynAnyAsync = dyn AnyAsync + 'static;

//pub type DynAnyAsync = dyn Any + Send + Sync + 'static;

// Condition: Native OR WASM with atomics (multi-thread capable)
#[cfg(any(not(target_arch = "wasm32"), all(target_arch = "wasm32", target_feature = "atomics")))]
mod sync_trait
{
    /// Send trait compatible with Wasm. Requires real Send on native.
    pub trait WasmSend: Send {}

    /// Sync trait compatible with Wasm. Requires real Sync on native.
    pub trait WasmSync: Sync {}

    /// Send + Sync trait compatible with Wasm. Requires real Send + Sync on native.
    pub trait WasmSendSync: WasmSend + WasmSync {}

    impl<T: Send> WasmSend for T {}
    impl<T: Sync> WasmSync for T {}
    impl<T: Send + Sync> WasmSendSync for T {}
}

// Rename WasmSend => CrossSend (change the prefix ?) Cross ? Portable ?

// Condition: WASM without atomics (pure single-thread)
#[cfg(all(target_arch = "wasm32", not(target_feature = "atomics")))]
mod sync_trait
{
    /// Send compatible trait for WASM.
    pub trait WasmSend {}

    /// Sync compatible trait for WASM.
    pub trait WasmSync {}

    /// Send + Sync compatible trait for WASM.
    pub trait WasmSendSync: WasmSend + WasmSync {}

    impl<T> WasmSend for T {}
    impl<T> WasmSync for T {}
    impl<T> WasmSendSync for T {}
}
pub use sync_trait::*;