//- // Copyright 2017, 2018 The proptest developers // // Licensed under the Apache License, Version 2.0 or the MIT license // , at your // option. This file may not be copied, modified, or distributed // except according to those terms. //! Defines macros for product type creation, extraction, and the type signature //! itself. This version uses tuples. This mechanism is used to be very //! loosely coupled with `frunk_core` so that only `lib.rs` has to be changed //! in the event that Rust gets tuple-variadic generics. macro_rules! product_type { ($factor: ty) => { ($factor,) }; ($($factor: ty),*) => { ( $( $factor, )* ) }; ($($factor: ty),*,) => { ( $( $factor, )* ) }; } macro_rules! product_pack { ($factor: expr) => { ($factor,) }; ($($factor: expr),*) => { ( $( $factor ),* ) }; ($($factor: expr),*,) => { ( $( $factor ),* ) }; } macro_rules! product_unpack { ($factor: pat) => { ($factor,) }; ($($factor: pat),*) => { ( $( $factor ),* ) }; ($($factor: pat),*,) => { ( $( $factor ),* ) }; }