#![feature(extend_one)]
#![feature(impl_trait_in_assoc_type)]
#![feature(negative_impls)]
#[cfg(feature = "codegen")]
pub mod codegen;
#[cfg(feature = "deps")]
pub mod deps;
pub mod utils;
#[macro_export]
macro_rules! mod_all_os {
{$vis:vis} => {
#[cfg(unix)]
$vis mod unix;
#[cfg(target_os = "linux")]
$vis mod linux;
#[cfg(target_os = "macos")]
$vis mod macos;
#[cfg(windows)]
$vis mod windows;
#[cfg(target_os = "ios")]
$vis mod ios;
#[cfg(target_os = "android")]
$vis mod android;
};
}
#[macro_export]
macro_rules! args {
(
$args:ident: if let $pat:pat = $ok:expr =>
$(@$oper:ident)? $arg:expr $(; $($rest:tt)*)?
) => {
if let $pat = $ok {
$crate::args!($args: $(@$oper)? $arg);
}
$($crate::args!($args: $($rest)*);)?
};
(
$args:ident: if $condition:expr =>
$(@$oper:ident)? $arg:expr $(; $($rest:tt)*)?
) => {
if $condition {
$crate::args!($args: $(@$oper)? $arg);
}
$($crate::args!($args: $($rest)*);)?
};
(
$args:ident: let $pat:pat = $ok:expr =>
$(@$oper:ident)? $arg:expr $(; $($rest:tt)*)?
) => {
{
let $pat = $ok;
$crate::args!($args: $(@$oper)? $arg);
}
$($crate::args!($args: $($rest)*);)?
};
($args:ident: $(@$oper:ident)? $arg:expr $(; $($rest:tt)*)?) => {
$crate::arg!($args: $(@$oper)? $arg);
$($crate::args!($args: $($rest)*);)?
};
($args:ident: ) => {};
}
#[macro_export]
macro_rules! arg {
($args:ident: @push $arg:expr) => {
$args.push($arg)
};
($args:ident: @map $arg:expr) => {
$args.push($crate::utils::std::MapToArg::map_to_arg($arg))
};
($args:ident: @extend $arg:expr) => {
$args.extend($arg)
};
($args:ident: @maps $arg:expr) => {
$args.extend($crate::utils::std::MapToArgs::map_to_args($arg))
};
($args:ident: $arg:expr) => {
$crate::arg!($args: @maps $arg)
};
}