macro_rules! impl_common_new_methods {
(
semantic_mut ($($semantic_bounds:tt)+),
|$source:ident| $adapter_expr:expr,
|$f:ident| $wrapper_expr:expr,
$type_desc:literal
) => {
#[doc = concat!("Creates a new ", $type_desc, ".")]
#[doc = concat!("A new ", $type_desc, " wrapper.")]
#[inline]
pub fn new<F>(mut $source: F) -> Self
where
F: $($semantic_bounds)+,
{
let $f = $adapter_expr;
Self {
function: $wrapper_expr,
metadata: $crate::internal::CallbackMetadata::unnamed(),
}
}
#[doc = concat!("Creates a new named ", $type_desc, ".")]
#[doc = concat!("A new named ", $type_desc, " wrapper.")]
#[inline]
pub fn new_with_name<F>(name: &str, mut $source: F) -> Self
where
F: $($semantic_bounds)+,
{
let $f = $adapter_expr;
Self {
function: $wrapper_expr,
metadata: $crate::internal::CallbackMetadata::named(name),
}
}
#[doc = concat!("Creates a new named ", $type_desc, " with an optional name.")]
#[doc = concat!("A new ", $type_desc, " wrapper.")]
#[inline]
pub fn new_with_optional_name<F>(mut $source: F, name: Option<String>) -> Self
where
F: $($semantic_bounds)+,
{
let $f = $adapter_expr;
Self {
function: $wrapper_expr,
metadata: $crate::internal::CallbackMetadata::from_optional_name(name),
}
}
#[allow(
dead_code,
reason = "generated for metadata-preserving wrapper transformations"
)]
#[doc = concat!("A new ", $type_desc, " wrapper.")]
#[inline]
pub(crate) fn new_with_metadata<F>(
mut $source: F,
metadata: $crate::internal::CallbackMetadata,
) -> Self
where
F: $($semantic_bounds)+,
{
let $f = $adapter_expr;
Self { function: $wrapper_expr, metadata }
}
};
(
semantic ($($semantic_bounds:tt)+),
|$source:ident| $adapter_expr:expr,
|$f:ident| $wrapper_expr:expr,
$type_desc:literal
) => {
#[doc = concat!("Creates a new ", $type_desc, ".")]
#[doc = concat!("A new ", $type_desc, " wrapper.")]
#[inline]
pub fn new<F>($source: F) -> Self
where
F: $($semantic_bounds)+,
{
let $f = $adapter_expr;
Self {
function: $wrapper_expr,
metadata: $crate::internal::CallbackMetadata::unnamed(),
}
}
#[doc = concat!("Creates a new named ", $type_desc, ".")]
#[doc = concat!("A new named ", $type_desc, " wrapper.")]
#[inline]
pub fn new_with_name<F>(name: &str, $source: F) -> Self
where
F: $($semantic_bounds)+,
{
let $f = $adapter_expr;
Self {
function: $wrapper_expr,
metadata: $crate::internal::CallbackMetadata::named(name),
}
}
#[doc = concat!("Creates a new named ", $type_desc, " with an optional name.")]
#[doc = concat!("A new ", $type_desc, " wrapper.")]
#[inline]
pub fn new_with_optional_name<F>(
$source: F,
name: Option<String>,
) -> Self
where
F: $($semantic_bounds)+,
{
let $f = $adapter_expr;
Self {
function: $wrapper_expr,
metadata: $crate::internal::CallbackMetadata::from_optional_name(name),
}
}
#[allow(
dead_code,
reason = "generated for metadata-preserving wrapper transformations"
)]
#[doc = concat!("A new ", $type_desc, " wrapper.")]
#[inline]
pub(crate) fn new_with_metadata<F>(
$source: F,
metadata: $crate::internal::CallbackMetadata,
) -> Self
where
F: $($semantic_bounds)+,
{
let $f = $adapter_expr;
Self {
function: $wrapper_expr,
metadata,
}
}
};
(
($($fn_trait_with_bounds:tt)+),
|$f:ident| $wrapper_expr:expr,
$type_desc:literal
) => {
#[doc = concat!("Creates a new ", $type_desc, ".")]
#[doc = concat!("Wraps the provided closure in the appropriate smart pointer type for this ", $type_desc, " implementation.")]
#[doc = concat!("A new ", $type_desc, " wrapper.")]
#[inline]
pub fn new<F>($f: F) -> Self
where
F: $($fn_trait_with_bounds)+,
{
Self {
function: $wrapper_expr,
metadata: $crate::internal::CallbackMetadata::unnamed(),
}
}
#[doc = concat!("Creates a new named ", $type_desc, ".")]
#[doc = concat!("A new named ", $type_desc, " wrapper.")]
#[inline]
pub fn new_with_name<F>(name: &str, $f: F) -> Self
where
F: $($fn_trait_with_bounds)+,
{
Self {
function: $wrapper_expr,
metadata: $crate::internal::CallbackMetadata::named(name),
}
}
#[doc = concat!("Creates a new named ", $type_desc, " with an optional name.")]
#[doc = concat!("A new ", $type_desc, " wrapper.")]
#[inline]
pub fn new_with_optional_name<F>($f: F, name: Option<String>) -> Self
where
F: $($fn_trait_with_bounds)+,
{
Self {
function: $wrapper_expr,
metadata: $crate::internal::CallbackMetadata::from_optional_name(name),
}
}
#[allow(
dead_code,
reason = "generated for metadata-preserving wrapper transformations"
)]
#[doc = concat!("A new ", $type_desc, " wrapper.")]
#[inline]
pub(crate) fn new_with_metadata<F>(
$f: F,
metadata: $crate::internal::CallbackMetadata,
) -> Self
where
F: $($fn_trait_with_bounds)+,
{
Self {
function: $wrapper_expr,
metadata,
}
}
};
}
pub(crate) use impl_common_new_methods;