leaf_spread/
lib.rs

1use std::ops::Range;
2mod leaf_sample;
3use leaf_sample::GoldenSerie;
4
5pub fn range_into<T: Into<f64> + Copy>(range: Range<T>) -> Range<f64> {
6    return Range {
7        start: range.start.into(),
8        end: range.end.into(),
9    };
10}
11
12// Waiting for https://github.com/rust-lang/rust/issues/83527
13macro_rules! count {
14    () => { 0 };
15    ($a:expr) => { 1 };
16    ($odd:expr, $($a:expr, $b:expr),*) => {
17        (count!($($a)*) << 1) | 1
18    };
19    ($($a:expr, $even:expr)*) => {
20        (count!($($a)*) << 1)
21    };
22}
23
24#[macro_export]
25macro_rules! leaf_sample {
26    ( $( $x:expr ),* ) => {
27        GoldenSerie::new([$(range_into($x)),*])
28    }
29}
30
31#[cfg(test)]
32mod tests {
33    use crate::*;
34
35    #[test]
36    fn macro_works() {
37        for [hue, value] in leaf_sample!(0..360, 0.6..1.0).take(10) {
38            println!("{hue}, {value}");
39        }
40    }
41}