diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:18:32 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:18:32 +0000 |
commit | 4547b622d8d29df964fa2914213088b148c498fc (patch) | |
tree | 9fc6b25f3c3add6b745be9a2400a6e96140046e9 /vendor/icu_provider_adapters/src/fork/macros.rs | |
parent | Releasing progress-linux version 1.66.0+dfsg1-1~progress7.99u1. (diff) | |
download | rustc-4547b622d8d29df964fa2914213088b148c498fc.tar.xz rustc-4547b622d8d29df964fa2914213088b148c498fc.zip |
Merging upstream version 1.67.1+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/icu_provider_adapters/src/fork/macros.rs')
-rw-r--r-- | vendor/icu_provider_adapters/src/fork/macros.rs | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/vendor/icu_provider_adapters/src/fork/macros.rs b/vendor/icu_provider_adapters/src/fork/macros.rs new file mode 100644 index 000000000..7c18a9ba3 --- /dev/null +++ b/vendor/icu_provider_adapters/src/fork/macros.rs @@ -0,0 +1,71 @@ +// This file is part of ICU4X. For terms of use, please see the file +// called LICENSE at the top level of the ICU4X source tree +// (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ). + +/// Make a forking data provider with an arbitrary number of inner providers +/// that are known at build time. +/// +/// # Examples +/// +/// ``` +/// use icu_provider_adapters::fork::ForkByKeyProvider; +/// +/// // Some empty example providers: +/// #[derive(Default, PartialEq, Debug)] +/// struct Provider1; +/// #[derive(Default, PartialEq, Debug)] +/// struct Provider2; +/// #[derive(Default, PartialEq, Debug)] +/// struct Provider3; +/// +/// // Combine them into one: +/// let forking1 = icu_provider_adapters::make_forking_provider!( +/// ForkByKeyProvider::new, +/// [ +/// Provider1::default(), +/// Provider2::default(), +/// Provider3::default(), +/// ] +/// ); +/// +/// // This is equivalent to: +/// let forking2 = ForkByKeyProvider::new( +/// Provider1::default(), +/// ForkByKeyProvider::new(Provider2::default(), Provider3::default()), +/// ); +/// +/// assert_eq!(forking1, forking2); +/// ``` +#[macro_export] +macro_rules! make_forking_provider { + // Base case: + ($combo_p:path, [ $a:expr, $b:expr, ]) => { + $combo_p($a, $b) + }; + // General list: + ($combo_p:path, [ $a:expr, $b:expr, $($c:expr),+, ]) => { + $combo_p($a, $crate::make_forking_provider!($combo_p, [ $b, $($c),+, ])) + }; +} + +#[cfg(test)] +mod test { + #[derive(Default)] + struct Provider1; + #[derive(Default)] + struct Provider2; + #[derive(Default)] + struct Provider3; + + #[test] + fn test_make_forking_provider() { + make_forking_provider!( + crate::fork::ForkByKeyProvider::new, + [ + Provider1::default(), + Provider2::default(), + Provider3::default(), + ] + ); + } +} |