cgp_async/traits/async.rs
use crate::traits::r#static::MaybeStatic;
use crate::traits::send::MaybeSend;
use crate::traits::sync::MaybeSync;
/**
   This is defined as a convenient constraint alias to
   `Sized + Send + Sync + 'static`.
   This constraint is commonly required to be present in almost all associated
   types. The `Sized` constraint is commonly required for associated types to be
   used as generic parameters. The `Send + Sync + 'static` constraints are
   important for the use of async functions inside traits.
   Because Rust do not currently natively support the use of async functions
   in traits, we use the [`async_trait`] crate to desugar async functions
   inside traits into functions returning
   `Pin<Box<dyn Future + Send>>`. Due to the additional `Send` and lifetime
   trait bounds inside the returned boxed future, almost all values that are
   used inside the async functions are required to have types that implement
   `Send` and `Sync`.
   It is also common to require the associated types to have the `'static`
   lifetime for them to be used inside async functions, because Rust would
   otherwise infer a more restrictive lifetime that does not outlive the
   async functions. The `'static` lifetime constraint here really means
   that the types implementing `Async` must not contain any lifetime
   parameter.
*/
pub trait Async: MaybeSend + MaybeSync + MaybeStatic {}
impl<A> Async for A where A: MaybeSend + MaybeSync + MaybeStatic {}